Presentation is loading. Please wait.

Presentation is loading. Please wait.

BFS,DFS Topological Sort

Similar presentations


Presentation on theme: "BFS,DFS Topological Sort"— Presentation transcript:

1 BFS,DFS Topological Sort
תרגול 12 BFS,DFS Topological Sort מבני נתונים 152 תרגול 12 23 נובמבר 18

2 גרפים גרף G=(V,E) 2 דרכים עיקריות לייצג גרף כמבנה נתונים:
מטריצת סמיכויות מטריצה M בגודל |𝑉|𝑥|𝑉| M[i,j]=1 אם יש קשת בין 𝑣𝑖 ל𝑣𝑗 בG, אחרת M[i,j]=0 רשימות סמיכויות מערך בגודל |V| התא ה𝑖 מכיל רשימה משורשרת של השכנים של 𝑣𝑖. כלומר, של כל הקודקודים 𝑣𝑗 כך ש 𝑣 𝑖 , 𝑣 𝑗 ∈𝐸 מבני נתונים 152 תרגול 12 23 נובמבר 18

3 מבני נתונים 152 תרגול 12 23 נובמבר 18

4 מבני נתונים 152 תרגול 12 23 נובמבר 18

5 BFS(G, s) - Breadth-First Search
קודם נגיע לשכנים הקרובים ביותר ורק אח"כ נתרחק. מבני נתונים 152 תרגול 12 23 נובמבר 18

6 BFS(G, s) - Breadth-First Search
מתחילים מקודקוד המקור 𝑠 ועוברים שכבה שכבה עד שמכסים את כל הקודקודים שניתן להגיע מ𝑠 אליהם. האלגוריתם מחשב את המרחק הקצר ביותר מ𝑠 לכל הקודקודים הנגישים לו. האלגוריתם עובד על גרף מכוון ולא מכוון. מבני נתונים 152 תרגול 12 23 נובמבר 18

7 BFS(G,s) 1. for each vertex u in V[G] – {s} 2 do color[u]  white 3 d[u]   4 [u]  null 5 color[s]  gray 6 d[s]  0 7 [s]  null 8 Q   9 enqueue(Q,s) 10 while Q   11 do u  dequeue(Q) 12 for each v in Adj[u] 13 do if color[v] = white 14 then color[v]  gray 15 d[v]  d[u] [v]  u 17 enqueue(Q,v) 18 color[u]  black white: undiscovered (לא התגלה) gray: discovered (בטיפול) black: finished(סיימתי) Q: a queue of discovered vertices color[v]: color of v d[v]: distance from s to v [u]: predecessor of v מבני נתונים 152 תרגול 12 23 נובמבר 18

8 Example (BFS) r s t u        v w x y Q: s
v w x y Q: s מבני נתונים 152 תרגול 12 23 נובמבר 18

9 Example (BFS) r s t u 1    1   v w x y Q: w r 1 1
1 v w x y Q: w r 1 1 מבני נתונים 152 תרגול 12 23 נובמבר 18

10 Example (BFS) r s t u 1 2   1 2  v w x y Q: r t x 1 2 2
2 1 2 v w x y Q: r t x מבני נתונים 152 תרגול 12 23 נובמבר 18

11 Example (BFS) r s t u 1 2  2 1 2  v w x y Q: t x v 2 2 2
2 2 1 2 v w x y Q: t x v מבני נתונים 152 תרגול 12 23 נובמבר 18

12 Example (BFS) r s t u 1 2 3 2 1 2  v w x y Q: x v u 2 2 3
2 3 2 1 2 v w x y Q: x v u מבני נתונים 152 תרגול 12 23 נובמבר 18

13 Example (BFS) r s t u 1 2 3 2 1 2 3 v w x y Q: v u y 2 3 3
2 3 2 1 2 3 v w x y Q: v u y מבני נתונים 152 תרגול 12 23 נובמבר 18

