1 / 16

תזכורת: גרפים

גרף ( G=(V,E V|=n, |E|=m| מכוון לא מכוון דרגה של קדקד מסלול בגרף רכיבי קשירות. תזכורת: גרפים. A B C D E A 0 0 0 0 0 B 1 0 0 0 0 C 0 1 0 0 1 D 0 0 1 0 1 E 1 0 0 1 0. מטריצת שכנויות. A. E. C. B. D.

curt
Download Presentation

תזכורת: גרפים

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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 D 0 0 1 0 1 E 1 0 0 1 0 מטריצת שכנויות A E C B D

  3. רשימות שכנות 12345 A 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. 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 ... רעיון לשיפור: Memoization

  8. 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) חיפוש לרוחב: (BFS(G,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. 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} BFS עםחשוב מרחקים

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

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

  13. אתחול: 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 חיפוש לעומק: DFS

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

  15. אתחול: for all v in V v.visited = false v.finished = false for all v in V 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 מיון טופולוגי עםDFS

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

More Related