אלגוריתמים נבחרים בתורת הגרפים
Download
1 / 20

אלגוריתמים נבחרים בתורת הגרפים - PowerPoint PPT Presentation


  • 130 Views
  • Uploaded on

אלגוריתמים נבחרים בתורת הגרפים. חיפוש לעומק Depth First search. חיפוש לעומק Depth First Search. המטרה: פתרון מבוכים ובעיות נוספות סריקת גרפים סופיים לא-מכוונים נתון גרף סופי G(V, E) . נתחיל באחד מקודקודיו ונרצה ללכת על הצלעות, מקודקוד לקודקוד, לבקר בכל הקודקודים ולעצור.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' אלגוריתמים נבחרים בתורת הגרפים' - august


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

אלגוריתמים נבחרים בתורת הגרפים

חיפוש לעומק

Depth First search


Depth first search
חיפוש לעומק Depth First Search

  • המטרה:

    • פתרון מבוכים ובעיות נוספות

    • סריקת גרפים סופיים לא-מכוונים

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

      • לא נרשה תכנון מראש (על-ידי למידת הגרף). בכל צעד מקבלים החלטה לוקלית, מבנה הגרף נלמד תוך כדי סריקתו.

      • לשם כך נשאיר סימנים תוך כדי הליכה כדי לזהות מקום שבקרנו בו.


Depth first search1
חיפוש לעומק Depth First Search

  • סריקת גרפים סופיים לא-מכוונים

    • מעברים:חיבור של קשת לקודקוד.

    • בייצוג ע"י רשימת פגיעות: מעבר הוא הופעה של קשת ברשימת הפגיעות.

    • נשתמש בשני סימונים:

      • F – המעבר הראשון ששמש כניסה לקודקוד,

      • E – עבור כל מעבר אחר שבו עזבנו את הקודקוד.

    • סימון מעברים אינו משתנה במהלך האלגוריתם.


Depth first search2
חיפוש לעומק Depth First Search

  • האלגוריתם של Tremax

    • s צומת ההתחלה. נרצה להגיע חזרה ל- s אחרי שכל צמתי הגרף נסרקו.

    • באלגוריתם:

      • אף צלע לא נסרקת פעמיים באותו כיוון.

      • בסיום האלגוריתם: כל צלע נסרקת בדיוק פעם אחת בכל כיוון.

      • האלגוריתם עוצר תמיד בצומת ההתחלה.

    • סימון לקצוות הקשתות:

      • צד הכניסה לקודקוד מסומן ב-F-אם הצומת חדש, ז"א נכנסנו לצומת בפעם הראשונה דרך מעבר זה) או ב- E- אם הצומת כבר בוקרה קודם (מסמנים ב- E ומיד חוזרים עליה בחזרה).

      • ביציאה: קצה הקשת מסומן ב- E.


Tre maux
האלגוריתם של Tre`maux

1. v <- s(v הוא הקודקוד בו נמצאים כרגע).

2. אם אין אף מעבר לא מסומן ב- v(כלומר, כל המעברים מסומנים), לך ל- 4.

3. בחר מעבר לא מסומן, סמן אותו ב- E ועבור על הקשת לקצה האחר שלה u.

אם ל- u יש מעבר מסומן כלשהו (כלומר, הוא אינו קודקוד חדש) סמן את המעבר אליו הגעת זה עתה ל- u ב- E, עבור בחזרה ל- v וחזור לצעד 2.

אם ל- u אין מעבר מסומן (כלומר, u הוא קודקוד חדש), סמן את המעבר שדרכו נכנסת ל- u ב- F, v<-u וחזור לצעד 2.

4. אם אין מעבר מסומן ב- F, עצור (אנו בחזרה ב- s וסריקת הגרף הסתיימה).

5. השתמש במעבר שסומן ב- F, עבור על הקשת לקצה השני שלה u הנמצא בקצה השני של צלע זו, v<-u וחזור לצעד 2.


Tre maux1
האלגוריתם של Tre`maux

למה 1: באלגוריתם של Tre`maux אף צלע אינה נסרקת פעמים באותו כיוון.

מסקנה: האלגוריתם עוצר תמיד.

מסקנה: האלגוריתם עוצר תמיד בנקודת ההתחלה (כי לשאר הקודקודים יש מעבר שסומן ב- F).

למה 2: בסיום האלגוריתם של Tre`maux כל צלע נסרקת בדיוק פעם אחת בכל כיוון.


Hopcroft and tarjan tre maux
Hopcroft and Tarjan :ויאריציה על האלגוריתם של Tre`maux

כמו האלגוריתם של Tre`maux עם שינוי בסימונים.

השינויים:

  • כל קודקוד מקבל סימון מ- 1 עד |V|, עפ"י סדר הביקורים (s מקבל 1 וכו').

  • במקום לסמן מעברים מסמנים קשתות כ"משומשות", ובמקום הסימון F (עבור המעבר שדרכו נכנסנו לקודקוד בפעם הראשונה) זוכרים את הקודקוד שממנו הגענו אליו לראשונה.


