Académique Documents
Professionnel Documents
Culture Documents
תרגול 1
2.3.04
סיבוכיות
O
) f (n ))(g (n
) f (n (g (n))
) f (n ))(g (n
gol
n(gol n 2 n )(gol
2 n 2 )
gol n 2 1 gol
2 n1
(gol
(n 2 n )gol )n
gol
(אין השפעה לבסיס) 2
(n gol 3 )n
n
) o (n
gol n
תכנון דינמי
תרגיל
1 לאורך נהר יש nתחנות .בכל תחנה
i,...,ניתן לשכור סירה ואפשר להחזירה בכל תחנה n
. j i,...,
1 n
אי אפשר לשוט נגד הזרם.
Anxnכך שהאיבר jiמייצג את מחיר השכרת סירה בתחנה i
a מחירי ההשכרות נתונים במטריצה
והחזרתה ב . j
אין תשלום נוסף על החלפות.
מצא את סדרת ההחלפות שתאפשר שייט במחיר מינימלי מתחנה 1לתחנה n.
תתי הבעיות הכלליות – כיצד מגיעים בצורה האופטימלית לתחנה .i -
תתי בעיות בסיסיות – הבעיות שמתחילים מהן. -
סדר הפתרון. -
פתרון תת בעיה כללית. -
פתרון השאלה כולה. -
אלגוריתם
M .iנסמן אותו ב ]. [i i
נחפש לכל תחנה את המחיר המינימלי הדרוש להגיע מתחנה 1עד
נתחיל מתחנה .1נסמן M [1 ] 0
ונמשיך לפי סדר התחנות.
פתרון תת בעיה מסדר iיהיה:
M [ i]nim [ j] a ij
M
1 j i1
Mלאחר פתרון כל תתי הבעיות ,פתרון השאלה יהיה ] . [n
סיבוכיות:
nתתי בעיות .כל בעיה נפתרת בסיבוכיות לכל היותר של ) O. (nלכן סה"כ סיבוכיות ) O. (n 2 יש
הוכחה:
הוכחה באינדוקציה על סדר הפתרון.
בדיקה – המסלול האופטימלי מתחנה 1לעצמה יהיה במחיר ( 0נשארים במקום). .i
k. הוא המחיר המינימלי להגיע מתחנה 1לתחנה M [k ] הנחה – לכל 1, k i 1 .ii
M: [TPOi] נוכיח ש ][ i .iii
סדרת ההחלפות שנותנת מחיר מינימלי מתחנה 1לתחנה .i TPO - נסמן ][i
TPOאת הסירה האחרונה לפני .i לקח נסמן - jהתחנה שבה ][i
j TPO
עד תחנה . [i ] המסלול שלTPO - ]j[i נסמן
TPO i]
[TPO j[ i] a ij M [ j] a ij nim
M] [r ] a ir M [ i
1 r i1
מיון טופולוגי -בהנתן ,DAGמיון טופולוגי הוא סדר על הקודקודים ,כך שאם יש קשת מקודקוד i
לקודקוד i , jיופיע לפני jבמיון.
יש כמה אפשרויות סידור שיהיו מיון טופולוגי .אם הגרף הוא מלא ,אין אפשרות כזו.
v u
y x
v,u,x,y
u,v,x,y
תרגול 2
9.3.04
תרגיל
נתון עץ .Tמצא כמה קבוצות בלתי תלויות של קודקודים יש ב .T
קבוצה בלתי תלויה של קודקודים היא קבוצה של קודקודים כך שלאף אחד מהקודקודים בקבוצה אין
קשר לאחרים.
[]toor
N. פתרון הבעיה כולה הוא
v ]N [ 3 v ]N [ v2
[ ]N 1 [ v ]N 0
[ [ 4 v]N [ 3 v ]N
v ]N [ 6v ]N [ 5v ]N 1
סיבוכיות:
כל קודקוד נכנס לחישוב 3פעמים :בחישוב שלו ,בחישוב של אבא שלו ובחישוב של סבא שלו .לכן
( n O). הסיבוכיות היא
הוכחת נכונות:
נעשה זאת באמצעות אינדוקציה על סדר הפתרון.
בסיס האינדוקציה:
מס' הקבוצות הבלתי תלויות בתת עץ של עלה הוא :2העלה עצמו והקבוצה הריקה.
הנחה:
[ u N]. uמס'Tהקבוצות הבלתי תלויות ב T uהוא v לכל קודקוד
הוכחה:
מס' הקבוצות הבלתי תלויות ב T vהוא מס' הקבוצות הבלתי תלויות ב T vשכוללות את vועוד מספר
הקבוצות שלא כוללות את v.
מס' הקבוצות שלא כוללות את vשווה למספר האפשרויות לאחד קבוצות בלתי תלויות מתתי העצים של
הבנים ולכן שווה למכפלה הקרטזית של מס' הקבוצות בכל בן .לפי הנחת האינדוקציה מס' הקבוצות בכל
. uNלכן מס' הקבוצות מסוג זה הוא ] [
[ u N]. uשהוא בן של vהוא
v fonos u
שאלה
נתונות 3מחרוזות.
Xבאורך .n
Yבאורך .m
Zבאורך .n+m
תאר אלגוריתם הקובע האם Zהוא מיזוג של Xו .Y
דוגמא למיזוג:
x ,...,
x2 x 1 , n
y ,...,
y2 y 1 , n
X. j Yו i jz iהיא מיזוג של בתאj in,
נרשום ' '1אם 1
1 .m נבנה מטריצה בגודל
m
תרגול 3
16.3.04
הוכח או הפרך
u v v u v u
אם יש מסלול מכוון מ ל בגרף מכוון Gוב DFSמתגלה לפני ,אזי צאצא של בעץ
הסריקה.
דוגמא נגדית:
s
u v
2 V, 1 ,כךVשכל הקשתות הן בין גרף נקרא דו צדדי אם אפשר לחלק את הקודקודים שלו לשתי קבוצות
הקבוצות.
תרגיל
אלגוריתם הקובע האם הוא דו צדדי ואם כן מוצא חלוקה )
Gתאר E V ( , בהינתן גרף לא מכוון
מתאימה של הקודקודים.
אלגוריתם:
נבצע סריקת BFSעל הגרף .אם נגלה קשת חוצה בתוך אותה רמה ,אז הגרף הוא לא דו צדדי .אחרת
הגרף הוא דו צדדי והחלוקה המתאימה תתקבל לפי הזוגיות של הרמות (קודקודים ברמה זוגית יהיו
בקבוצה הראשונה וקודקודים ברמה אי זוגית יהיו בקבוצה השניה).
הוכחה:
כיוון :1
אינדוקציה:
נניח שהגרף דו צדדי.
הקודקודים ברמה iהם שכנים של הקודקודים ברמה .i 1לפי הנחת האינדוקציה כל הקודקודים ב
i 1הם באותה קבוצה .נניח בלי הגבלת הכלליות לגבי V. 1לכן כל הקודקודים ברמה iחייבים להיות ב
V 2ולכן לא יכולה להיות קשת בין שני קודקודים ברמה .i
כיוון :2
נניח שאין קשתות חוצות באותה רמה ב .BFS
נבצע חלוקה של הקודקודים לפי הזוגיות של הרמות.
לא תתכן קשת בין קודקוד אי זוגי לאי זוגי משום שאין קשתות באותה רמה (לפי ההנחה) ואין קשתות בין
רמות לא סמוכות (לפי תכונות הסריקה).
באופן סימטרי אין קשת בין קודקוד זוגי לזוגי ולכן הגרף דו צדדי.
תרגיל
x ,...,
x2 .x 1 , x iעל n x jמשתנים n נתונה מערכת של mאי שוויונים מהצורה
השמה מספקת היא קביעת ערך למשתנים כך שכל אי השוויונים מתקיימים.
תאר אלגוריתם הבודק אם יש השמה מספקת ואם כן מוצא כזאת.
אלגוריתם:
נבנה xקשת מכוונת
j x i נבנה גרף מכוון כך שהקודקודים יהיו המשתנים ועבור כל אי שוויון
x j .x i
הוכחה:
כיוון ראשון:
v1 v v 2 v
.1 ... i נניח שיש מעגל בגרף .נסמן אותו ב
וגםv v. i 1v2
איןvשני מספרים שיכולים לקיים את התנאים על v 1 ... לכן לפי בניית הגרף i
v v1 , i
ולכן אין השמה מספקת.
כיוון שני:
נניח שאין בגרף מעגלים .כלומר הגרף הוא .DAGלכן ניתן למיין אותו טופולוגית .ניתן ערכים למשתנים
לפי המיקום שלהם במיון הטופולוגי.
.xלכן x ix jיופיע לפני x jבמיון ולכן יקבל ערך קטן
i x iאי x j
שוויון מהנתון .אזי יש קשת יהי
מ .x j
סיבוכיות:
n )m O. ( בניית הגרף:
n )m O. ( בדיקת מעגלים:
n )m O. ( מיון טופולוגי:
n )m O. ( סה"כ:
תרגול 4
23.3.04
תרגיל
עוצמה של קודקוד: V w. :
נגדיר R יהיה Gגרף מכוון עם משקלים על הקודקודים
vw ) (
) ( {xam u P {יש מסלול מכוון מ uל |v
V v
אלגוריתם:
נניח שהגרף הוא .DAGנמיין את הגרף טופולוגית ונמצא לכל קודקוד את העוצמה שלו.
נתחיל מהקודקוד האחרון במיון ,כאשר העוצמה שלו תהיה שווה למשקל שלו .נמשיך מהסוף להתחלה.
E v u) e, (
v |P
) ( u ,)w ( xam u P). ( עבור קודקוד uנקבע :
סיבוכיות:
E ) V O. ( מיון טופולוגי:
E ) V O. ( מספר הבדיקות בתכנון הדינמי יהיה כמספר הקשתות .לכן סיבוכיות התכנון הדינמי תהיה
E ) V O. ( סה"כ:
הנחה:
(
z |P
( ) ( v ,)w ). (
xam v P לכל קודקוד vשאחרי uבמיון ,העוצמה של vהיא
הוכחה:
שקיים uשכן של vוקיים
v /או v v
אם v /הוא הקודקוד הכבד ביותר שניתן להגיע אליו מ ,אז
v )w ( v P ). ( /
מסלול מ uל v. /לכן
שתי vאפשרויות:
יש )w
אז (vP ), ( /
אם נניח בשלילה ש
( v w). (
סתירהv )w. /
א.
הנחת האינדוקציה קיים מסלול מ uלקודקוד z
לפיv )w
ואז (
uP) ( /
ב .קיים u,שכן של v,כך ש
מסלול גם מ vל .zסתירה.
קייםv )w
ואז () (
z w /
כך ש
לדוגמא:
הוכחה:
מסלול מ vל u. u v,
וקיים G
G,חלק מהקשתות בו יתכווצו ונקבל מסלול מהקודקוד המתאים ל v /
לכן אם ניקח את אותו מסלול ב
לקודקוד המתאים ל uב G. /
קודקודים ב Gכך ש v /מתאים ל u / v,מתאים אם יש מסלול מקודקוד v /לקודקוד u /ב u v , G, /
ל u.כל קודקוד במסלול ב G /ניתן לפתיחה למסלול ב ,Gכיוון שהקודקוד מייצג רכיב קשיר היטב.
לכן נקבל מסלול ב .G
תרגיל
יהי Gגרף לא מכוון ו sקודקוד ב .Gמצא את המעגל הפשוט הקצר ביותר המכיל את .s
פתרון:
נזכור עבור כל קודקוד באיזה תת עץ הוא ובאיזו רמה הוא נמצא .נעבור על כל הקשתות בגרף .אם יש
קשת חוצה הסוגרת מעגל בין שני תתי עצים שונים ,אז היא שייכת למעגל.
s
הערה :המעגלים שנמצא לא יהיו כל המעגלים המכילים את ,sאך המעגל המינימלי יהיה אחד מאלה.
זאת משום שיכול להיות מעגל שיש בו כמה קשתות חוצות .מעגל מסוג זה לא יהיה לעולם מינימלי.
תרגול 5
30.3.04
s
המעגל המינימלי הוא הסכום הקטן ביותר של שתי הרמות של תתי העצים ושל הקשת החוצה.
אלגוריתם:
נריץ BFSמ sונזכור לכל קודקוד את הרמה שלו בסריקה ואת הקודקוד השני במסלול מ sאליו בסריקה
(השורש של תת עץ שהוא בן של .)sנעבור על כל הקשתות החוצות המחברות קודקודים מתתי עצים
שונים .לכל קשת כזו גודל המעגל שהיא סוגרת יהיה סכום הרמות של הקודקודים שלה ועוד אחד .נמצא
את הקשת הנותנת סכום מינימלי.
הוכחה:
( v),u ,e,
ממסלול מ sל uוממסלול מ sל .vבגלל ש v,uנמצאים המעגל שקיבלנו מורכב מהקשת
בתתי עצים שונים של בנים של ,sהמסלולים הנ"ל זרים ולכן המעגל פשוט ומכיל את .s
ניקח מעגל פשוט כלשהו המכיל את .sהמעגל מכיל לפחות קשת אחת חוצה בין שני תתי עצים שונים.
( v )u ,e. נסמן קשת זו כ
( v )u ,e.
מכיוון ש BFSמוצא המעגל מורכב ממסלול מ sל ,uמסלול מ sל ( vהמסלולים זרים) והקשת
( v )u ,e את המסלולים הקצרים ביותר ,המעגל המתקבל מהמסלולים בעץ מ sל uומ sל vעם הקשת
הוא באורך קטן או שווה למעגל שבחרנו והוא פשוט ומכיל את .s
לכן המעגל המינימלי הפשוט המכיל את sמכיל בדיוק קשת אחת חוצה.
סיבוכיות:
E ) V O. ( :BFS
E O
( ). (O)1פעולות. בדיקה :מעבר על כל הקשתות ,כל קשת ב
E ) V O. ( סה"כ:
A B
אלגוריתם:
b
ונבדוק האם קיימים מסלולים מ aל bומ bל ( aלמשל ע"יa , B
לקודקודיםA , נכווץ את הקבוצות
.)BFSאם קיימים שני המסלולים ,אז אין חלוקה כזו .אחרת יש חלוקה.
הוכחה:
נניח שיש שני מסלולים :מסלול מ aל bומסלול מ bל .aכל חלוקה המפרידה בין aל bחותכת את שני
המסלולים ולכן מכילה קשתות בכיוונים מנוגדים .לכן אין חלוקה.
a b
נניח שאין את שני המסלולים ונניח בלי הגבלת הכלליות שאין מסלול מ Bל .A
נסמן ב V 2את כל הקודקודים הניתנים להגעה מ .Bמכיוון שאין מסלול מ Bל ,Aאז 2לא כולל
V
V B V 2 A. 1 קודקודים מ A
V u
מסלול מ Bל uולכן יש מסלול מ Bל .vסתירה. אזיVיש
2 v, 1 כך )ש
,v (u נניח שיש קשת
סיבוכיות:
E ) V O. ( שתי סריקות :BFS
אלגוריתם המוצא קבוצת קודקודים Uבעלת גודל קטן ביותר ,כך ).
GתארE V ( , נתון גרף מכוון
U u
עבורו יש מסלול מכוון מ uל .v U V)
קייםv ( שלכל
אלגוריתם:
אם הגרף הוא ,DAGנבחר את הקבוצה Uע"י בחירת כל הקודקודים בעלי דרגת כניסה ( 0קודקודים
שאין אליהם אף קשת) .אחרת נכווץ רכיבים קשירים היטב עבור כל קודקוד בעל דרגת כניסה 0בגרף
המכווץ .אם הוא קודקוד יחיד בגרף המקורי ,נוסיף אותו ל .Uאם הוא מייצג רכיב קשירות ,נבחר קודקוד
אחד באופן שרירותי מהרכיב.
תרגול 6
13.4.04
הוכחה:
עבור גרף חסר מעגלים ,אם uקודקוד בעל דרגת כניסה u ,0חייב להיות בקבוצה (uכי אין מסלול
מקודקוד אחר אליו) .לכן כל הקודקודים בעלי דרגת כניסה 0חייבים להיות בקבוצה.
u ) u, e. ( 1 אם uקודקוד עם דרגת כניסה גדולה מ ,0קיים קודקוד u 1כך שקיימת קשת
אם u 1בעל דרגת כניסה ,0סיימנו .אחרת קיים u 2וכך הלאה .התהליך יעצר רק כשנגיע לקודקוד עם
דרגת כניסה ,0מכיוון שהגרף חסר מעגלים.
אם הגרף מכיל מעגליםu ,קודקוד בעל דרגה 0בגרף החדש ו u /קודקוד ברכיב ש uמייצג.
מכל מסלול מ uלקודקוד אחר vבגרף החדש אפשר לבנות מסלול מ u /ל vבגרף המקורי .לכן
הקבוצה שבחרנו חוקית.
תהי U /קבוצה חוקית .לרכיב uבגרף החדש יש דרגת כניסה .0לכן עבור קודקוד בתוך הרכיב אפשר
להגיע אליו רק מהקודקודים האחרים ברכיב .משום כך U /מכילה לפחות קודקוד אחד מהרכיב בעל
דרגה 0ולכן הקבוצה שבחרנו מינימלית.
מסלולים קלים ביותר
t .s , משקלים אי שליליים על הקשתות ונתונים קודקודים )
Gעם E V ( , נתון גרף
אנו מחפשים את המשקל הקל ביותר (סכום הקשתות במסלול) מ sל t.
האלגוריתם של דייקסטרה
נגדיר 3סוגים של קודקודים:
.1קודקודים שמצאנו עבורם את המרחק הקצר ביותר מ ( sקודקודים פתורים).
.2קודקודים שמצאנו להם מרחק זמני מ ( sמועמדים).
.3קודקודים שעדיין לא מצאנו עבורם את המסלול מ .s
1
8 9
10
s
0 2 3 9
4 6
5
7
5 7
2
סיבוכיות:
על מבנה הנתונים לבצע את הפעולות הבאות:
הוצאת מינימום. -
-עדכון.
הכנסה. -
)V gol
( E O. בשימוש בערימה הסיבוכיות הכללית היא
האלגוריתם של דייקסטרה לא יעבוד אם ישנן קשתות שליליות .אם ישנו מספר קבוע של קשתות
שליליות ,אנו יכולים למצוא אלגוריתם אחר שיפתור את הבעיה באותה סיבוכיות.
תרגיל:
v )u
בעלת ,e ( E V
גרף מכוון עם משקלים אי שליליים על הקשתות ,פרט לקשת אחת G
)
, ( יהי
משקל שלילי ונתון קודקוד .sמצא את המרחק מ sליתר הקודקודים בגרף .נניח שאין מעגלים בעלי
משקל שלילי.
5-
2
s
0
1
1
אלגוריתם:
נוריד את הקשת eונמצא את המרחק מ sלכל הקודקודים במסלולים שלא משתמשים ב eע"י
דייקסטרה מ .sנסמן ב d /את המרחקים.
נמצא את המרחק מ vלכל יתר הקודקודים ע"י דייקסטרה מ v.
v (( e w ) ( u )d s(x ,)d s /
nimx d.) s ( / /
לכל קודקוד xנחשב את המרחק:
תרגול 7
20.4.04
סיבוכיות:
)V gol
( E O
הוכחה:
ברור שהמסלול שמצאנו הוא מסלול חוקי .אפשר להניח שהמסלול הקל ביותר מ sלקודקוד כלשהו x
הוא פשוט.
יהי Pהמסלול הקל ביותר מ sל (xאנו מניחים כי Pהוא מסלול פשוט – הוא לא יכול להיות מעגל
משום שמשקלו הוא אי שלילי).
אם Pלא עובר דרך e,אז Pקיים גם בגרף ללא הקשת השלילית ולכן p )w ( s
מכיוון d
שדייקסטרה
( )d (v x ,)d ( nimxs )d ( sp )w. s /
מוצא את המסלול המינימלי .לכן
ePמסלולPמ sל (uמסלול פשוט לא 2P
ש 1 P, כך 1 אם Pעובר דרך הקשת השלילית ,אז
דרך .)e
P 2מסלול פשוט לא דרך eמ vל .x
מנכונות דייקסטרה נקבל:
u )d ( P )w ( 1 s
(x ) d ( P )w 2 /
v
אם ישנו מספר קבוע של קשתות שליליות ,אנו יכולים להפעיל אלגוריתם הדומה לאלגוריתם הזה .אם אין
לנו מספר קבוע של קשתות שליליות ,לא נוכל להשתמש בו.
יהי Gגרף מכוון עם משקלים אי שליליים על הקשתות s .קודקוד ב .Gכל קשת ב Gצבועה בצבע
כחול או אדום .מסלול מתחלף בגרף הוא מסלול שאין בו שתי קשתות רצופות באותו צבע.
מצא את המסלול המתחלף הקל ביותר מ sל .t
5
1 2 11
s 1 3/6
4 2
4
ניתן לכל צומת שני ערכים :משקל אדום ומשקל כחול ,לפי צבע הקשת האחרונה שהגיעה אליו .נריץ
דייקסטרה .לאחר מכן נבחר עבור כל קודקוד את המינימלי מבין שני הערכים.
אלגוריתם:
המסלול המתחלףv R :)v B , לכל קודקוד נחפש שני ערכים (מתייחסים לקודקוד vכאל שני קודקודים
הקל ביותר מ sאליו המסתיים בקשת אדומה והמסלול המסתיים בקשת כחולה.
האתחול יהיה הכנסת sאדום ו sכחול למועמדים עם משקל זמני .0
בשלב האיטרציה מוציאים את המועמד המינימלי ללא חשיבות לצבע ,הופכים את הערך שלו לסופי בצבע
המתאים ומסתכלים רק על השכנים שלו בצבע הנגדי.
בסיום האלגוריתם בוחרים את המינימלי מבין tR .tB ,
סיבוכיות:
מריצים דייקסטרה על 2nקודקודים .בכל שלב נוספת בדיקה אחת (צבע של קשת).
V ) gol
( E O. לכן הסיבוכיות היא
בסיס:
s
המסלול המתחלף הקל ביותר מ לעצמו הוא במשקל .0
הנחת האינדוקציה:
B )x ,
נפתרוRנכון (הערך שלהם הוא ערך המסלול המתחלף הקל כל הקודקודים שנפתרו לפני (v x
u M ( M )Rאו .) )B ( u ביותר המסתיים בצבע המתאים -
הוכחה:
נוכיח עבור v. R
המסלול)המתחלף הקל ביותר מ sל vהמסתיים בקשת אדומה. ( TPO, R v יהי
) ( TPO. R v נסמןu :הקודקוד האחרון במסלול לפני vבמסלול
( ) , eu ) R (
| ) v(R uTPO vTPO. R v לכן
לפי הנחת האינדוקציה:
שווהv,אך מספיקה המסקנה הזאת)הוא) | u u M ]B [
(בעצם ( R
TPO
( nimB x )M
x ew ] [R e)w( BTPO
u M R v
E v)x , (e x | R
תרגול 8
4.5.04
נתון גרף מכוון עם קיבולים אי שליליים על הקשתות .קיבולת של מסלול מוגדרת כקיבולת הקשת
המינימלית במסלול .בהנתן קודקוד sמצא עבור כל קודקוד vאת הקיבולת המקסימלית של מסלול מ s
ל v.
6
s 5
3
7
2
4
9 t
1
8
אלגוריתם:
האלגוריתם יפעל בדומה לדייקסטרה ,פרט לשינויים הבאים:
אתחול – נאתחל את כל הקודקודים בקיבול זמני 0ונכניס את sלמועמדים עם קיבול זמני .
שלב – נוציא את המועמד בעל הקיבול הזמני הגדול ביותר (נחזיק ערימת מקסימום) ,נהפוך אותו לפתור
u,)c ( nimv,)c ( xam v )c ( ונעדכן את השכנים שלו .אם uמעדכן את v,אז
( ( ( u )d ( v ,)d
v ))u e, w nim v .))d ( (בדייקסטרה אם uמעדכן את v,אז
( v))u ,e (w( u,)c nim xam v )c (
E | v )u ,e (u
סיבוכיות:
השינוי מדייקסטרה הוא ערימת מקסימום במקום מינימום וחישוב שונה בכל עדכון .לכן הסיבוכיות היא
V ) gol
( E O.
הוכחה באינדוקציה:
בסיס:
. s
המסלול הריק מ לעצמו הוא בקיבול
הנחה:
הוא הקיבולת המקסימלית של מסלול מ sל u.
( u )c עבור כל קודקוד uשנפתר לפני v,
הוכחה:
המסלול בעל הקיבולת המקסימלית מ sל v.נסמן ב uאת הקודקוד האחרון לפני v
TPO, נסמן v
אלגוריתם:
( u d.) s נריץ דייקסטרה מ sונקבל לכל קודקוד uאת המרחק מ sל u.נסמן
נהפוך את הגרף ונריץ דייקסטרה מ tבגרף ההפוך .נקבל לכל קודקוד uאת המרחק הקל ביותר מ tל
(u d.) t uבגרף ההפוך .נסמן
( v )u ,e
המקיימת את השוויון נעבור על כל הקשתות בגרף .קשת
מיותרות.השארt d ))t ( vu
מיותרתd).כל ) t ( v d) s ( היא( ( u
קשתe ,w
לא
סיבוכיות:
)V gol
( E O. פעמיים דייקסטרה
( E )O. הפיכת הגרף
( E )O. חישוב קבוע לכל קשת
)V gol
( E O. סה"כ:
הוכחה:
( d) sהוא uהמרחק הקל ביותר מ sל u. מנכונות דייקסטרה נובע כי
הוא המרחק הקל ביותר מ tל vבגרף ההפוך ולכן הוא גם המרחק הקל ביותר בגרף המקורי מ (v d) t
vל .t
t d) s ( v d) t ( e w ) ( u d.) s ( ( v )u ,e
מיותרת אם ורק אם נוכיח ש
כיוון ראשון:
בשרשור עם e
( u d) s t d) ( v
המסלול המתאים ל
s d) ( e
w ) ( u d)
. sלכן אם נבנה tאת ( נניח ש
נקבל מסלול מ sל tהעובר דרך eומשקלו מינימלי .לכן e (v d,) t ובשרשור עם המסלול המתאים ל
לא מיותרת.
כיוון שני:
t )d ( P )w. ( s נניח ש eלא מיותרת .לכן קיים מסלול Pמ sל tהעובר דרך eומקיים
P, 1 כך2 eשP 1 Pהוא מסלול מ sל uו P 2הוא מסלול מ vל .t Pבנוי בצורה
P )w ( 1 s
ובכיוון ( u )d
ההפוך לגבי משום ש P 1הוא תת מסלול של מסלול קל ביותר מ sל ,tנקבל
( Pw) ( P
w) ( t d. ) s( 2 1 P )w. ( 2 t
לכן ( v )d P 2נקבל
תרגול 9
11.5.04
תרגיל
s
נתון גרף לא מכוון Gעם משקלים אי שליליים על הקשתות .קודקוד ב .Gמצא את המעגל הקל ביותר
המכיל את .s
אלגוריתם:
נריץ דייקסטרה .נבנה עץ מהקשתות בין הצמתים לאבות שבונה דייקסטרה .בדומה לאלגוריתם הדומה בו
השתמשנו ב ,BFSהקשת החוצה שביחד עם ערכי שני צמתים בעלי מסלול כלשהו ל ,sנותנת מסלול
מינימלי ,היא זו שבונה את המעגל הקל ביותר.
הוכח או הפרך
s s
בכל גרף לא מכוון Gקיים קודקוד כך שעץ המסלולים הקלים ביותר מ הוא עץ פורש מינימלי.
דוגמא נגדית:
2
3
2 2
3
2
2
דייקסטרה
2
3
2
2
)
GגרףE V . ( , יהי
V 2 V. 1 , חתך בגרף הוא חלוקה של הקודקודים לשתי קבוצות:
V V 2 V 1 V 2 V 1
V. 2 קשת בחתך היא קשת שקודקוד אחד שלה נמצא ב V 1וקודקוד שני נמצא ב
הוכחה:
אם eקשת רעה ,אז קיים מעגל ש היא המקסימלית בו .לכן כל חתך המכיל את חותך את המעגל
e e
לפחות בעוד מקום אחד .לכן eלא מינימלית בחתך.
הוכח:
באותם תנאים כל קשת היא טובה או רעה.
הוכחה:
הסבר :ניקח עץ פורש מינימלי .עבור כל קשת בעץ ניתן להגדיר חתך .קשת זו תהיה בהכרח טובה .כל
קשת אחרת בחתך סוגרת מעגל בו נמצאת הקשת הטובה .הקשת הסוגרת את המעגל היא הגדלה ביותר
בעץ ולכן היא קשת רעה.
Gעם E V
משקלים אי שליליים על הקשתות .נתון שכל המשקלים שונים. ) ( , נתון גרף לא מכוון
קבעvהאם היא טובה או רעה.
( )u ,e בהנתן קשת מסויימת
אלגוריתם:
u e e
נמחק את ואת כל הקשתות שמשקלן גדול מ מהגרף .נריץ BFSמ ונבדוק האם בגרף החדש יש
מסלול ל e v.היא קשת רעה אם ורק אם יש מסלול מ uל vבגרף החדש.
הוכחה:
נניח שיש מסלול בגרף החדש מ uל v.המסלול הנ"ל סוגר מעגל עם e.
eהיא מקסימלית במעגל כיוון שכל שאר הקשתות קיימות בגרף החדש ולכן קטנות מ e.לכן eקשת
רעה.
נניח ש eקשת רעה .לכן קיים מעגל שהיא מקסימלית בו .אם נמחק את eמהמעגל ,נקבל מסלול מ uל
vשכל הקשתות בו קטנות מ eולכן המסלול קיים גם בגרף החדש.
סיבוכיות:
( E )O. בניית הגרף החדש
E ) V O. ( BFS
E ) V O. ( סה"כ:
משקלים אי שליליים ונתון Tעץ פורש מינימלי של .Gמוסיפים לגרף קשת )
Gעם E V ( , נתון גרף
e
חדשה .מצא את העץ הפורש המינימלי של הגרף החדש.
אלגוריתם:
נוסיף את eלעץ הפורש המינימלי ונזרוק את הקשת המקסימלית במעגל שנוצר.
הוכחה:
נניח שכל המשקלים שונים .הקשתות בגרף המקורי ,פרט לקשתות Tהיו רעות ,כלומר היה מעגל כך שהן
מקסימליות בו .המעגלים הנ"ל לא משתנים עם הוספת קשת חדשה .לכן הקשתות נשארות רעות.
הקשת המקסימלית במעגל שנסגר היא קשת רעה .לכן זרקנו את כל הקשתות פרט ל n 1קשתות
ומשום כך קיבלנו עץ פורש מינימלי.
תרגול 10
18.5.04
שלבי האלגוריתם:
הנחה :אין מעגל המכיל משתנה ושלילתו. -
נכווץ רכיבי קשירות ונעשה מיון טופולוגי. -
x iמופיע אחרי .x i 1 ,)x i אם x iמופיע לפני x iבמיון הטופולוגי .x i 0 ,אחרת (אם -
שאלה
דוגמא נגדית:
20 20
30
האלגוריתם יתן לנו עץ עם משקל ( 49ימחק את הקשת בעלת המשקל .)6העץ הפורש הקטן ביותר של
n 1צמתים הוא במשקל .45
שאלה
נתון גרף לא מכוון עם קיבול חיובי על הקשתות .קיבול של מסלול הוא הקיבול המינימלי של קשת
במסלול.
יהי Tהעץ הפורש המקסימלי של הגרף .הוכח שהקיבול של המסלול היחיד בעץ בין שני -
שווה לקיבול המקסימלי של מסלול מ uל v.קודקודים v u ,
הוכחה:
תהי eהקשת המינימלית במסלול בין uל vבעץ.
נניח שיש מסלול בגרף בין uל vשהקיבולת שלו גדולה מהמסלול בעץ .לכן כל אחת מהקשתות
במסלול הנ"ל גדולה ממש מ e.
eמגדירה חתך בגרף המפריד בין ל .לכן כל מסלול בין ל עובר בחתך הנ"ל לפחות פעם
v u v u
אחת.
משום כך המסלול בעל הקיבול הגדול ביותר בין uל vמכיל לפחות קשת אחת בחתך הנ"ל ולכן e
אינה מקסימלית בחתך שהיא מגדירה.
זאת בסתירה לכך ש eנמצאת בעץ פורש מקסימום.
OאתEהקיבולV V
המקסימלי של מסלול עבור כל זוג קודקודים gol
2
מצא בזמן -
בגרף.
אלגוריתם:
נמצא עץ פורש מקסימום .מכל קודקוד vבעץ נריץ סריקה (למשל )BFSונחשב את הקיבול מ vליתר
x u
(נניח uקרוב יותר ל ,)vנסמן קודקודי הגרף .כאשר מגלים בסריקה קשת
x u ) w, (u v,]M, [ nim[ x v ]M. ,
תכונות של עצים פורשים מינימלים:
האלגוריתם של עץ פורש מינימלי יעבוד גם על קשתות שליליות .אם מעלים את כל הקשתות בסכום
מסויים ,קשת שהיתה מינימלית בחתך תישאר מינימלית בחתך .דרך נוספת לראות זאת היא דרך משקל
העץ .אם אנו מעלים את כל הקשתות בסכום קבוע ,עץ שהיה מינימלי לפני כן ישאר עץ פורש מינימלי.
תרגול 11
1.6.04
רשתות זרימה
גרף מכוון עם קודקודים t s ,
ופונקציית קיבול אי שלילית על היא) , t
, s (N רשת זרימה
( e )c. הקשתות
כך שהזרימה בכל קשת היא בין 0לקיבול הקשת( e )f זרימה ברשת היא פונקציה על הקשתות
ולכל קודקוד (פרט ל t )s ,סכום הזרימה הנכנסת שווה לסכום הזרימה היוצאת.
זרימה מקסימלית היא זרימה חוקית כך שסכום הזרימה היוצאת מ sהוא מקסימלי.
ערך הזרימה – סכום הזרימה היוצאת מ .s
s
חתך ברשת – חלוקה של הקודקודים לשתי קבוצות ,כך שקבוצה אחת מכילה את והשניה את
.t
( e )c
( v )u , e
V u
קיבולת של חתך -
s
V v t
( e )f ( e )f
( v )u ,e
V u
( v )u ,e
V u
זרימה בחתך -
t s
V v s V v t
טענה
בזרימה חוקית הזרימה בכל חתך שווה.
משפט
xamwolf nim tac
החתך עם הקיבול המינימלי ברשת שווה לערך הזרימה המקסימלית.
5/12
5/15 4/7
0/5
s t
1/3
2/4
3/10
3/10
c 22
f 7
FF
מתחילים עם זרימה .0
בכל שלב מחפשים מסלול משפר זרימה ומזרימים בו ככל שניתן.
כאשר אין יותר מסלולים משפרים ,עוצרים.
מסלול משפר – מסלול לא מכוון מ sל ,tכך שכל קשת קדימה לא רוויה וכל קשת אחורה לא
ריקה.
פוטנציאל שיפור של מסלול – מינימום פוטנציאל השיפור של הקשתות בו.
פוטנציאל שיפור של קשת במסלול:
e ) f ( e )c ( קשת קדימה
( e )f קשת אחורה
( F ) E O. סיבוכיות האלגוריתם תלויה בערך הזרימה .לכן הסיבוכיות היא
5/12
5/15 5/7
0/5
s t
0/3
3/4
3/10
3/10
EC
האלגוריתם פועל כמו FFעם הבדל אחד :המסלול המשפר שנבחר יהיה הקצר ביותר האפשרי.
2
( V ) E O. סיבוכיות:
Vפעמים. טענה – באלגוריתם הנ"ל משתמשים בכל קשת לכל היותר
150/ 70/
0/5
s t
0/3
0/4
0/10
0/10
יכולtלהיות רק
v
הראשון 4
המשפר v 3
v s
(המסלול v 2 1 המסלול המשפר הראשון:
עם קשתות קדימה ,משום שבקשתות אחורה הזרימה היא .)0פוטנציאל שיפור .3
123/
153/ 70/
0/5
s t
3/3
0/4
3/10
3/10
שיפור .3t v .s
פוטנציאל v 2 3
123/
153/ 73/
0/5
s t
30/
43/
3/10
3/10
נהפך tשוב למסלול משפר ,משום שהגרף
v 4
שבחרנו v
בהתחלה 3
v .s
המסלול v 2 1
156/ 73/
0/5
s t
33/
43/
106/
106/
שיפור .1t v .s
פוטנציאל v 2 3
126/
156/ 74/
0/5
s t
32/
44/
106/
106/
שיפור 3t v .s
פוטנציאל v 2 1
129/
159/ 77/
0/5
s t
32/
44/
106/
106/
t
v . 4
שיפור 1v 3
v .s
פוטנציאל v 2 1
1210/
1510/ 73/
0/5
s t
33/
44/
107/
107/
וזוהי הזרימה המקסימלית.
טענה
החתך הוא מינימלי אם ורק אם עבור כל זרימה מקסימלית כל הקשתות קדימה יהיו רוויות וכל הקשתות
אחורה ריקות.
תרגיל
נתונה רשת זרימה וזרימה מקסימלית בה .מצא חתך מינימלי.
אלגוריתם:
s
נסרוק מ ונתקדם רק על קשתות קדימה לא רוויות או אחורה לא ריקות .כאשר לא נוכל להתקדם עוד
נקבל חתך מינימלי.
סיבוכיות.BFS :
תרגיל
בהנתן רשת זרימה וזרימה מקסימלית ,מצא אלגוריתם הבודק האם ישנו חתך מינימלי יחיד.
אלגוריתם:
נשתמש באלגוריתם הקודם .לאחר מכן נתחיל מ tונלך הפוך .נתקדם כל פעם שיש קשת אחורה לא
רוויה .נתקדם עד שנקבל חתך מינימלי .אם זהו אותו חתך שמצאנו ,הוא יחיד .אם לא ,הוא לא יחיד.
הוכחה:
כיוון :1אם מצאנו עוד חתך ,סימן שהוא לא יחיד.
כיוון :2
צריך להוכיח שאם מצאנו בשתי הסריקות את אותו החתך ,זהו החתך היחיד.
החתך הראשון שמצאנו בסריקה הראשונה הוא החתך המינימלי הקרוב ביותר ל .sכל חתך מינימלי אחר
V s V. /s בגרף בהכרח יכיל את הקבוצה המכילה את .s
הוכחנו שהחתך הוא הכי קרוב ל .sאם אנו מפעילים את האלגוריתם מהכיוון השני ,הוא הכי קרוב ל .t
אם זהו אותו חתך ,אז זהו החתך היחיד.
תרגול 12
8.6.04
תרגיל
תאר אלגוריתם הקובע האם e
( v )u ,e. נתונה רשת זרימה וזרימה מקסימלית בה .כמו כן נתונה קשת
שייכת לאחד (או יותר) מהחתכים המינימליים ברשת.
טענה:
קשת eשייכת לחתך מינימלי אם ורק אם כל הקטנה של הקיבולת שלה מקטינה את ערך הזרימה
המקסימלית ברשת.
אלגוריתם:
e s
נמצא מסלול עם זרימה חיובית מ ל tהעובר דרך .נקטין את הזרימה במסלול ב ונקטין את
יכולת הקיבול של eב .נחפש מסלול משפר זרימה מ sל e .tשייכת לחתך מינימלי אם ורק אם
אין מסלול כזה.
הוכחה:
נניח ש eשייכת לחתך מינימלי .Mהקטנה של הקיבולת של eב מקטינה את הקיבול של Mב .
לכן קיבלנו חתך בקיבולת קטנה מהמינימלי בגרף המקורי ולכן הזרימה המקסימלית קטנה יותר.
נניח ש eלא שייכת לאף חתך מינימלי .נסמן M :החתך המינימליM / ,החתך הקטן ביותר המכיל את e
M M /
,החתכים היחידים שיפגעו Mנקטין את הקיבול של eב M. /לכן אם .מההנחה נובע ש
2
M / M /
הזרימה M.
לכן M הם החתכים המכילים את eוקיבולם יהיה גדול או שווה ל
2
המקסימלית אינה משתנה.
שימושים של זרימה
גודל השידוך הוא מספר הקשתות (מספר הזוגות המשודכים) .שידוך מקסימלי הוא שידוך חוקי עם מספר
מקסימלי של קשתות.
מציאת השידוך המקסימלי נעשית ע"י הוספת כיוון לקשתות מהקבוצה הראשונה אל הקבוצה השניה.
נוסיף קודקוד sוקודקוד .tנמתח קשתות מכוונות מ sאל כל אחד מהקודקודים בקבוצה הראשונה.
נמתח קשתות מהקבוצה השניה ל .tנגדיר שלכל הקשתות יש קיבול .1הקיבול המקסימלי יהיה כל
הקשתות של הגרף הדו צדדי שזורם בהן משהו .כל קשת רוויה בגרף הדו צדדי היא קשת בשידוך.
s t
הסבר:
s
יש רק קשת אחת מ לכל קודקוד בקבוצה הראשונה .לכן אם הזרימה היא ,1תוכל להיות ממנו רק
קשת אחת בין שתי הקבוצות בה יש זרימה (אלגוריתם FFיתן ערך שלם של זרימה עבור קיבולת שלמה
של קשתות).
סיבוכיות:
( V ) E O. לפי FFהסיבוכיות תהיה
הוכחה:
ניתן להראות התאמה בין זרימה לשידוך .אם ניתנת זרימה ,ניתן לבנות שידוך חוקי באותו גודל .אם ניתן
שידוך ,ניתן לבנות ממנו זרימה .אם אנו לוקחים זרימה מקסימלית ,ניתן להתאים לה שידוך .השידוך הוא
מקסימלי ,משום שאם הוא היה יותר גדול היה ניתן לבנות ממנו זרימה גדולה יותר מהזרימה המקסימלית.
תרגיל
צריך הקבוצות אינן בהכרח זרות .כולן מוכלות בקבוצה . m
,...,1 S S,...,
.1 n נתונות nקבוצות
,...,כך שy
,...,ו y 1 x n
x1 למצוא (או להגיד שאין) מערכת כפולה של נציגים ,כלומר מספרים n
y
שונים.,...,
,...,ו y 1 x n
x1 y i x i,
וכל S i
המספרים n
מספרים קבוצות
2
1 קשתות לפי
s
t שייכות בקיבול 1
1 2
סיבוכיות:
m V. n. לכןm לנתוני V
השאלה .אנו יודעים ש ( )E O הסיבוכיות היא של .FFנתרגם את
(E סכום S
גודל הקבוצות). i
תרגול 13
15.6.04
Aיש בן זוג .לכן מספר השכנים הוא נוכיח שאם יש שידוך המכסה את V, 1אז לכל קודקוד השייך ל
A A N .) ( לפחות בגודל של הקבוצה .משום כך לכל V A 1
מתקיים
נניח שהתנאי מתקיים ,כלומר לכל תת קבוצה של V 1מספר השכנים שלה גדול או שווה מגודלה.
נוכיח את הטענה בעזרת רשת זרימה .אם נראה שברשת הזרימה שיצרנו יש זרימה בגודל V, 1נוכיח את
הטענה.
s
t
)N ( A
s
A t
עלינו להראות שיש בחתך לפחות V 1קשתות .אנו יודעים שמספר השכנים של Aגדול או שווה מהגודל
של .A
V1 A N A V 1 ( )
תרגיל
נתון גרף דו צדדי kרגולרי (דרגתו של כל קודקוד היא בדיוק .)kהוכח שבגרף יש kשידוכים
מושלמים זרים (אין אף זוג דומה באף אחד מהשידוכים).
הוכחה באינדוקציה:
בסיס k. 1 :גרף 1רגולרי הוא שידוך מושלם.
הנחה:
עבור גרף k 1רגולרי ,בגרף יש k 1שידוכים מושלמים זרים.
הוכחה:
אם נוכיח שבגרף kרגולרי יש שידוך מושלם ,אז אפשר למחוק שידוך זה מהגרף ולקבל גרף k 1
רגולרי .בגרף הזה יש לפי ההנחה k 1שידוכים מושלמים זרים .הם זרים גם לשידוך החדש ולכן יש k
שידוכים מושלמים זרים.
טענה:
בגרף דו צדדי kרגולרי יש שידוך מושלם.
הוכחה:
V2 V. 1 נראה ש
V k.
מספר הקשתות היוצאות מ V 2הוא אותו מספר: 1 מספר הקשתות היוצאות מ V 1הוא
V k 1
. V1
k
A A N
( ). V A
מתקיים 1 נראה שיש שידוך המכסה את V. 1מספיק להוכיח שלכל
A k A N
נכנסות לפחות( ) k. לכן
Aל NהואA
( ) Aל V A
מספר הקשתות מ . 1 תהי
.A Nהוא Aלפחות
( ) A N
מקבל בדיוק kקשתות .לכן מספר הקודקודים ב( ) קשתות .כל קודקוד ב
תרגיל
נתונה רשימה Mשל מטוסים ,רשימה Nשל נווטים ורשימה Pשל טייסים.
צריך למצוא צוות שיעלה מס' מקסימלי של מטוסים לאוויר ,כך שכל צוות מכיל טייס ונווט ,כאשר לכל
איש צוות נתונה רשימה של מטוסים שמותר לו לעלות אליהם.
פתרון:
כדי למנוע מצב בו כמה צוותים נכנסים לאותו מטוס ,נגדיר קשת ממטוס להעתק של עצמו בקיבולת .1
s t
סיבוכיות:
,FFמשום שהזרימה כאן חסומה ע"י מספר המטוסים ומספר הטייסים.
הוכחה:
ניתן לראות שכל טייס יכול להיות שייך רק למטוס אחד .באותו אופן גם כל נווט יכול להיות שייך רק
למטוס אחד .משום כך זהו ציוות חוקי וגודלו הוא גודל הזרימה .לכן אם הוכחנו שישנה זרימה בגודל k,
ניתן לבנות ממנה ציוות חוקי בגודל k.לכן הזרימה המקסימלית שווה לציוות המקסימלי.