Presentation is loading. Please wait.

Presentation is loading. Please wait.

תזכורת: גרפים גרף (G=(V,E V|=n, |E|=m| מכוון \ לא מכוון דרגה של קדקד

Similar presentations


Presentation on theme: "תזכורת: גרפים גרף (G=(V,E V|=n, |E|=m| מכוון \ לא מכוון דרגה של קדקד"— Presentation transcript:

1 תזכורת: גרפים גרף (G=(V,E V|=n, |E|=m| מכוון \ לא מכוון דרגה של קדקד
מסלול בגרף רכיבי קשירות

2 מטריצת שכנויות A B C D E A 0 0 0 0 0 B 1 0 0 0 0 C 0 1 0 0 1

3 רשימות שכנות A 12345 E 1 2 5 3 5 1 4 C B D

4 גרף מצביעים class Node { // private data members Node getNbr(int i){
// compute I’th nbr }

5 גרף לא מפורש class State { // …. void move( …. ) { // change state }

6 סריקת גרף אלגוריתם נאיבי search(s): print s for all u in s.nbrs
search(u) קלט: גרף G, קדקד s פלט: כל הקדקדים אליהם יש מסלול ב-G מ-s

7 רעיון לשיפור: Memoization
F = {s} Repeat v <- node from F for all v in u.nbrs if v not in F F = F + {v} Until no new nodes שיטות סריקה חיפוש לרוחב: Breadth First Search חיפוש לעומק: Depth First Search חיפוש לפי טיב Best First Search ...

8 חיפוש לרוחב: (BFS(G,s while Q not empty u = Q.deque() print u
for all v in u.nbrs if not v.visited v.visited=true Q.enque(v) אתחול: Que Q = {} for all v in V v.visited = false s.visited = true Q.enque(s)

9 מסלולים קצרים ביותר עובדה: לכל קדקד v (פרט ל- s) קיים קדקד u כך שב-G יש צלע (u,v), ו: d(s,v) = d(s,u) + 1 הגדרה: אורך המסלול הקצר ביותר ב-G מ-s ל-u יסומן ב- d(s,u) עובדה: אם ב-G יש צלע (u,v) אזי: d(s,v) <= d(s,u) + 1 u v

10 BFS עם חשוב מרחקים while Q not empty u = Q.deque() for all v in u.nbrs
if not v.visited v.visited=true v.d = u.d + 1 v.father = u Q.enque(v) אתחול: for all v in V v.visited = false v.d = infinity v.father = NULL s.visited = true s.d = 0 Que Q = {s}

11 נכונות BFS למה: אם d(s,u) < d(s,w) אזי u נכנס לתור לפני w.
הוכחה: באינדוקציה על d=d(s,u) משפט: בסוף הריצה, לכל הקדקדים v: v.d = d(s,v) הוכחה: באינדוקציה על d=d(s,v)

12 הדפסת מסלול קצר ביותר משפט: אלגוריתם זה מדפיס מסלול קצר ביותר מ-s ל-v.
path(v) מדפיס את המסלול הקצר ביותר מ-s ל-v. if v != s path(v.father) print v

13 חיפוש לעומק: DFS אתחול: for all v in V v.visited = false DFS(s)
DFS(u): // starting with u u.visited = true print u for all v in u.nbrs if not v.visited DFS(v) // finished with u

14 מיון טופולוגי משפט: לגרף G יש מיון טופולוגי אםם אין בו מעגל.
הוכחה: נבנה אלגוריתם! קלט: גרף G פלט: מיון טופולוגי של הקדקדים. הגדרה: מיון טופולוגי הינו סידור של הקדקדים כך שאם יש בגרף צלע (u,v) אזי u יופיע לפני v בסדר.

15 מיון טופולוגי עם DFS אתחול: DFS(u): u.visited = true for all v in V
v.visited = false v.finished = false if not v.visited DFS(v) DFS(u): u.visited = true for all v in u.nbrs if not v.visited DFS(v) else if not v.finished exit “cycle exists” print u u.finished = true

16 נכונות למה: אם בתוך ריצת DFS(u) נתקלנו ב v שהינו
למה: אם בתוך ריצת DFS(u) נתקלנו ב v שהינו visited and not finished אזי יש מסלול מ-v ל-u בגרף. משפט 1: אם אין בגרף מעגלים אזי האלגוריתם מדפיס מיון טופולוגי (בסדר הפוך). 2: אם יש בגרף מעגל אזי האלגוריתם אומר כך.


Download ppt "תזכורת: גרפים גרף (G=(V,E V|=n, |E|=m| מכוון \ לא מכוון דרגה של קדקד"

Similar presentations


Ads by Google