14 Example (BFS) r s t u 1 2 3 2 1 2 3 v w x y Q: u y 3 3
2 3 2 1 2 3 v w x y Q: u y 3 3 מבני נתונים 152 תרגול 12 23 נובמבר 18

15 Example (BFS) r s t u 1 2 3 2 1 2 3 v w x y Q: y 3
2 3 2 1 2 3 v w x y Q: y 3 מבני נתונים 152 תרגול 12 23 נובמבר 18

16 Example (BFS) r s t u 1 2 3 2 1 2 3 v w x y Q: 
2 3 2 1 2 3 v w x y Q:  מבני נתונים 152 תרגול 12 23 נובמבר 18

17 Time complexity: O(|V| + |E|), sometimes written as O(V+E)
Example (BFS) r s t u 1 2 3 2 1 2 3 v w x y BFS Tree Time complexity: O(|V| + |E|), sometimes written as O(V+E) מבני נתונים 152 תרגול 12 23 נובמבר 18

18 DFS(G, s) - Depth-First Search
מבני נתונים 152 תרגול 12 23 נובמבר 18

19 DFS DFS(G) 1. for each vertex u  V[G] 2. do color[u]  white 3. [u]  NULL 4. time  0 5. for each vertex u  V[G] 6. do if color[u] = white 7. then DFS-Visit(u) DFS-Visit(u) color[u]  GRAY time  time + 1 d[u]  time for each v  Adj[u] do if color[v] = WHITE then [v]  u DFS-Visit(v) color[u]  BLACK f[u]  time Uses a global timestamp time. מבני נתונים 152 תרגול 12 23 נובמבר 18

20 Example (DFS) u v w 1/ x y z מבני נתונים 152 תרגול 12 23 נובמבר 18

21 Example (DFS) u v w 1/ 2/ x y z מבני נתונים 152 תרגול 12 23 נובמבר 18

22 Example (DFS) u v w 1/ 2/ 3/ x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

23 Example (DFS) u v w 1/ 2/ 4/ 3/ x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

24 Example (DFS) u v w 1/ 2/ B 4/ 3/ x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

25 Example (DFS) u v w 1/ 2/ B 4/5 3/ x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

26 Example (DFS) u v w 1/ 2/ B 4/5 3/6 x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

27 Example (DFS) u v w 1/ 2/7 B 4/5 3/6 x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

28 Example (DFS) u v w 1/ 2/7 B F 4/5 3/6 x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

29 Example (DFS) u v w 1/8 2/7 B F 4/5 3/6 x y z מבני נתונים 152 תרגול 12
23 נובמבר 18

30 Example (DFS) u v w 1/8 2/7 9/ B F 4/5 3/6 x y z
מבני נתונים 152 תרגול 12 23 נובמבר 18

31 Example (DFS) u v w 1/8 2/7 9/ B C F 4/5 3/6 x y z
מבני נתונים 152 תרגול 12 23 נובמבר 18

32 Example (DFS) u v w 1/8 2/7 9/ B C F 4/5 3/6 10/ x y z
מבני נתונים 152 תרגול 12 23 נובמבר 18

33 Example (DFS) u v w 1/8 2/7 9/ B C F 4/5 3/6 10/ B x y z
מבני נתונים 152 תרגול 12 23 נובמבר 18

34 Example (DFS) u v w 1/8 2/7 9/ B C F 4/5 3/6 B x y z 10/11
מבני נתונים 152 תרגול 12 23 נובמבר 18

35 Example (DFS) u v w 1/8 2/7 9/12 B C F 4/5 3/6 B x y z 10/11
מבני נתונים 152 תרגול 12 23 נובמבר 18

