Professional Documents
Culture Documents
ג2 הרצאה מקוונת לאוילר ולהמילטון
ג2 הרצאה מקוונת לאוילר ולהמילטון
1
מעגל אוילר הוא מעגל העובר פעם אחת בדיוק על כל קשת של הגרף.
מסלול אוילר הוא מסלול העובר פעם אחת בדיוק על כל קשת של הגרף.
2
מעגל אוילר בגרף לא מכוון
משפט
כל דרגותיו זוגיות גרף לא מכוון וקשיר מכיל מעגל אוילר
הוכחה
אם גרף לא מכוון וקשיר מכיל מעגל אוילר ,
אז בכל פעם שמבקרים בקדקוד עם זוג קשתות חדש ,
עם קשת אחת נכנסים אליו ועם השניה יוצאים ממנו ,וזה תורם 2לדרגתו .
לכן לכל קדקודי הגרף יש דרגה זוגית .
3
F
כל עוד לא עברנו על כל קשתות הגרף ,קיים על המעגל שאנו יוצרים כעת , טענת עזר 1
קדקוד שסמוכות אליו קשתות עליהן טרם עברנו .
בכל גרף לא מכוון שדרגותיו זוגיות ,ניתן לצייר אקראית מעגל . טענת עזר 2
הוכחה
נתחיל מקדקוד aכלשהו שדרגתו לא ריקה .יש כזה אחרת ציירנו כבר את כל המעגלים.
d(a)2ולכן יש לידו קשת ,נניח ( . )a,bנסיר אותה .
אם b = aציירנו מעגל וסיימנו .לכן נניח ש. b a -
a,bהקדקודים היחידים שדרגתם אי-זוגית ,ולכן יש ליד bקשת נוספת ,נניח (. )b,c
אם c = aציירנו מעגל וסיימנו .לכן נניח ש. c a -
אחרי הסרת ( , )b,cהקדקודים היחידים מדרגה אי-זוגית הם . a,c
לכן יש ליד cקשת נוספת .
וכך הלאה (תהליך רקורסיבי – הוכחה באינדוקציה) ניתן להמשיך .
4
. a והרי ניתן לעצור רק כאשר נגיע חזרה אל
. וציירנו מעגל אקראית
מבני נתונים קוד ויעילות:אוילר
Euler Circuit
EULER(graph G=(V,E) )
// Find an Euler circuit.
L {v} // vV any vertex ,{v} - an empty circuit
FIND-CIRCUIT(v0)
// Find a circuit starting at v 0. Return list of vertices.
L {v0} // initialize list
v v0
repeat
u a neighbour of v via an unused edge
mark (v,u) used
L Append(L,u)
vu
until v = v0
return L
5
)total complexity (E
משפט
כל דרגותיו זוגיות גרף לא מכוון וקשיר מכיל מסלול אוילר
פרט ל 2 -קדקודים שדרגותיהם אי-זוגיות
הוכחה
אם גרף לא מכוון וקשיר מכיל מסלול אוילר ,
אז בכל פעם שמבקרים בקדקוד עם זוג קשתות חדש ,
עם קשת אחת נכנסים אליו ועם השניה יוצאים ממנו ,וזה תורם 2לדרגתו .
מקדקוד התחלת המסלול יוצאים בהתחלה ולא חוזרים בסוף ,וזה תורם 1לדרגתו
.
אל קדקוד סיום המסלול נכנסים בסוף ולא יוצאים בהתחלה ,וזה תורם 1
לדרגתו .
לכן לכל קדקודי הגרף יש דרגה זוגית ,
פרט לקדקודי התחלת המסלול וסוף המסלול .
6
-אחרי הסרת הקשת החדשה ממעגל אוילר ,יתקבל מסלול אוילר של הגרף .
משפט
גרף מכוון ,שגרף התשתית שלו קשיר ,מכיל מעגל אוילר
לכל אחד מקדקודיו שווה דרגת הכניסה לדרגת היציאה
הוכחה
אם גרף מכוון וקשיר מכיל מעגל אוילר ,
אז בכל פעם שמבקרים בקדקוד עם זוג קשתות חדש ,
עם קשת אחת נכנסים אליו ועם השניה יוצאים ממנו ,וזה תורם 2לדרגתו .
לכן לכל קדקודי הגרף יש דרגה זוגית .
7
נמצא על המעגל קדקוד שסמוכות אליו קשתות עליהן טרם א.
עברנו
נצייר מעגל אקראי החל מקדקוד זה ,על קשתות שטרם עברנו ב.
ונספח אותו למעגל הקודם במקום קדקוד זה . ג.
כל עוד לא עברנו על כל קשתות הגרף ,קיים על המעגל שאנו יוצרים כעת , טענת עזר 1
קדקוד שסמוכות אליו קשתות עליהן טרם עברנו .
בכל גרף לא מכוון שדרגותיו זוגיות ,ניתן לצייר אקראית מעגל . טענת עזר 2
הוכחה
נתחיל מקדקוד aכלשהו שדרגתו לא ריקה .יש כזה אחרת ציירנו כבר את כל המעגלים.
d(a)2ולכן יש לידו קשת ,נניח ( . )a,bנסיר אותה .
אם b = aציירנו מעגל וסיימנו .לכן נניח ש. b a -
a,bהקדקודים היחידים שדרגתם אי-זוגית ,ולכן יש ליד bקשת נוספת ,נניח (. )b,c
אם c = aציירנו מעגל וסיימנו .לכן נניח ש. c a -
אחרי הסרת ( , )b,cהקדקודים היחידים מדרגה אי-זוגית הם . a,c
לכן יש ליד cקשת נוספת .
וכך הלאה (תהליך רקורסיבי – הוכחה באינדוקציה) ניתן להמשיך .
והרי ניתן לעצור רק כאשר נגיע חזרה אל . a
וציירנו מעגל אקראית .
8
מבני נתונים קוד ויעילות:אוילר
Euler Circuit
EULER(graph G=(V,E) )
// Find an Euler circuit.
L {v} // vV any vertex ,{v} - an empty circuit
FIND-CIRCUIT(v0)
// Find a circuit starting at v 0. Return list of vertices.
L {v0} // initialize list
v v0
repeat
u a neighbour of v via an unused edge
mark (v,u) used
L Append(L,u)
9
vu
until v = v0
return L
)total complexity (E
משפט
גרף מכוון ,שגרף התשתית שלו קשיר ,מכיל מסלול אוילר
לכל אחד מקדקודיו שווה דרגת הכניסה לדרגת היציאה
פרט לשני קדקודים s,tהמקיימים :
dout(s) = din(s) + 1 din(t) = dout(t) + 1
10
הוכחה
אם גרף לא מכוון וקשיר מכיל מסלול אוילר ,
אז בכל פעם שמבקרים בקדקוד עם זוג קשתות חדש ,
עם קשת אחת נכנסים אליו ועם השניה יוצאים ממנו ,וזה תורם 2לדרגתו .
מקדקוד התחלת המסלול יוצאים בהתחלה ולא חוזרים בסוף ,וזה תורם 1לדרגתו
.
אל קדקוד סיום המסלול נכנסים בסוף ולא יוצאים בהתחלה ,וזה תורם 1
לדרגתו .
לכן לכל קדקודי הגרף יש דרגה זוגית ,
פרט לקדקודי התחלת המסלול וסוף המסלול .
משפט
אם בגרף לא מכוון וקשיר יש בדיוק 2kקודקודים מדרגה אי-זוגית, k³1 ,
אז ניתן לחלק את קבוצת קשתותיו ל k -מסלולים זרים (בקשתות) .
האם ניתן להחליף את תנאי הקשירות לתנאי חלש יותר?
11
הוכחה
נוסיף לגרף kקשתות -קשת בין כל זוג קודקודים אי-זוגיים . -
הגרף החדש מכיל מעגל אוילר ,כי כל דרגותיו זוגיות ,ומכיוון ש k -הקשתות החדשות זרות, -
הסרתן ממעגל אוילר משאירה kמסלולים זרים בקשתות ,המכסות את קשתות הגרף .
ניתן להמיר את הדרישה לגרף קשיר ,ולדרוש שכל רכיב קשירות יכיל קדקודים אי-זוגיים.
הפתרון במקרה זה יתבסס על הפעלה רקורסיבית של הפתרון הקודם על כל רכיב קשירות בנפרד.
גרפי המילטון
מעגל המילטון הוא מעגל העובר פעם אחת בדיוק דרך כל קדקוד של הגרף.
מסלול המילטון הוא מסלול העובר פעם אחת בדיוק דרך כל קדקוד של הגרף.
️☹
12
מציאת מסלול \ מעגל המילטון בגרפים נחשבת לבעיה "קשה" עבור
המחשב .
אם כי
לקבוצות חלקיות מסוימות של גרפים
ניתן למצוא אלגוריתמים פולינומיאליים
דוגמאות
טענה
יש לו מיון טופולוגי גרף מכוון חסר מעגלים מכיל מסלול המילטון
יחיד
טענה
גרף שבו כל שני קדקודים קשורים ע"י קשת מכוונת אחת בדיוק ,
מכיל תמיד מסלול המילטון .
הוכחה
הוכחה באינדוקציה על . n
נסיר מהגרף קדקוד על קשתותיו .יישאר גרף קשיר לחלוטין בן n-1קדקודים .
13
ונובע באינדוקציה שהוא מכיל מסלול המילטון ,שנסמנו . v1,v2,....,vn-1
, vn-1vnסיימנו . או אם vnv1
v1v2....vi-1vi....vn-1 אחרת יהא viהראשון ש vn -מכוון אליו:
vn
אז בגרף זה v1,v2,....,vi-1,vn,vi,....,vn-1הוא מסלול המילטון.
אלגוריתם יעיל יוסיף רקורסיבית קדקוד למסלול ההמילטון שהתקבל בשלב הקודם ,כמו שהוסבר עתה,
עד לקבלת מסלול המילטון על כל קודקודי הגרף.
אלגוריתם יעיל יחקה רקורסיבית את האינדוקציה ויוסיף קדקוד אחר קדקוד למסלול שנוצר בין
הקדקודים הקודמים.
הדרך היעילה ביותר להוסיף קדקוד למסלול היא באמצעות חפוש בינארי :אם מתקיים v1vnvn-1
אז נבדוק אם להמשיך בחפוש בחצי המסלול הימני או בחצי המסלול השמאלי ,על ידי בדיקת כוון הקשת
בין vnלקודקוד האמצע במסלול.
אבל להוסיף אח"כ את הקדקוד למקומו במערך.O(V2) :
סבוכיות האלגוריתם על כן. O(V2 + VlogV) = O(V2) :
(הערה :אם מממשים על ידי רשימה מקושרת ,אז זמן חיפוש איבר הוא ) O(Vוזמן צירופו למקומו
)O(1
ולכן סה"כ ) O(V2כמו במערך ) .
14