שאלה באלגוריתמים.
גרף מכוון G=(V,E)zzz יקרא גרף חצי קשיר בחוזקה אם לכל שני קודקודים u,v יש מסלול מu לv ו/או יש מסלול מv לu. כתבו אלגוריתם יעיל לבדיקה אם גרף מכוון הוא חצי קשיר בחוזקה. מה שאני חשבתי לעשות הוא להריץ BFS מכל קודקוד בV ולכל קודקוד u בV נשמור רשימה Lu של כל הקודקודים שהמרחק שלהם מu הוא אינסוף. בסוף התהליך יהיו לנו
רשימות Lu כאלו. כעת, לכל קודקוד u ולכל קודקוד v בLu נבדוק האם u מופיע גם בLv. במקרה כזה אין מסלול מu לv ואין גם מסלול מv לu. הבעיה שנדמה לי שהאלגוריתם הזה מאוד לא יעיל. הBFS-ים יקחו זמן של (O של)
*(
+ |E| zzz) שזה עוד בסדר, אבל נראה לי שהחיפוש ברשימות יקח זמן גדול מאוד. הוא חסום ידי
^
, אבל זה זמן ענקי. אולי הניתוח שלי של זמן הריצה לא טוב ואפשר למצוא חסם טוב יותר (הרבה הרבה יותר)? חשבתי גם על וריאציה אחרת: אחרי BFS עבור הקודקוד הראשון, u, אפשר להריץ BFS רק עבור הקודקודים בLu ואז לבדוק אם u יהיה שייך לLv עבור איזשהו קודקוד v בLv, אבל אז אני מסתבך כי אני צריך לבדוק מיד אח"כ עבור כל קודקוד בLv ובכלל אני מריץ BFS על v (שהוא בLu) בלי שיש לי איזשהו מידע על הרשימות שיתאימו לקודקודים האחרים בV, אז נראה לי שבוריאציה הזו אני אריץ יותר מדי BFS-ים. טוב, אחרי כל ההסבר הארוך הזה, מישהו יכול לתת לי כיוון/רמז? תודה מראש.
גרף מכוון G=(V,E)zzz יקרא גרף חצי קשיר בחוזקה אם לכל שני קודקודים u,v יש מסלול מu לv ו/או יש מסלול מv לu. כתבו אלגוריתם יעיל לבדיקה אם גרף מכוון הוא חצי קשיר בחוזקה. מה שאני חשבתי לעשות הוא להריץ BFS מכל קודקוד בV ולכל קודקוד u בV נשמור רשימה Lu של כל הקודקודים שהמרחק שלהם מu הוא אינסוף. בסוף התהליך יהיו לנו