36 DFS Edges Classifications
DFS can be used to classify the edges of the input graph G=(V,E). Tree-edges – קשת בעץ (u,v) - if v was initially discovered using edge from u to v Back-edges – קשת אחורה (u,v) - if v is an ancestor of u in the depth-tree Forward-edges – קשת קדימה (u,v) - not a tree-edge, where u is v's ancestor Cross-edges – קשת חוצה (u,v) - All the other edges, where u and v are vertices in different depth-tree, u is not v's ancestor or v is not u's ancestor מה קורה בגרף לא מכוון? הקשתות היחידות הן: קשתות עץ קשתות אחורה מבני נתונים 152 תרגול 12 23 נובמבר 18

37 דוגמת ריצה של BFS & DFS מבני נתונים 152 תרגול 12 23 נובמבר 18

38 רעיון – בוא נקבע סדר כלשהו על הגרף
שאלה 1 – גרף חסר מעגלים נתון גרף לא מכוון𝐺 = (𝑉,𝐸) המיוצג ע"י רשימת שכינויות. הצע אלגוריתם ליצירת גרף מכוון חסר מעגלים 𝐺′ = (𝑉,𝐸′) מתוך הגרף 𝐺. האלגוריתם קובע את הכיוון של הקשתות 𝐸 כך ש|E′|=|E|. רעיון – בוא נקבע סדר כלשהו על הגרף מבני נתונים 152 תרגול 12 23 נובמבר 18

39 שאלה 1 – גרף חסר מעגלים פתרון: נמספר את כל הקודקודים בגרף.
נתון גרף לא מכוון𝐺 = (𝑉,𝐸) המיוצג ע"י רשימת שכינויות. הצע אלגוריתם ליצירת גרף מכוון חסר מעגלים 𝐺′ = (𝑉,𝐸′) מתוך הגרף 𝐺. האלגוריתם קובע את הכיוון של הקשתות 𝐸 כך ש|E′|=|E|. פתרון: נמספר את כל הקודקודים בגרף. נאתחל 𝐸 ′ = . לכל קודקוד 𝑣 𝑖 ∈𝑉 וקשת 𝑣 𝑖 , 𝑣 𝑗 ∈𝐸 כך ש 𝑖<𝑗 אזי: 𝐸 ′ ← 𝐸 ′ ∪( 𝑣 𝑖 , 𝑣 𝑗 ) מבני נתונים 152 תרגול 12 23 נובמבר 18

40 שאלה 1 – גרף חסר מעגלים הוכחה: נוכיח כי 𝐸 ′ = 𝐸 :
נוכיח כי 𝐸 ′ = 𝐸 : לכל קשת 𝑣 𝑖 , 𝑣 𝑗 ∈𝐸 מתקיים כי או (𝑖 < 𝑗) או 𝑗 < 𝑖 . מכיוון ש 𝑣 𝑖 , 𝑣 𝑗 וגם 𝑣 𝑗 , 𝑣 𝑖 נמצאות ברשימת השכינויות של הגרף הלא מכוון, אז בדיוק אחת מהן תופיע ב𝐸′. מבני נתונים 152 תרגול 12 23 נובמבר 18

41 שאלה 1 – גרף חסר מעגלים הוכחה: נוכיח כי 𝐺′ הוא גרף חסר מעגלים :
נניח בשלילה שיש מעגל ב𝐺′ אשר מתחיל מהקודקוד 𝑣 𝑖 . המעגל עובר בקודקודים 𝑣 𝑖 , 𝑣 𝑖 1 , 𝑣 𝑖 2 ,…, 𝑣 𝑖 𝑘 ואז חוזר ל 𝑣 𝑖 . 𝑣 𝑖 , 𝑣 𝑖 1 , 𝑣 𝑖 2 ,…, 𝑣 𝑖 𝑘 , 𝑣 𝑖 לפי בניית הגרף, מתקיים 𝑖< 𝑖 1 <…< 𝑖 𝑘 <𝑖 סתירה מבני נתונים 152 תרגול 12 23 נובמבר 18