Hopcroft and tarjan tre maux1
Hopcroft and Tarjan :ויאריציה על האלגוריתם של Tre`maux

1. סמן את כל הקשתות כ"חדשות". לכל קודקוד v  V: k(v) ← 0.

i ← 0, v ← s

2. i ← i+1, ik(v) ←

3. אם ל-v אין אף צלע חדשה הפוגעת בו, לך לצעד 5.

4. בחר בצלע חדשה כלשהי הנוגעת ב- v: e=(v, u).

סמן אותה כ"משומשת". אם k(u)≠0(ז"א בקרנו כבר ב- u) לך לצעד 3.

אחרת k(v)=0), v קודקוד שעדיין לא בקרנו בו)f(u)=v(סימון ה"אבא" של u), v ← u וחזור לצעד 2.

5. אם k(v)=1, עצור.

6. ← f(v)v ולך לצעד 3.


Depth first search3
סיבוכיות חיפוש לעומק Depth First Search

1. סמן את כל הקשתות כ"חדשות". לכל קודקוד v  V , k(v) ← 0. O(|E|)

i ← 0, v ← s

2. i ← i+1, k(v) ← IO(1)

צעדים 3 ו- 4: O(|E|)בכל האיטרציות

3. אם ל- v אין אף צלע חדשה הפוגעת בו, לך לצעד 5.

4. בחר בצלע חדשה כלשהי הנוגעת ב- v: e=(v, u). סמן אותה כ"משומשת". אם k(u)≠0 (ז"א בקרנו בו כבר) לך לצעד 3.

אחרת k(v)=0) קודקוד שעדיין לא בקרנו בו), f(u)=v (סימון "אבא" של u), v ← u וחזור לצעד 2.

5. אם k(v)=1, עצור. O(1)

6. v ← f(v) ולך לצעד 3. O(1) המעבר ל- 3 מתבצע O(|V|)

בגרף קשיר:O(|E|) + O(|V|) = O(|E|)


בניית עץ ה- DFS

תיאור סריקת קודקודי הגרף במהלך DFS.


Depth first search4
פתרון בעיות עם חיפוש לעומק Depth First Search

  • סדרת פיבונצ'י (סדר חישוב הערכים)

  • שמונה המלכות:

    • פתרו את הבעייה המופיעה ב- Eight Queens Java Applet

    • חקרו את הדגמת ה- Back Tracking המופיעה באתר:

      Recursion And Back Tracking An Example: The Eight Queens Problem

    • בנספח להרצאה מופיע חומר נוסף על בעיית שמונה המלכות

  • שימוש ב- DFS לפתרון מבוכים


Depth first search5
פתרון בעיות עם חיפוש לעומק Depth First Search

Resource: Base, S. and Van Gelder, A. (2000). Computer Algorithms, Addison-Wesley.


בעיית שמונה המלכות

את חוקיותם של כמה סידורים יש לבדוק?


את חוקיותם של כמה סידורים יש לבדוק?

קיימים 64 מקומות על לוח שח-מט.

מתוכם עלינו לבחור 8 מקומות ולכן מספר הסידורים האפשריים שאת חוקיותם עלינו לבדוק הוא:


את חוקיותם של כמה סידורים יש לבדוק?

ברור כי לא ניתן להציב שתי מלכות באותה עמודה.

תחת הנחה זו מספר האפשריות שיש לבדוק הוא:


את חוקיותם של כמה סידורים יש לבדוק?

בחישוב הקודם הנחנו כי לא ניתן להניח שתי מלכות באותה עמודה. להנחה זו נוסיף את העובדה שלאחר שהצבנו מלכה בשורה מסוימת, לא ניתן יהיה להציב מלכה נוספת באותה שורה.

תחת הנחה זו מספר האפשרויות שיש לבדוק הוא:


את חוקיותם של כמה סידורים יש לבדוק?

לאחר בדיקת כל האפשרויות מסתבר שקיימים 92 סידורים המהווים פתרון לבעיה.


אלגוריתם לבדוק?

  נעבור על עמודות לוח השח-מט אחת אחרי השניה ובכל אחת מהן ננסה לשים מלכה כך שלא תאיים על המלכות הקודמות שהוצבו כבר.

כלומר, יש לפתח אלגוריתם המציב מלכה בעמודה ה- n-ית, ולחזור על אלגוריתם זה עבור כל אחת מהעמודות.

כיצד נייצג את לוח השחמט?


כיצד נבדוק האם ניתן להציב מלכה במקום (i, j)?

נייצג את שורות לוח השח-מט ע"י מערך בגודל 8 של ערכים בוליאנים, שיאותחל בערכי true.

נייצג את האלכסונים ה"עולים" ע"י מערך בגודל 15 של ערכים בוליאנים, שיאותחל בערכי true.

נייצג את האלכסונים ה"יורדים" ע"י מערך בגודל 15 של ערכים בוליאנים, שיאותחל בערכי true.


כיצד נבדוק האם ניתן להציב מלכה במקום (i, j)?

בכל פעם שנציב מלכה במקום (i, j) נעדכן את:

מערך השורות במקום ה- iב- false;

מערך האלכסונים ה"עולים" במקום ה- i+jב- false;

מערך האלכסונים ה"יורדים" במקום ה- i-jב- false.


ad