ראשי > אלגוריתמים בסיסיים בתורת הגרפים > סריקה > חיפוש לרוחב, חלק שני

חיפוש לרוחב - חלק שני

פסאדו קוד

1. for each vertex u (who is not s - the source vertex)
2. ____color(u) = white
3.____ d(u) = inf
4. color(s) = gray
5. d(s) =0
6. Enqueue(Q,s)
7. while Q not empty
8. ____u = head(Q)
9. ____for each v neighbor of u
10. _______if color(v) = white then
11. ___________d(v) = d(u)+1
12. ___________Enqueue(Q,v)
13. ___Dequeue(Q)
14. ___color(u) = black
15. end while

הסבר : בפסאודו קוד, אנו משתמשים בשני מערכים כדי לאחסן את צבע כל קודקוד בגרף ואת מרחקו מקודקוד המקור. כמו כן אנו משתמשים במבנה נתונים נוסף, תור, כדי לניהול קבוצת הקודקודים האפורה (הקודקודים שבטיפול). בתחילה צובע האלגוריתם את כל קודקודי הגרף בלבן ומאתחל את מרחקם לאינסוף (שורות 1-3), כמו כן נצבע קודקוד המקור באפור, מרחקו מקודקוד המקור נקבע לאפס (כמובן) והוא מוכנס לתור (שורות 4-6).
הלולאה העיקרית בתוכנית, עוברת על הקודקודים בתור, לפי סדר כניסתם וכל עוד נותרו קודקודים אפורים. מוציאים את הקודקוד מראש התור, עוברים על כל שכניו, כל שכן שעוד לא התגלה (צבעו לבן), יצבע באפור, מרחקו יהיה כמרחק הקודקוד בראש התור ועוד אחד ונכניס אותו לתור (שורות 9-12).
כשמסיימים לעבור על כל שכניו, נוציא אותו מהתור ונצבע אותו בשחור (שורות 13-14).

דוגמת הרצה

ניתוח זמן ריצה

לאחר האיתחול, בו צובעים את כל הקודקודים בלבן, לא נצבע אף קודקוד בלבן ולכן כל קודקוד נכנס ויוצא מהתור לכל היותר פעם אחת.
כל פעולת הכנסה והוצאה מהתור היא (O(1 לכן סה"כ הזמן המוקדש לתור הוא (O(V.
הזמן הכולל הלוקח לסריקת הקשתות (בהנחה שהגף מוצג ברשמית סמיכויות) הוא כסכום אורכי הקשתות, כלומר (O(E.

זמן הריצה הכולל של האלגוריתם הוא לינארי כגודל הייצוג של הגרף, כלומר (O(E+V.

 
קדימהלמעלהאחורה

ראשי - אודות - מפת האתר

©איתן 2002. כל הזכויות שמורות למערכת המידע איתן.