42 שאלה 2 דרך מהעיר A לעיר B מיוצג ע"י הזוג (A,B)
הניחו כי הדרכים הם דו כיווניות בהינתן קבוצה של m דרכים ו – n ערים הציעו איך לעבד את הקלט בזמן O(n+m) וזיכרון לא מוגבל כדי לתמוך בפעולה הבאה בזמן O(1): Reachable(i,j)- מחזיר TRUE אם קיימת דרך מעיר i לעיר j אחרת יחזיר FALSE מבני נתונים 152 תרגול 12 23 נובמבר 18

43 שאלה 2 – רכיבי קשירות רעיון: רכיבי קשירות:
גרף חלקי לגרף המקורי בו קיימת דרך בין כל שני קודקודים בתת הגרף (כל קודקוד בדרך שייך לתת הגרף) מבני נתונים 152 תרגול 12 23 נובמבר 18

44 שאלה 2 – רכיבי קשירות עיבוד מקדים:
ייצג את הקלט כגרף לא מכוון G=(V,E), כך שהקודקודים ייצגו את הערים והצלעות את הדרכים. נייצג את הגרף כרשימת סמיכויות. זמן עיבוד וזיכרון : O(n + m) הגדר מערך C בגודל n. המערך ישמור את הנציג של רכיב הקשירות עבור כל קודקוד. עבור כל קודקוד v בגרף G: אם ל v אין נציג, הוא חלק מרכיב קשירות אשר לא התגלה. הפעל DFS או BFS מ – v וסמן במערך C את v כנציג של כל הקודקודים שהתגלו בהרצת הDFS/BFS. אחרת אם ל v יש נציג, הוא חלק מרכיב קשירות שכבר התגלה, לכן נדלג עליו. מבני נתונים 152 תרגול 12 23 נובמבר 18

45 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

46 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

47 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

48 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

49 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

50 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

51 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

52 שאלה 2 – רכיבי קשירות 1 2 3 4 5 6 7 1 2 3 4 5 6 7 מבני נתונים 152 תרגול 12 23 נובמבר 18

53 האם זיכרון לא מוגבל יכול לעזור כאשר הזמן ריצה מוגבל?
שאלה 2 – רכיבי קשירות זמן הריצה של העיבוד המקדים הוא O(n+m) מכיוון שבכל קודקוד נבקר פעמיים - פעם אחת בלולאה החיצונית (סעיף 3 באלגוריתם), ועוד פעם כאשר נבקר בו בזמן שנריץ BFS\DFS מאחד הקודקודים ברכיב הקשירות. בנוסף נבקר בכל צלע פעם אחת. Reachable(i,j): יחזיר TRUE אמ"מ קודקוד i וקודקוד j שייכים לאותו רכיב קשירות, כלומר C[i] = C[j] זמן ריצה : O(1) האם זיכרון לא מוגבל יכול לעזור כאשר הזמן ריצה מוגבל? לא, הזיכרון משפיע על זמן הריצה, אם אני רצים בזמן O(n) אזי נוכל להשתמש בלכל היותר O(n) זיכרון מבני נתונים 152 תרגול 12 23 נובמבר 18

54 שאלה 3 – רדוקציה רדוקציה - תזכורת: נניח שיש לנו שתי בעיות 𝑃 1 , 𝑃 2 .
נניח שיש לנו שתי בעיות 𝑃 1 , 𝑃 2 . יש לנו אלגוריתם שפותר את 𝑃 2 . רדוקציה מבעיה 𝑃 1 לבעיה 𝑃 2 זוהי דרך לפתור את הבעיה 𝑃 1 בעזרת האלגוריתם לפתרון 𝑃 2 מבני נתונים 152 תרגול 12 23 נובמבר 18

55 שאלה 3 – רדוקציה בהינתן גרף לא מכוון G = (V,E), (G קשיר).
נגיד עבור כל 2 קבוצות של קודקודים 𝑉1 ו 𝑉2 כך ש 𝑉 1 ∪ 𝑉 2 ⊆𝑉 : distance(u,v) – אורך המסלול הקצר ביותר מ u ל-v ב G. distance(V1, V2) – min 𝑣∈ 𝑉 1 ,𝑢∈ 𝑉 2 {𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 𝑢,𝑣 } גודל המסלול הקצר ביותר מקודקוד ב 𝑉 1 לקודקוד ב 𝑉 2 (הערה: אם 𝑉1∩ 𝑉 2 ≠∅ אז distance(𝑉1, 𝑉2)=0) מצא את distance(V1, V2) בזמן ריצה 𝑶(|𝑽|+|𝑬|) 1 3 4 5 2 6 מבני נתונים 152 תרגול 12 23 נובמבר 18

56 שאלה 3 – רדוקציה פתרון: נגדיר גרף חדש G'=(V',E') מהגרף הישן G = (V,E).
נוסיף 2 קודקודים s ו t ל V, נחבר את s לכל קודקוד ב 𝑉 1 ונחבר את t לכל קודקוד ב 𝑉 2 ונריץBFS כדי לגלות את אורך המסלול הקצר ביותר מ s ל t. אורך המסלול הקצר ביותר מ s ל t יהיה distance(V1, V2) + 2 1 s 3 4 5 t 2 6 מבני נתונים 152 תרגול 12 23 נובמבר 18

57 שאלה 3 – רדוקציה Solution: 𝑉 ′ ←𝑉∪ 𝑠,𝑡
𝐸 ′ ←𝐸∪ 𝑠,𝑢 :𝑢∈ 𝑉 1 ∪ 𝑣,𝑡 :𝑣∈ 𝑉 2 Execute BFS from s // Finding d(t). return 𝑑(𝑡) – 2 Runtime: 𝑂(|𝑉|) + 𝑂(|𝑉|) + 𝑂(|𝑉| + |𝐸|) + 𝑂(1) = 𝑂(|𝑉| + |𝐸|) מבני נתונים 152 תרגול 12 23 נובמבר 18

58 שאלה 4 הצע אלגוריתם הקובע האם בגרף לא מכוון קיים מעגל (באורך גדול מ-1) הרץ בזמן ריצה 𝑂(|𝑉|) שימו לב כי זמן הריצה אינו תלוי ב E מבני נתונים 152 תרגול 12 23 נובמבר 18

59 שאלה 4 פתרון: למה: גרף לא מכוון הוא ללא מעגלים אמ"מ בפעלת DFS על הגרף לא נקבל צלעות לאחור. צלע (u,v) נקראת צלע לאחור אם u אב קדמון של v אך הצלע (u,v) אינה צלע בעץ שנוצר ע"י ה-DFS מבני נתונים 152 תרגול 12 23 נובמבר 18

60 שאלה 4 פתרון: למה: גרף לא מכוון הוא ללא מעגלים אמ"מ בפעלת DFS על הגרף לא נקבל צלעות לאחור. ניתן לשנות את אלגוריתם ה-DFS כך שהוא יסווג קשתות כשהוא נתקל בהם. בDFS של גרף לא מכוון כל צלע היא צלע בעץ או צלע לאחור. אם הגענו לקודקוד אפור (הגענו דרך צלע לאחור) חזרנו לקודקוד שכבר ביקרנו בו ולכן בגרף יש מעגל. מבני נתונים 152 תרגול 12 23 נובמבר 18

61 שאלה 4 Solution: Acyclic(G=(V,E)) execute DFS on the graph while:
counting the number of visited nodes If DFS visits a grey node return "cycle" זמן ריצת האלגוריתם הוא O(|V|), מכיוון שבמקרה הגרוע ביותר האלגוריתם יסרוק |V|-1 קודקודים לפני שיגיע לקודקוד אפור (קשת לאחור) או שהאלגוריתם יסתיים (בגלל שגרף לא מכוון עם יותר מ|V| קשתות מכיל מעגל) מבני נתונים 152 תרגול 12 23 נובמבר 18

62 שאלה 5 הגדרה: קודקוד בגרף מכוון נקרא super-sink אם דרגת היציאה שלו היא 0, ודרגת הכניסה שלו היא |V|-1 דוגמה: מבני נתונים 152 תרגול 12 23 נובמבר 18

63 שאלה 5 נתון גרף מכוון G=(V,E) המיוצג בעזרת מטריצת סמיכויות. הציעו אלגוריתם שרץ בזמן O(|V|) המוצא האם קיים super-sink בגרף, ואם כן מחזיר אותו. רעיון: אם הקודקוד vi הוא super-sink, אז כל השורה שלו היא אפסים, וכל העמודה שלו (פרט לתא [i,i]) היא אחדות. i x x 1 x מבני נתונים 152 תרגול 12 23 נובמבר 18

64 שאלה 5 פתרון: זמן ריצה: הלולאה לוקחת לכל היותר (n+n) צעדים, ובדיקת כל השורה והעמודה לוקח 2n צעדים. סה"כ T(n)=O(n). i x x 1 x מבני נתונים 152 תרגול 12 23 נובמבר 18

65 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
23 נובמבר 18

66 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

67 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

68 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

69 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

70 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

71 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

72 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

73 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

74 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

75 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

76 שאלה 5 הדגמת פתרון: 8 7 6 5 4 3 2 1 מבני נתונים 152 תרגול 12
מבני נתונים 152 תרגול 12 23 נובמבר 18

77 שאלה 5 הדגמת פתרון: למה? v6 מועמד יחיד להיות super-sink. 8 7 6 5 4 3 2
1 למה? v6 מועמד יחיד להיות super-sink.

78 שאלה 5 הדגמת פתרון: v6 אכן super-sink 8 7 6 5 4 3 2 1
v6 אכן super-sink מבני נתונים 152 תרגול 12

79 שאלה 5 הדגמת פתרון: במקרה זה 2 מועמד, למה 6 לא יכול להיות מועמד? 8 7 6
4 3 2 1 במקרה זה 2 מועמד, למה 6 לא יכול להיות מועמד?

80 שאלה 5 הדגמת פתרון: במקרה זה 2 מועמד, למה 6 לא יכול להיות מועמד? 8 7 6
4 3 2 1 כי היה צריך להיות פה 1 כדי ש 6 יהיה super-sink במקרה זה 2 מועמד, למה 6 לא יכול להיות מועמד?

81 שאלה 5 פתרון: זמן ריצה: הלולאה לוקחת לכל היותר (n+n) צעדים, ובדיקת כל השורה והעמודה לוקח 2n צעדים. סה"כ T(n)=O(n). מבני נתונים 152 תרגול 12 23 נובמבר 18

82 שאלה 6 Update the BFS algorithm so that every vertex v in the graph contains not only d[v], the length of shortest path from s to v, but also the number of different paths of that length. 1 3 4 5 2 6 מבני נתונים 152 תרגול 12 23 נובמבר 18

83 שאלה 6 Solution: Each node u in the graph will contain an extra field:
M(u) - the number of different paths to u of length d(u). Initialize M(v)0 for all the vertices except s. initialize M(s)1. For each vertex u, when going over the neighbors v of u: if v is a white neighbor then M(v)  M(u) else // v is not a white neighbor of u if d(v) = d(u)+1 M(v)  M(v) + M(u) מבני נתונים 152 תרגול 12 23 נובמבר 18

84 שאלה 7 סעיף א: תארו אלגוריתם יעיל ככל האפשר הבודק האם הקשת נמצאת על כל המסלולים הקצרים ביותר בין s ל-t ב .G נתחו סיבוכיות זמן ריצה. 23 נובמבר 18

85 שאלה 7 סעיף א: תארו אלגוריתם יעיל ככל האפשר הבודק האם הקשת נמצאת על כל המסלולים הקצרים ביותר בין s ל-t ב .G נתחו סיבוכיות זמן ריצה. מבני נתונים 152 תרגול 12 23 נובמבר 18


Download ppt "BFS,DFS Topological Sort"

Similar presentations


Ads by Google