אלגוריתמים קומבינטורים תקצירי הרצאות ־ רועי משולם אלגוריתמים לבעיות סדר נסמן } [n] = {1, . . . , nויהא Snאוסף התמורות על ].[n בעיית המיון :בהנתן סדרת מספרים ממשיים שונים ) a = (a1 , . . . , anמצא את התמורה היחידה π ∈ Snעבורה ) π .aπ(1) < . . . < aπ(nזו תיקרא התמורה הממיינת של .a אנו נתרכז באלגוריתמים המשתמשים רק בהשוואות ולא ־ למשל ־ בפעולות אלגבריות המנצלות תכונות של הממשיים מעבר ליחס הסדר ביניהם .חישוב במודל זה מתואר על ידי עץ השוואות. דוגמא: x1 <? x2 x 2 <? x 3 כן כן לא לא x1 <? x3 לא כן x1 < x2 < x3 x 1 <? x 3 כן x1 < x3 < x2 x2 <? x3 x2 < x1 < x3 לא x3 < x1 < x2 כן x2 < x3 < x1 לא x3 < x2 < x1 האלגוריתם מופעל באופן הבא :קלט ) a = (a1 , a2 , a3מגדיר מסלול מהשורש לעלה באופן הבא :כאשר בקודקוד פנימי המסומן ב־ xi <? xjמשווים בין aiלבין .ajאם ai < aj ממשיכים ימינה בעץ ואם aj < aiממשיכים שמאלה בעץ .התמורה המופיעה על העלה שבקצה המסלול היא התמורה הממיינת של .a הערה :נשים לב שבאלגוריתם זה מספר ההשוואות המקסימלי שביצענו על קלט הוא .3האם יש אלגוריתם למיון שלושה מספרים המבצע לכל היותר 2השוואות על כל קלט? נענה על שאלה זו בהמשך. מודל עץ ההשוואות עץ בינארי Tהוא גרף מכוון עם שורש sכך שדרגת היציאה של כל קודקוד ≥ .2בדרך כלל לא נסמן חץ על צלע אלא נבין שכיוון הצלע הוא מלמעלה למטה .עלים הם קודקודים עם דרגת יציאה .0הבנים הימני והשמאלי של קודקוד vמסומנים ) lef t(v), right(vבהתאמה )אם הם קיימים( .גובה העץ ) h(Tהוא מספר הצלעות המירבי במסלול מכוון בין שורש לעלה. יהא Tעץ בינארי שבו כל קודקוד פנימי vמתוייג על ידי השוואה q(v) = xi <? xjכאשר ,1 ≤ i, j ≤ nוכל עלה vמתוייג על ידי תמורה .π(v) ∈ Sn 1 לכל וקטור ) a = (a1 , . . . , anשל ממשיים שונים נגדיר מסלול ) P ath(a) = (s = v0 , . . . , vm מהשורש sלאחד העלים באופן הבא :נניח שהגדרנו את s = v0 , . . . , vkעד 0 ≤ kכלשהו. אם vkעלה ,נגדיר m = kונסיים .אחרת vkקדקד פנימי ויהא .q(vk ) = xi <? xjנגדיר עתה right(vk ) ai < aj = vk+1 lef t(vk ) aj < ai העץ המתוייג Tייקרא עץ השוואות למיון nאיברים אם לכל ) a = (a1 , . . . , anכנ"ל מתקיים P ath(a) = (s = v0 , . . . , vm ) :גורר ש ) π(vmהיא התמורה הממיינת של .a כל אלגוריתם השוואות למיון ניתן לייצוג על ידי עץ השוואות מתוייג .T סיבוכיות האלגוריתם הינה מספר ההשוואות המירבי שיבצע האלגוריתם Tעל קלט באורך ,n ותסומן ) .cT (nסיבוכיות האלגוריתם שווה לגובה עץ ההשוואות ,Tכלומר ) .cT (n) = h(T בפועל ,נוח יותר לתאר אלגוריתמי השוואות על ידי "תוכנית מחשב" המאפשרת בין השאר שמוש בלולאות וקריאות רקורסיביות. מספר אלגוריתמי מיון להלן נתאר מספר אלגוריתמי מיון ונעריך את סיבוכיותם. Insertion Sort יהא ) A = (A1 , . . . , Anוקטור של ממשיים שונים .המיון מתבצע ב־ mשלבים ,כאשר בסוף השלב ה־ iהסדרה החלקית ) A(1), . . . , A(iממויינת .בשלב ה־ ) (i + 1משווים את ) A(i + 1בזה אחר זה ל־ ) . . . , A(i − 1), A(iעד שמוצאים את מקומו ביניהם. דוגמא: הסדרה בסוף 4 5 3 6 7 5 3 6 5 7 3 6 4 5 7 6 4 5 6 7 שלב i 7 4 4 3 3 i 1 2 3 4 5 תיאור על ידי התוכנית: )IS(A, n For i = 2 to n )k ← A(i j ←i−1 )while (k < A(j) & j ≥ 1 )A(j + 1) ← A(j j ←j−1 A(j + 1) ← k טענה: n 2 = )cIS (n 2 הוכחה :מספר ההשוואות המבוצעות בשלב iהוא לכל היותר .i − 1לכן . n 2 = )(i − 1 n X ≤ )cIS (n i=1 מאידך על הקלט ) A = (n, n − 1, . . . , 2, 1יבוצעו בדיוק i − 1השוואות בשלב iולכן . n 2 = )(i − 1 n X ≥ )cIS (n i=1 בעיית המיזוג :נתונים שני וקטורים ממויינים זרים ) a = (a1 < . . . < akו־ < b = (b1 ) .. . . < blעלינו למיין את הסידרה c = {ai }ki=1 ∪{bj }lj=1כך ש.c = (c1 < . . . < ck+l ) : להלן אלגוריתם השוואת רקורסיבי הממזג את a ∪ bלתוך .c )merge(a, k, l, b, c If k = l = 0 stop. If k = 0 do c(j) ← b(j), j = 1, . . . , l and stop. If l = 0 do c(i) ← b(i), j = 1, . . . , k and stop. )If a(k) < b(l )c(k + l) ← b(l )merge(a, k, b, l − 1, c )If a(k) > b(l )c(k + l) ← a(k )merge(a, k − 1, b, l, c נסמן ב־ ) cM (k, lאת הסיבוכיות של mergeעל קלטים ) (a, bבאורכים ).(k, l טענה 1אם ) (k, l) 6= (0, 0אזי .cM (k, l) ≤ k + l − 1 הוכחה 1אינדוקציה על .k + lהמקרים k = 0ו־ l = 0ברורים .נניח אפוא .k, l ≥ 1 מהתיאור הרקורסיבי של האלגוריתם ומהנחת האינדוקציה נובע כי })cM (k, l) ≤ 1 + max{cM (k − 1, l), cM (k, l − 1 ≤ 1 + max{(k − 1) + l − 1, k + (l − 1) − 1} = k + l − 1. אלגוריתם מיון־מיזוג שיתואר להלן הוא דוגמא לשימוש בטכניקה אלגוריתמית הנקראת "הפרד ומשול" ) (divide and conquerהמבוססת על פיצול הבעיה למספר תת־בעיות קטנות יותר ,פתרון כל אחת מהן ,ולאחר מכן סינתזה של הפתרונות החלקיים לפתרון מלא. 3 Merge Sort M S(A, n) If n = 1 stop. B ← (A(1), . . . , A(b n2 c) C ← (A(b n2 c + 1), . . . , A(n)) M S(B, b n2 c) M S(C, d n2 e) merge(B, b n2 c, C, d n2 e, A) מהתיאור הרקורסיבי של.n על קלט באורךM S את הסיבוכיות שלcM S (n) נסמן ב־ אזיn ≥ 2 האלגוריתם נובע כי אם n n n n cM S (n) ≤ cM S (b c) + cM S (d e) + cM (b c, d e) 2 2 2 2 (1) n n ≤ cM S (b c) + cM S (d e) + n − 1 2 2 :מסקנה k k cM S (2 ) ≤ k · 2 ואזי לפי הנחת האינדוקציה ו־k ≥ 1 נניח. ברורk = 0 המקרה.k אינדוקציה על:הוכחה נקבל1 cM S (2k ) ≤ 2cM S (2k−1 ) + cM (2k−1 , 2k−1 ) ≤ 2(k − 1) · 2k−1 + 2k − 1 = k · 2k − 1 < k · 2k מתקייםn ≥ 1 לכל:מסקנה cM S (n) ≤ 2n log2 n + 2n. ולכן2k < 2n אזי.2k−1 < n ≤ 2k כך ש־k יהא:הוכחה cM S (n) < cM S (2k ) = k2k < 2n log2 n = 2n log2 n + 2n. 4 תרגיל :הוכח באינדוקציה על nובעזרת ) (1כי cM S (n) ≤ ndlog2 ne ≤ n log2 n + n. סיבוכיות בעיית המיון נסמן ב־) Csort (nאת ) min CA (nכאשר Aעובר על כל אלגוריתמי הסדר למיון nאיברים. מהתרגיל נובע כי Csort (n) ≤ CM S (n) ≤ n log2 n + n נראה כי סיבוכיות זו אופטימלית עד כדי הקבוע הכפלי של .nיהא ) L(Tמספר העלים בעץ בינארי .T טענה.L(T ) ≤ 2h(T ) : הוכחה :אינדוקציה על ) .h = h(Tהמקרה h = 0ברור .נניח h > 0ויהיו T1 , T2העצים הנטועים בבנים של השורש .אזי h(Ti ) ≤ h(T ) − 1ולכן לפי הנחת האינדוקציה L(T ) = L(T1 ) + L(T2 ) ≤ 2h(T1 ) + 2h(T2 ) ≤ 2h(T )−1 + 2h(T )−1 = 2h(T ) . מסקנהCsort (n) ≥ log2 n! : הוכחה :יהא Tעץ השוואות לסדרות באורך nכך ש־ ) .Csort (n) = h(T מכיוון שכל תמורה π ∈ Snהיא תמורה ממיינת של סדרה מסויימת הרי ש־ !L(T ) ≥ n ולכן !Csort (n) = h(T ) ≥ log2 L(T ) ≥ log2 n הערכה אסימפטוטית ל־ !log2 n הפונקציה ln xהיא מונוטונית עולה וחיובית באינטרוול )∞ .[1,לכן n+1 ln xdx = [x ln x − x]|n+1 = 2 Z ≤ ln j 2 n X j=1 )(n + 1) ln(n + 1) − (n + 1) − (2 ln 2 − 2 ≤ (n + 1) ln(n + 1) − (n + 1). 5 n+1 n n−1 2 1 וגם n Z ≥ ln j ln xdx 1 n X j=1 = [x ln x − x]|n1 = n ln n − n + 1. n n−1 3 2 1 מסקנהn log2 n − O(n) ≤ log2 n! ≤ n log2 n + O(n) : מסקנהCsort (n) ≥ log2 n! ≥ n log2 n − O(n) : עוד על בעיית המיזוג נחזור לבעיית המיזוג :בהינתן שני וקטורים ממויינים זרים ) a = (a1 < . . . < ak ) , b = (b1 < . . . < bl עלינו למיין את .a ∪ bנסמן ב־ ) Cmerge (k, lאת סיבוכיות הבעיה .ראינו אלגוריתם פשוט למיזוג שסיבוכיותו מקיימת cM (k, l) ≤ k + l − 1לכן .Cmerge (k, l) ≤ k + l − 1 טענה: k+l k Cmerge (k, l) ≥ log2 הוכחה :נעיין בעץ השוואות Tלבעיית המיזוג של הוקטור ) x = (x1 < . . . < xkעם ) .y = (y1 < . . . < ylכל קודקוד פנימי בעץ מתוייג ע"י xi <? yjוכל עלה מתוייג על ידי תמורה על {xi }ki=1 ∪ {yj }lj=1שבה x1 < . . . < xkוגם .y1 < . . . < ylכמו כן כל תמורה המקיימת אילוצים אלה מופיעה על אחד מהעלים .מספר התמורות על {xi }ki=1 ∪ {yj }lj=1 k+l . שעבורן מתקיים x1 < . . . < xkוגם y1 < . . . < ylהוא k k+l k+l ) h(T .h(T ) ≥ log2 2ולכן ≥ לכן k k 6 k+l log2 ≤ Cmerge (k, l) ≤ k + l − 1 :מסקנה k )כאשרai < b < ai+1 .k = 1 ו־k = l להלן נדון בשני המקרים הקיצוניים :l = 1 המקרה עבורו0 ≤ i ≤ k עלינו למצואb ו־A = (a1 < . . . < ak ) בהינתן .(ak+1 = ∞ ו־a0 = −∞ מגדירים :דרך יעילה לבצע זאת היא על ידי חיפוש בינארי BS(A, k, b, i) If k = 1 & A(1) < b then i = 1, stop. If k = 1 & A(1) > b then i = 0, stop. If b > A(d k2 e) 0 k A = (A(d e + 1), . . . , A(k)) 2 0 k BS(A , b c, b, i) 2 k i←i+ 2 If b < A(d k2 e) 00 k A = (A(1), . . . , d e − 1)) 2 00 k BS(A , d e − 1, b, i) 2 .k באורךA את הסיבוכיות של חיפוש בינארי כאשרcBS (k) נסמן ב־ :טענה cBS (k) ≤ dlog2 (k + 1)e מתקייםk > 1 וכי לכלcBS (1) = 1 מתיאור האלגוריתם נובע כי:הוכחה k k k cBS (k) ≤ 1 + max{cBS (b c), cBS (d e − 1)} ≤ 1 + cBS (b c) 2 2 2 אזי2t−1 ≤ k ≤ 2t − 1 נניח k k ≤ 1+dlog2 2t−1 e = t = dlog2 (k + 1)e cBS (k) ≤ 1+cBS (b c) ≤ 1+ log2 b c + 1 2 2 :מסקנה Cmerge (k, 1) = dlog2 (k + 1)e 7 שימוש של חיפוש בינארי למיון אם נחליף ב־ Insertion sortאת החיפוש הסדרתי בחיפוש בינארי נקבל אלגוריתם מיון יעיל המתואר להלן: )BIS(A, n For i = 2 to n )Binary insert A(i) into A(1) < . . . < A(i − 1 נסמן ב־ ) cBIS (nאת סיבוכיות ) .BIS(A, nאזי cBIS (1) = 0ולכל n ≥ 1מתקיים cBIS (n) ≤ cBIS (n − 1) + cmerge (n − 1, 1) = cBIS (n − 1) + dlog2 ne מסקנה: dlog2 ne ≤ ndlog2 ne n X ≤ )cBIS (n i=1 המקרה :k = l במקרה זה ≤ Cmerge (k, k) ≤ 2k − 1 2k k 22k ≤ log2 2k + 1 2k − log2 (2k + 1) = log2 טענה: Cmerge (k, k) = 2k − 1. הוכחה :נגדיר שתי סדרות באורך b = (b1 , . . . , bk ) ,a = (a1 , . . . , ak ) :kכאשר bi = 2i. ai = 2i − 1, יהי Tעץ ההשוואות של אלגוריתם למיזוג שתי סדרות באורך ,kויהא Pהמסלול שעובר הזוג ) (a, bעל .Tהעלה שבקצה המסלול מתוייג על ידי התמורה x1 < y1 < x2 < y2 < · · · < xk < yk נראה כי כל ההשוואות מהצורות 1≤t≤k xt < yt , ו־ 1≤t≤k−1 מופיעות על קודקוד פנימי כלשהוא במסלול .P 8 yt < xt+1 , 0 0 0 0 )א( נניח בשלילה כי xt <? ytלא מופיע ב־ .Pנגדיר a = {ai }ki=1ו־ b = {bj }lj=1 על ידי 0 = ai i 6 t = ai bt i = t ו־ i 6= t i=t bi at 0 = bi 0 0 נשים לב כי אם i 6= jאו i = j 6= tאזי ,ai < bj ↔ ai < bjולכן מכיוון 0 0 שההשוואה xt < ytאינה מופיעה ב־ Pהרי שהזוג ) (a , bיתקדם באותו מסלול כמו הזוג ) ,(a, bולפיכך יסיים בתמורה x1 < y1 < . . . , xk < ykבסתירה לכך ש ־ 0 0 .at 6< bt 00 00 0 00 )ב( נניח בשלילה כי yt <? xt+1לא מופיע ב־ .Pנגדיר a = {ai }ki=1ו־ b = {bj }lj=1 על ידי 00 ai i 6= t + 1 = ai bt i = t + 1 ו־ i 6= t i=t 00 bi at+1 00 = bi 00 שוב ai < bj ↔ ai < bjאלא אם ) .(i, j) = (t + 1, tולכן אם ההשוואה 00 00 yt < xt+1אינה מופיעה ב־ Pהרי ש־ ) (a , bיעבור אותו מסלול כמו )(a, b 00 00 ולפיכך יסיים בתמורה x1 < y1 < . . . , xk < ykבסתירה לכך ש־ .bt < at+1 מ־)א( ו־)ב( נובע כי המסלול Pהינו באורך לפחות 2k + 1ולכן .Cmerge (k, k) ≥ 2k − 1 9 ערימות נסמן } N = {n ∈ Z : n ≥ 1ונגדיר ל־ i ∈ N right(i) = 2i + 1. lef t(i) = 2i, העץ הבינארי האינסופי הוא הגרף המכוון על קבוצת הקודקודים Nשצלעותיו הן ))(i, lef t(i)), (i, right(i לכל .i ≥ 1עץ בינארי Tעל nקודקודים ייקרא מאוזן אם הוא איזומורפי לתת הגרף של העץ הבינארי האינסופי המושרה על קבוצת הקודקודים }.[n] = {1, . . . , n יהא Tעץ בינארי מאוזן על קבוצת הקודקודים |V | = n ,Vויהא A = (A(v))v∈Vמערך המאונדקס על ידי A .Vייקרא ערימה אם לכל v ∈ Vמתקיים A(v) ≥ max{A(lef t(v)), A(right(v))}. )כמובן ,נתייחס ל־ ) lef t(v), right(vרק אם הם מוגדרים(. לקודקוד u ∈ Vנסמן ב־ Tuאת תת העץ הנטוע ב־ .u בניית ערימה דרך אחת להפוך מערך (A(v))v∈Vלערימה היא על ידי מיון הדורש ) O(n log nהשוואות: אנו נתאר אלגוריתם יעיל יותר הדורש רק ) O(nהשוואות .האלגוריתם ישתמש בשגרת עזר הפותרת את הבעייה הבאה :נניח כי v ∈ Vוכי צמצום Aל־ ) Tlef t(vהוא ערימה וכן צמצום Aל־ ) Tright(vהוא ערימה. ) Heapif y(A, n, vהמתוארת להלן הופכת את Aהמצומצם ל־ Tvלערימה: )Heapify(A, n, v if A(v) ≥ max{A(lef t(v)), A(right(v))} stop. )else if A(lef t(v)) > A(v )exchange A(lef t(v)) & A(v ))Heapif y(A, n, lef t(v else )exchange A(right(v)) & A(v ))Heapif y(A, n, right(v נסמן ב־ ) height(vאת גובה העץ ,Tvאזי הסיבוכיות של ) Heapif y(A, n, vהינה )).O(height(v בניית ערימה מתבצעת על ידי האלגוריתם הבא: )makeheap(A,n For i = n down to 1 )Heapif y(A, n, i יהא 2m ≤ n ≤ 2m+1 − 1אזי הסיבוכיות של makeheapהינה ! n 2m+1 X X−1 (heightT (i) = O = ))heightT (i O i=1 i=1 10 m m X X j O( (m − j)2 ) = O( j2m−j ) j=0 j=0 ≤ O(2m ) ∞ X j2−j . j=0 ∞ X jxj = x( j=0 ∞ X j=1 =x·( עתה ∞ X 0 jxj−1 ) = x( xj ) j=0 x 1 0 . ) = 1−x (1 − x)2 P∞ .O(2m ) = O(n) היאmakeheap(A, n) לכן הסיבוכיות של. j=1 j2−j = 2 ולכן מיון ערימה Heapsort(A, n) makeheap(A, n) For i = n down to 2 exchange A(1) ↔ A(i) Heapif y({A(1), . . . , A(i − 1)}, 1) חסומה על ידיHeapsort הסיבוכיות של CHeapsort (n) ≤ CM akeheap (n) + (n − 1)O(log n) ≤ O(n log n) בחירה .aπ(1) < . . . < aπ(n) ,π ∈ Sn סדרה עם תמורה ממיינתA = (a1 , . . . , an ) תהא נגדיר sel(A, k) = aπ(k) . .sel(A, 1) = min A, sel(A, n) = max A למשל מיון מלא נותן כמובן.|A| = n עבורselk (A) את הסיבוכיות של חשובC(n, k) נסמן ב־ בהמשך נראה כי קיים.Csel (n, k) ≤ O(n log n) ולכן,1 ≤ k ≤ n לכלsel(A, k) את .Csel (n, k) ≤ e cn מתקייםk כך שלכלe c קבוע מוחלט :טענה Csel (n, 1) = n − 1 • Csel (n, 2) = n + dlog2 ne − 2 • 11 נתאר עתה אלגוריתם רקורסיבי ) Sel(A, n, kהמוצא את ) sel(A, kשל סדרה Aבאורך .n )Sel(A, n, k )א( נחלק את Aלחמישיות F1 , . . . , F n5ונמצא את החציון של כל חמישייה: )bi ← Sel(Fi , 5, 3 יהא ) B = (b1 , . . . , b n5וקטור החציונים. n x ← Sel(B, n5 , 10החציון של .B )ב( יהא ) )ג( נחשב: }C = {ai ∈ A : ai < x }D = {ai ∈ A : ai > x )ד( |C| ≥ k ) Sel(C, |C|, k x |C| = k − 1 ← )Sel(A, n, k Sel(D, |D|, k − |C| − 1) |C| ≤ k − 2 נסמן ב־ ) cSel (n, kאת הסיבוכיות של האלגוריתם ) Sel(A, n, kונסמן e ) .S(nהערכת ) S(n, kמבוססת על העובדה הבאה: )= max1≤k≤n cSel (n, k טענה C, D :המתקבלות בצעד 3באלגוריתם מקיימות 7n 10 ≤ ||C|, |D 12 יהיו:הוכחה [ C0 = {y ∈ Fi : y ≤ bi } ⊂ C {i:bi <x} D0 [ D0 = {y ∈ Fi : y ≥ bi } ⊂ D {i:bi >x} 3n |C| ≥ |C0 | ≥ 10 |D| ≥ |D0 | ≥ אזי 3n 10 ולכן C0 |C| ≤ n − |D| ≤ 7n 10 |D| ≤ n − |C| ≤ 7n 10 Sel(A, n, k) הערכת סיבוכיות :נעריך את מספר ההשוואות בכל אחד מהשלבים באלגוריתם 5 .־יםbi השוואות למציאת ה־n5 · cSel (5, 3) ≤ n5 · = 2n ()א 2 n .x השוואות למציאתcSel ( n5 , 10 ) ()ב .C, D השוואות לקביעתn ()ג .sel(D, |C| − k − 1) ו־sel(C, k) השוואות למציאתmaxα cSel ( 7n 10 , α) ()ד לכן cSel (n, k) ≤ 2n + cSel n n , + n + max cSel α 5 10 7n ,α 10 e n ) + S( e 7n ) ≤ 3n + S( 5 10 ולכן e e n ) + S( e 7n ) S(n) ≤ 3n + S( 5 10 אזי, Pm i=1 θi g(n) ≤ 1− 13 < 1 כאשרg(n) ≤ Cn Pm i=1 θi . Pm i=1 :למה g(θi n) + cn אם מסקנה: = 30n 7 10 3n e )cSel (n, k) ≤ S(n ≤ 1 − 15 − קידוד חסר רעש (noiseless) coding הבעייה :נתון קובץ הכתוב באלף בית סופי .x1 , . . . , xnברצוננו לקודד אותו בתווים בינאריים כך שיתקיים: )א( אפשר יהיה לשחזר את הקובץ המקורי מהקובץ המקודד. )ב( הקובץ המקודד יהיה באורך מינימלי. דוגמא :האלף בית הוא } .{A, B, C, Dבקובץ Nאותיות עם טבלת השכיחויות הבאה: D C B A 1 8 1 8 1 4 1 2 אות שכיחות פתרון א: D 11 C 10 B 01 A 00 הקובץ המקודד הוא באורך אות קוד N N N N ·2+ ·2+ ·2+ ·2 = 2N 2 4 8 8 ביטים פתרון ב: D 111 C 110 B 10 A 0 הקובץ המקודד הוא באורך אות קוד N N N N ·1+ ·2+ ·3+ ·3 = 1.75N 2 4 8 8 ביטים אנו רואים כי בחירה מושכלת של הקוד יכולה לשפר משמעותית את אורך הקובץ המקודד. הגדרה :צופן רישא הוא אוסף מילים בינאריות w1 , . . . , wM ∈ {0, 1}Nכך שלכל i 6= j המילה wiאיננה רישא של .wj טענה :צופן רישא ניתן לפענוח יחיד .כלומר ,אם wi0 . . . wis = wj0 . . . wjt אזי s = tומתקיים il = jlלכל .1 ≤ l ≤ t טענה :יש התאמה חח"ע בין עצים בינאריים עם Mעלים לבין צופני רישא עם Mמילים. 14 הוכחה :נסמן את צלעות העץ הפונות שמאלה ב־ 0ואת אלה הפונות ימינה ב־ .1לכל עלה jמתאים את המילה הבינארית המתארת את המסלול מהשורש לעלה .אוסף Mהמילים המתקבל באופן זה מעץ עם Mעלים הוא צופן רישא ,וכל צופן רישא מתקבל באופן יחיד. דוגמא: }{000, 001, 01, 10, 11 1 1 0 0 1 0 1 0 {wi }Mעם אורכים |wi | = liאם ורק אם טענה :קיים צופן רישא i=1 2−li ≤ 1 M X i=1 לפי השקילות בין עצים בינאריים לבין צופני רישא הטענה שקולה ל: טענה: קיים עץ בינארי Tעם עלים v1 , . . . , vMכך ש hT (vi ) = liאם ורק אם 2−li ≤ 1 M X i=1 )כאן ) hT (vהוא גובה העלה vבעץ ,Tכלומר המרחק בין השורש לעלה .(v הוכחה: כיוון ⇐ :יהא .L = max1≤i≤M liיהא ∞ Tהעץ הבינארי השלם האינסופי .לכל 1 ≤ i ≤ n נסמן v}.צאצא של Ai = {v ∈ T∞ : hT∞ (v) = L, vi אזי |Ai | = 2L−liו־ ∅ = Ai ∩ Ajלכל 1 ≤ i < j ≤ nולכן 2−li ≤ 1. M X ⇒ 2L−li i=1 M X i=1 = | Ai n [ | ≥ 2L i=1 כיוון ⇒ :בלי הגבלת הכלליות נניח כי .lM = max1≤i≤M liלפי הנחת האינדוקציה קיים 0 עץ Tעם עלים v1 , . . . , vM −1כך ש־ hT 0 (vi ) = liלכל .1 ≤ i ≤ M − 1יהיו v}.צאצא של Ai = {v ∈ T∞ : hT∞ (v) = lM , vi 15 הקבוצות Aiזרות בזוגות ומקיימות .|Ai | = 2lM −li M −1 X 2lM −li ≤ 2lM 1 − 2−lM = 2lM − 1. = | |Ai לכן קיים קודקוד vMבגובה lMשאינו שייך ל־ Ai i=1 i=1 i=1 MS −1 M −1 X = | Ai M −1 [ | 0 ולכן } vmוכל אבותיו{ ∪ T = T i=1 . הוא העץ הדרוש. נסמן ב־| |wאת האורך של מילה בינארית .w בעיית הקידוד חסר הרעש ):(noiseless coding בהינתן וקטור הסתברויות ) pi = 1 ,pi ≥ 0 ,p = (p1 , . . . , pM M P מצא צופן רישא i=1 w1 , . . . , wMכך ש־ | pi |wi M P הוא מינימלי. i=1 ניסוח שקול :מצא עץ עם עלים v1 , . . . , vMכך ש־ ) pi hT (vi M P = ) c(T, pמינימלי. i=1 נסמן ).f (p) = minT c(T, p M P תהא pi log2 p1i = ) H(p) = H(p1 , . . . , pMפונקציית האנטרופיה המוגדרת על }pi = 1 n P i=1 .{(p1 , . . . , pM ) : pi ≥ 0, i=1 משפט Shannon H(p) ≤ f (p) < H(p) + 1 הוכחה :בהינתן ) p = (p1 , . . . , pMנגדיר pi = 1 M X = 1 pi e .li = dlog2אזי −log2 p1 2 i i=1 M X ≤ 2−li i=1 M X i=1 ולכן קיים עץ בינארי Tעם עלים v1 , . . . , vMכך ש־ hT (vi ) = liולכן M X 1 1 <e pi (log2 + 1) = H(p) + 1 pi p i i=1 pi dlog2 M X i=1 = pi li M X ≤ )f (p i=1 הפונקציה ) g(y) = log2 (yקמורה ולכן לכל y1 , . . . , yMו־ ) p = (p1 , . . . , pMכך ש־ M P pi ≥ 0 , pi = 1מתקיים i=1 ) pi g(yi n X ! ≥ i=1 pi yi n X i=1 16 g ולכן PM i=1 2−li ≤ 1 אזי.l1 , . . . , lM צופן רישא עם אורכיםw1 , . . . , wM יהא 0 ≥ log2 M X M X 2−li 2−li = log2 ( ) pi pi i=1 i=1 M X M M M X X X 2−li 1 −li ≥ = + pi log2 pi log2 pi log2 2 = H(p) − pi li pi pi i=1 i=1 i=1 i=1 : לפי משפט שנון, מצד שני.f (p) ≤ 1.75 ראינו כי.p = ( 21 , 14 , 18 , 18 ) :דוגמא 1 1 1 1 log2 2 + log2 4 + log2 8 + log2 8 = 1.75. 2 4 8 8 f (p) ≥ H(p) = .לכן הצופן שתיארנו הוא אופטימלי f (p1 , . . . , pM ) למציאתHuffman אלגוריתם אזי.pi ≥ 0, PM i=1 pi = 1 ,p1 ≥ . . . pM −1 ≥ pM יהיו:משפט f (p1 , . . . , pM ) = f (p1 , . . . , pM −2 , pM −1 + pM ) + pM −1 + pM 0 0 p = (p1 , . . . , pM −2 , pM −1 + pM ) עץ אופטימלי עבור הוקטורT יהא: כוון אחד:הוכחה 0 0 0 לשני בניוvM −1 על ידי פיצולT עץ חדשT ניצור מ־.v1 , . . . , vM −2 , vM −1 עם עלים אזי.vM −1 , vM 0 0 c(T , p ) = M −2 X 0 pi hT 0 (vi ) + (pM −1 + pM )hT 0 (vM −1 ) i=1 :לכן c(T, p) = M −2 X pi hT (vi ) + pM −1 hT (vM −1 ) + pM hT (vM ) i=1 = M −2 X 0 0 pi hT 0 (vi ) + pM −1 (hT 0 (vM −1 ) + 1) + pM −2 (hT 0 (vM −1 ) + 1) i=1 0 0 = c(T , p ) + pM −1 + pM ולכן 0 0 f (p1 , . . . , pM ) ≤ c(T, p) = c(T , p ) + pM −1 + pM = f (p1 , . . . , pM −2 , pM −1 + pM ) + pM −1 + pM T אם העלים של.p1 ≥ . . . ≥ pM ,p = (p1 , . . . , pM ) עץ אופטימלי ל־T יהא:כוון שני PM .f (p) = i=1 pi hT (vi ) אזי מתקייםv1 , . . . , vM הם 17 יהא 1 ≤ i ≤ Mכך ש־ } hT (vi ) = max{hT (vj ) : 1 ≤ j ≤ M 0 נסמן ב־ Tאת העץ המתקבל מ־ Tעל ידי החלפת vMב־ .vi 0 T T vM vi vi vM 0 טענה T :עץ אופטימלי ל־ .P הוכחה: 0 ] c(T , p) − c(T, p) = [hT 0 (vi )pi + hT 0 (vM )pM ] − [hT (vi )pi + hT (vM )pM ] = [hT (vM )pi + hT (vi )pM ] − [hT (vi )pi + hT (vM )pM = (hT (vM ) − hT (vi ))(pi − pM ) ≤ 0 0 לכן ) .c(T , p) ≤ c(T, p מהטענה נובע כי קיים Tאופטימלי כך ש־ ) .hT (vM ) = max1≤i≤M hT (viמאופטימליות Tנובע כי vMאינו בן יחיד שהרי אז אפשר היה להחליפו באביו ולהקטין את ) .c(T, pלכן לאביו של vMיש צאצא נוסף .viממקסימליות ) hT (vMנובע כי viהוא אחיו של .vM 0 יהא vjכך ש־ } hT (vj ) = max{hT (vk ) : k 6= Mויהא Tהעץ המתקבל מהחלפת vjו־ .vM −1 0 טענה T :עץ אופטימלי ל־ .p הוכחה: 0 ] c(T , p) − c(T, p) = [hT 0 (vj )pj + hT 0 (vM −1 )pM −1 ] − [hT (vj )pj + hT (vM −1 )pM −1 ] = [hT (vM −1 )pj + hT (vj )pM −1 ] − [hT (vj )pj + hT (vM −1 )pM −1 = (hT (vM −1 ) − hT (vj )) (pj − pM −1 ) ≤ 0 0 ולכן ) .c(T , p) = c(T, p 18 מהטענות נובע כי קיים Tאופטימלי שבו vM −1 , vMאחים .נגדיר את Sלהיות עץ עם עלים u1 , . . . , uM −1על ידי: vi 1≤i≤M −2 = ui parent(vM −1 ) = parent(vM ) i = M − 1 ויהא ) .q = (q1 , . . . , qM −1 ) = (p1 , . . . , pM −2 , pM −1 + pMאזי ) pi hT (vi ) + (pM −1 + pM )hS (uM −1 M −2 X = ) qi hS (ui M −1 X = )c(S, q i=1 i=1 )pi hT (vi ) + (pM −1 + pM )(hT (vM −1 ) − 1 M −2 X = i=1 ) pi hT (vi ) − (pM −1 + pM ) = c(T, p) − (pM −1 + pM M X = i=1 לפיכך ) f (p1 , . . . , pM −2 , pM −1 + pM ) = f (q) ≤ f (p) − (pM −1 + pM אלגוריתם הופמן למציאת קוד רישא אופטימלי ל־ ) :p = (p1 , . . . , pM מצא את שני האיברים המינימליים ב־ .pבלי הגבלת הכלליות .p1 , . . . , pM −2 ≥ pM −1 , pM מצא ברקורסיה קוד רישא אופטימלי ל־ ) q = (p1 , . . . , pM −2 , pM −1 + pMופצל את הקודקוד המתאים ל־ pM +1 + pMלשני בניו. דוגמא: 1 0.45 }{000, 001, 01, 10, 11 0.55 0.25 0.3 19 0.25 0.10.15 0.2 עצים פורשים מינימליים והאלגוריתם החמדן עצים ויערות גרף ) G = (V, Eייקרא קשיר אם יש בו מסלול בין כל שני קודקודים. Gייקרא אציקלי או יער אם אינו מכיל מעגלים. Gהוא עץ אם Gקשיר ואציקלי. עץ פורש של Gהוא תת גרף ) E 0 ⊂ E ,T = (V, E 0כך ש־ Tעץ. נסמן ב־ ) c(Gאת מספר רכיבי הקשירות של גרף .G טענה: )א( כל עץ מכיל עלה. )ב( אם ) T = (V, Eעץ אזי .|E| = |V | − 1באופן כללי :אם ) G = (V, Eיער אזי ).|E| = |V | − c(G )ג( יהא ) G = (V, Eגרף קשיר ויהא ) F = (V, E 0יער כאשר ,E 0 ⊂ Eאזי קיים עץ פורש ) T = (V, E 00כך ש ־ .E 0 ⊂ E 00 ⊆ E בפרט :כל גרף קשיר מכיל עץ פורש. טענה )תכונת החילוף ליערות( :יהיו ) F2 = (V, E2 ) ,F1 = (V, E1שני יערות על אותה קבוצת קודקודים .Vאם | |E1 | < |E2אזי קיימת צלע e ∈ E2 − E1כך ש־ )}(V, E1 ∪ {e יער. הקודקודים של רכיבי הקשירות השונים הוכחה :יהא ) k = c(F1ויהיו V1 , . . . , Vkקבוצות Vi (Vi ,הוא יער )כי אינו מכיל של .F1נשים לב כי לכל 1 ≤ i ≤ kהגרף ) ∩ E2 2 Vi |. מעגל( ולכן ∩ E2 | ≤ |Vi | − 1 2 עתה :אם קיימים 1 ≤ i < j ≤ kוצלע e = {u, v} ∈ E2כך ש־ u ∈ Vi , v ∈ Vjאזי } E1 ∪ {eיער כדרוש. Vj Vk אחרת ) Vi 2 Sk ∩ i=1 (E2 V1 Vi = E2ואזי | (|Vi | − 1) = |V | − k = |E1 k X i=1 20 ≤| Vi 2 ∩ |E2 k X i=1 = | |E2 בסתירה להנחה | .|E2 | > |E1 ברצוננו למצוא עץ פורש יהא ) G = (V, Eגרף קשיר עם 0פונקציית משקל P .w : E → R מינימלי )עפ"מ( ב־ ,Gכלומר עץ ) T = (V, Eכך ש־ ) w(T ) = e∈E 0 w(eמינימלי. הערה :לפונקציית משקל wיתכנו מספר עצים פורשים מינימליים. אלגוריתם קרוסקל ) (Kruskalלמציאת עפ"מ אתחול :תהא e1 ∈ Eכך ש־ }.w(e1 ) = min{w(e) : e ∈ E איטרציה :נניח שבחרנו את .1 ≤ k ≤ n − 2 ,e1 , . . . , ekנבחר צלע מינימלי כך שהגוף )} (v, {e1 , . . . , ek , ek+1אציקלי. נסמן } .E 0 = {e1 , . . . , en−1 ek+1בעלת משקל 0 טענה (V, E ) :עפ"מ של הגרף הממושקל .G נוכיח עובדה יותר חזקה. 0 טענה :יהא ) T = (V, Fעץ פורש כלשהוא ב־ ,F = {f1 , . . . , fn−1 } ,Gכך ש־ w(f1 ) ≤ · · · ≤ w(fn−1 ). אזי לכל 1 ≤ k ≤ n − 1מתקיים ) w(ek ) ≤ w(fk הוכחה :נסמן } (V, Ek−1 ) .Ek−1 = {e1 , . . . , ek−1 }, Fk = {f1 , . . . , fkו־ ) (V, Fkהם יערות ולכן לפי למת החילוף קיימת צלע fi ∈ Fkכך ש־ } Ek−1 ∪ {fiיער .לכן לפי בחירת ekנובע כי ) .w(fi ) ≥ w(ekמאחר ו־ ) w(fk ) ≥ w(fiהרי שגם ) .w(fk ) ≥ w(ek דוגמא: 1 g b e2 e4 4 e1 1 a 6 f 2 e3 c 3 9 10 e6 7 e e5 8 10 d תיאור מפורט של אלגוריתם קרוסקל :נסמן בכל שלב את רכיב הקשירות של הקודקוד v בעץ המתהווה Fעל ידי ).A(v אתחול A(u) = {u} ,F ← ∅ :לכל .u ∈ V 21 מיין את צלעות .w(f1 ) ≤ . . . ≤ w(fm ) G לכל 1 ≤ k ≤ mבצע :תהי } .fk = {u, vאם ) A(u) 6= A(vאזי } F ← F ∪ {fkולכל ).A(x) ← A(u) ∪ A(v) ,x ∈ A(u) ∪ A(v צלעות רכיבי קשירות F ab ab,c,d,e,f,g ab ab,bg abg,c,d,e,f bg ab,bg,bc abcg,d,e,f bc a c ab,bg,bc,gf abcgf,d,e gf af abcdgf,e ad ab,bg,bc,gf,ad c d ab,bg,bc,gf,ad,ad abcdegf ae ef e d ניתוח סיבוכיות אלגוריתם קרוסקל בכל שלב של האלגוריתם נחזיק אוסף רכיבי קשירות שחלקם ריקים .A1 , . . . , Anבתחילת האלגוריתם |Ai | = 1לכל .1 ≤ i ≤ nנסמן | `i = |Aiולכל v ∈ Vיהא ) i(vכך ש־ ) .v ∈ Ai(vבשלב ה־ kבודקים את הצלע ה־ kהקטנה ביותר }.fk = {u, v ) (Iאם ) i(u) = i(vעוברים לצלע הבאה. ) (IIאחרת ) .i(u) 6= i(vאם ) `i(u) > `i(vמאחדים את ) Ai(vלתוך ) Ai(uומעדכנים את )∗( Aואת )∗(.i ספירת פעולות O(|E| log |E|) :למיון הצלעות .בדיקת ) i(u) = i(vלכל צלע }{u, v ובסה"'כ )| O(|Eהשוואות .עבור |V | − 1צלעות מתבצע ).(II טענה :כל קודקוד מוזז/מעודכן )| O(log(|Vפעמים. הוכחה :נשים לב כי אם הקודקוד ) v ∈ Ai(vהוזז ל־ ) Ai(uאזי הקבוצה החדשה של v גדולה לפחות פי שניים מ־ ) .Ai(vלכן מספר ההזזות של קודקוד קטן שווה מ־ | .log |V לכן סה"כ פעולות ב־ ) (IIהוא )| O(|V | log |Vוסה"כ סיבוכיות האלגוריתם היא )|.O(|E| log |E אלגוריתם פרים PRIM יהא v1קודקוד שרירותי ב־ .Vנגדיר באינדוקציה סדרת עצים ) Tk = (Vk , Ekכך ש־ ,Ek = {e1 , . . . , ek−1 } ⊂ E ,Vk = {v1 , . . . , vk } ⊂ V ,|Vk | = kבאופן הבא: } .E1 = ∅ , V1 = {v1 נניח שהגדרנו את ) Tk = (Vk , Ekעבור ,1 ≤ k < n − 1ונגדיר את .Tk+1תהא ) e = {u, v} ∈ E(Vk , V −Vkצלע בעלת משקל מינימלי כך ש־ .u ∈ Vk , v ∈ V −Vkנגדיר Ek+1 = E∪{ek } ,Vk+1 = Vk ∪{vk+1 } ,vk+1 = v , ek = eו־ ) .Tk+1 = (Vk+1 , Ek+1 טענה Tn :עפ"מ. הוכחה :נוכיח באינדוקציה על kכי Tkמוכל בעפ"מ .טענה זו ברורה ל .k = 1 22 נניח שהוכחנו זאת ל־ kויהא ) Tk ⊂ T = (V, Fעפ"מ .אם ek ∈ Fאזי .Tk+1 ⊂ T ∈ .ek אחרת / F יהא Cמעגל ב־ } F ∪ {ekותהא } f ∈ C − {ekכך ש־ ) .f ∈ E(Vk , V − Vkמבחירת ek נובע כי ) .w(f ) ≥ w(ek 0 0 יהא )} .T = (V, F − {f } ∪ {ekאזי Tע"פ המקיים 0 ) w(T ) = w(T ) − w(f ) + w(ek+1 ) ≤ w(T 0 ולכן Tעפ"מ המכיל את .Tk+1 ממוש של אלגוריתם PRIMע"י ערימות להלן ,ערימה תהיה עץ בינארי מאוזן עם משקלות ) w(xעל הקדקדים ,xכך ש }))w(x) ≤ min{w(lef t(x)), w(right(x אלגוריתם PRIM בכל שלב של האלגוריתם ,1 ≤ k ≤ nנחזיק עץ ) Tk = (Vk , Ek כאשר } ,Ek = {e1 , . . . , ek−1 } ,Vk = {v1 , . . . , vkוכן ,ערימה Hkשקדקדיה הם צלעות החתך ) (Vk , V − Vkהמסודרת לפי המשקלות של הצלעות בגרף המקורי. אתחולH1 ,V1 = {v1 } ,E1 = ∅ :־ ערימה על החתך ) .(v1 , V − v1 אטרציה :נתונים ) Tk = (Vk , Ekו־ Hkכנ"ל .נבחר את הצלע ),u ∈ Vk ,e = (u, v v ∈ V − Vkהנמצאת בשורש .Hk נגדיר .Vk+1 = Vk ∪ {vk+1 } ,Ek+1 = Ek ∪ {ek } ,ek = e ,vk+1 = v נעדכן את Hkל־ .Hk+1 בסוף התהליך ,Tnעפ"מ. סבוכיות: נחשב את סיבוכיות עדכון הערימה Hkלערימה .Hk+1 בעדכון זה משמיטים מ־ Hkאת כל הצלעות מהצורה xvk+1כאשר x ∈ Vkומוסיפים את כל הצלעות מהצורה vyכאשר .y ∈ V − Vk כל פעולה כזו ניתן לבצע ע"י Heapifyולכן עלותה ) O(log nהשוואות. מאחר שבצענו degvk+1השמטות /הוספות במעבר מ־ Hkל־ ,Hk+1הרי סיבוכיות הכוללת היא: X · O(log V )| degv) = O(|E| log |V v∈V 23 חיפוש רוחב )(BFS נתון :גרף מכוון ) G = (V, Eעל |V | = nקדקדים ,וקודקוד קבוע .u ∈ V מטרה :לסרוק את כל קודקודי Vהחל מ־ .u אלגוריתם חיפוש רוחב מייצר סידור של הקודקודים u = v1 , . . . , vnבאופן הבא :בכל שלב באלגוריתם יש שתי סדרות של קודקודים .S, R = Sסדרת קודקודים שכבר טופלו = R .סדרת קודקודים שעדיין בטיפול. נסמן ב־ ) Γ(vאת שכני הקדקד .v אתחול.S = ∅ , R ← (u) : איטרציה :יהא vהקודקוד השמאלי ב־ .Rאם קיים ) x ∈ Γ(v) − (S ∪ Rהוסף את xל־ Rמימין .אם ,Γ(v) ⊂ S ∪ Rהשמט את vמ־ Rוהוסף אותו מימין ל־ .Sכאשר ∅ = R סיים וסמן ) .S = (u = v1 , v2 , . . . , vn אלגוריתם BFSמאפשר חישוב פונקציות שונות על .G דוגמא :חישוב המרחק המינימלי ) d(u, xמקדקד קבוע uלקדקד כלשהוא : x ∈ V נגדיר פונקציות π : V → V ∪ {∅} , d∗ : V → R :ע"י אתחול , π(x) = ∅ ,d∗ (x) ≡ 0 :לכל . R ← (u = v1 ) ,S = ∅ .x ∈ V איטרציה :יהא vהקודקוד השמאלי ב־ Rויהא ) .x ∈ Γ(v) − (S ∪ Rנוסיף את xל־ R מימין ,נגדיר .π(x) = v ,d∗ (x) = d∗ (x) + 1 טענה :לכל x ∈ Vמתקיים ) d∗ (x) = d(u, xוגם . . . → π 2 (x) → π(x) → xהוא מסלול באורך מינימלי מ־ uל־ .x הטענה תנבע מהעובדות הבאות: )0 = d∗ (v1 ) ≤ d∗ (v2 ) ≤ . . . ≤ d∗ (vn ) (I הוכחה :נראה כי ) d∗ (vj ) ≤ d∗ (vj+1באינדוקציה על .j המקרה j = 1ברור .יהא .1 < j ≤ n − 1נניח כי vjהתגלה כשכן של viוכי 0 0 כשכן של .vi0אזי ,i ≤ iכי אם i < iאזי vj+1היה מופיע לפני .vj לכן לפי הנחת האינדוקציה ) d∗ (vi ) ≤ d∗ (vi0ולכן vj+1התגלה d∗ (vj ) = d∗ (vi ) + 1 ≤ d∗ (vi0 ) + 1 = d∗ (vj+1 ). )d∗ (vj ) ≥ d(u, vj ) (II ∀1 ≤ j ≤ n הוכחה :אינדוקציה על .jהמקרה j = 1ברור .יהא 1 < j ≤ nונניח כי vjהתגלה כשכן של .viאזי ) d(u, vj ) ≤ d(u, vi ) + 1 ≤ d∗ (vi ) + 1 = d∗ (vj הוכחת הטענה :לפי ) (IIדי להראות כי ) .d∗ (v) ≤ d(u, vנוכיח זאת באינדוקציה על ` = ) .d(u, vהמקרה ` = 0ברור .נניח עתה כי ` ≥ 1ויהא v = vjכך ש־ ` = ) .d(u, vj יהא Pמסלול קצר ביותר מ־ uל־ vjויהא vkהקודקוד הקודם ל־ vjבמסלול .נניח כי vj התגלה כשכן של .viאזי ,i ≤ kאחרת vjהיה מתגלה כשכן של .vkלכן ) d∗ (vi ) ≤ d∗ (vk ולכן d∗ (vj ) = d∗ (vi ) + 1 ≤ d∗ (vk ) + 1 = d(u, vk ) + 1 = d(u, vj ), 24 כאשר d∗ (vk ) + 1 = d(u, vk ) + 1נובע מהנחת האינדוקציה . דוגמא: a d e =G u c b בכל שלב באלגוריתם נסמן )) (d∗ (v), π(vמתחת לקודקוד vשהתגלה. e d c b )(1, u 00 )(1, u 00 00 00 00 00 00 00 00 )(2, a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 )(2, a )(2, a )(1, u )(1, u )∅ (0, )(2, a )(3, c )(3, c a u )∅ (0, S R ∅ u ∅ ua ∅ uab u ab u abc u abcd ua bcd uab cd uab cde uabcde ∅ סיבוכיות BFS כל קודקוד בודק את כל שכניו ולכן הסיבוכיות היא X (O(|V |) + O deg v) = O(|V | + |E|). vinV שימושים נוספים של :BFS בדיקת דו־צדדיות. אלגוריתם Dijkstraלמרחק המינימלי בגרף ממושקל יהא ) G = (V, Eגרף מכוון עם פונקציית משקל w : E → R+על הצלעות .אם הצלע ux אינה בגרף מגדירים ∞ = ) .w(u, xהפונקציה wמגדירה מטריקה הנתונה ע"י: X {d(u, v) = min P }.מסלול מכוון ב־ Gמ־ uל־: v e∈P בהינתן u ∈ Vברצוננו לחשב את ) d(u, vלכל .v ∈ Vאלגוריתם Dijkstraהפותר בעייה זו מבוסס על הרעיון הבא :מגדירים סדרה עולה של קבוצות {u} = S1 ⊂ . . . ⊂ Sn = Vוסדרת d1 ≥ . . . ≥ dnשל פונקציות על Vכך שלכל 1 ≤ k ≤ nולכל x ∈ Skמתקיים ).dk (x) = d(u, x אלגוריתם Dijkstra 25 ו־d1 (x) = w(u, x) ,S1 = {v1 = u} נגדירk = 1 ל־:אתחול u x= 6 u π1 (x) = ∅ x=u vk+1 ∈ πk : V → V ∪ {∅} ו־,dk : V → R+ ,Sk = {v1 , . . . , vk } בהינתן:איטרציה : כך שV − Sk dk (vk+1 ) = min{dk (x) : x ∈ V − Sk } ,Sk+1 = Sk ∪ {vk+1 } נגדיר dk+1 (x) = dk (x) min{dk (x), dk (vk+1 ) + w(vk+1 , x)} x ∈ Sk+1 x∈ / Sk x ∈ Sk+1 πk (x) πk (x) dk (x) ≤ dk (vk+1 ) + w(vk+1 , x), πk+1 (x) = vk+1 (x) dk (x) > dk (vk+1 ) + w(vk+1 , x), x∈ / Sk+1 x∈ / Sk+1 שכל קודקודיהם למעט האחרוןx ל־u את אוסף המסלולים המכוונים מ־Pk (x) נסמן ב־ בגרף נסמןP עבור מסלול כלשהו.Sk נמצאים ב־P ־x ־ דהיינו .w(P ) = e∈P w(e) Dijkstra משפט מתקיים1 ≤ k ≤ n לכל dk (x) = d(u, x) :x ∈ Sk ( לכלi) dk (x) = min{w(P ) : P ∈ Pk (x)} :x ∈ V ( לכלii) .k + 1 ונוכיח ל־1 ≤ k < n נניח ל־. ברורk = 1 המקרה.k אינדוקציה על:הוכחה אזיx ∈ Sk אם.x ∈ Sk+1 ( יהאi) dk+1 (x) = dk (x) = d(u, x) אזיx = vk+1 אם dk+1 (vk+1 ) = dk (vk+1 ) = min{w(P ) : P ∈ Pk (x)} ≥ d(u, vk+1 ) הקודקודy יהא.d(u, vk+1 ) = w(P ) כך ש־vk+1 ל־u מסלול מכוון מ־P יהא,מאידך .(y = vk+1 )ייתכן כיSk שאינו ב־P הראשון ב־ P0 y u 0 אזי.y ל־u קטע המסלול מ־P יהא 0 d(u, vk+1 ) = w(P ) ≥ w(P ) ≥ min{w(Q) : Q ∈ Pk (y)} = dk (y) ≥ dk (vk+1 ) vk+1 .d(u, vk+1 ) = dk (vk+1 ) = dk+1 (vk+1 ) לכן 26 אזיx ∈ Sk+1 אם.x ∈ V ( יהאii) (i) dk+1 (x) = d(u, x) ≤ min{w(P ) : P ∈ Pk+1 (x)} (I) (II) ≤ min{w(P ) : P ∈ Pk (x)} = dk (x) = dk+1 (x). .dk+1 (x) ( נובע מהגדרתII) ( נובע מהנחת האנדוקציה ו־I) כאשר שיויון .dk+1 (x) = min{w(P ) : P ∈ Pk+1 (x)} לכן .x ∈ V − Sk+1 נניח dk (x) = min{w(P ) : P ∈ Pk (x)} ≥ min{w(P ) : P ∈ Pk+1 (x)} dk (vk+1 ) + w(vk+1 , x) = min{w(P ) : P ∈ Pk (vk+1 )} + w(vk+1 , x) ≥ min{w(P ) : P ∈ Pk+1 (x)} .dk+1 (x) ≥ min{w(P ) : P ∈ Pk+1 (x)} ולכן אזיz ∈ Sk אם.x לפניP הקודקוד האחרון ב־z ויהאP ∈ Pk+1 (x) יהא:כיוון שני 0 0 d(u, z) = dk (z) = min{w(Q : Q ∈ Pk (z)} 0 0 .d(u, z) = w(Q ) כך ש־Q ∈ Pk (z) ולכן קיים 0 אזי.P = P − {zx} יהא 0 Q P 0 0 w(P ) ≥ w(Q ) x z u 0 ולכן 0 0 w(P ) = w(P ) + w(zx) ≥ w(Q ) + w(zx) ≥ dk (x) vk+1 0 ולכןP = P − {vk+1 x} ∈ Pk (vk+1 ) אזיz = vk+1 אם u w(P ) ≥ min{w(Q ) : Q ∈ Pk (vk+1 )} P הנחת האינדוקציה = dk (vk+1 ) vk+1 0 0 x 0 ולכן 0 w(P ) = w(P ) + w(vk+1 , x) ≥ dk (vk+1 ) + w(vk+1 , x) 27 לכן בכל מקרה )w(P ) ≥ min{dk (x), dk (vk+1 ) + w(vk+1 , x)} = dk+1 (x מסקנה :לכל x ∈ V )dn (x) = d(u, x ו־ . . . → πn2 (x) → πn (x) → xהוא מסלול מינימלי מ־ uל־ .x סיבוכיות אלגוריתם Dijkstra בכל איטרציה של האלגוריתם מעדכנים את dkו־ πkע"י )| O(|Vפעולות ,ולכן סה"כ הסיבוכיות היא ) .O(|V |2 דוגמא: 1 b a 10 9 6 3 4 u 2 5 c d u u u u u c u d d d d πk b u d c a a a u d d d d 2 d d 5 5 5 5 5 u ∅ ∅ ∅ ∅ ∅ c ∞ 7 7 7 7 dk b ∞ 14 13 9 9 a 10 8 8 8 8 u 0 0 0 0 0 למשל ,המסלול המינימלי מ־ uל־ bהוא u = π5 (d) → d = π5 (a) → a = π5 (b) → b אלגוריתם Floyd-Warshall ∈ )(i, j נתון :גרף מכוון ממושקל על ] .[nמשקל הצלע ) (i, jהוא .w(i, j) ∈ Rאם / E מגדירים ∞ = ) .w(i, jכמו כן w(i, i) = 0לכל .i מטרה :לחשב את } Pמסלול מכוון מ־ iל־d(i, j) = inf{w(P ) : j הערות: • אם לא קיים מסלול מכוון מ־ iל־ jאזי ∞ = ).d(i, j 28 .d(i, j) = −∞ המכיל מעגל שלילי אזיj ל־i • אם קיים מסלול מכוון מ־ .( באופן הבאDk (i, j))ni,j=1 מטריצה0 ≤ k ≤ n נגדיר לכל:FW אלגוריתם .D0 (i, j) = w(i, j) :אתחול נגדיר1 ≤ k ≤ n לכל:איטרציה Dk (i, j) = min{Dk−1 (i, j), Dk−1 (i, k) + Dk−1 (k, j)}. נסמן:ניתוח האלגוריתם Pk (i, j) = {P : P − {i, j} ⊂ {1, . . . , k} כך ש־j ל־i מסלול מכוון מ־P } Pek (i, j) = {P ∈ Pk (i, j) : לא מכיל מעגלים מכווניםP } αk (i, j) = min{w(P ) : P ∈ Pk (i, j)} α ek (i, j) = min{w(P ) : P ∈ Pek (i, j)} 1 ≤ k ≤ n לכל:טענה αk (i, j) ≤ min{αk−1 (i, j), αk−1 (i, k) + αk−1 (k, j)} (i) α ek (i, j) ≥ min{e αk−1 (i, j), α ek−1 (i, k) + α ek−1 (k, j)} (ii) 0 0 ויהיוαk−1 (i, j) = w(P ) כך ש־P ∈ Pk−1 (i, j) ( יהאi) :הוכחה 00 P ∈ Pk−1 (i, k) P 000 00 ∈ Pk−1 (k, j) כך ש־ 000 w(P ) = αk−1 (i, k) w(P ) = αk−1 (k, j). 0 00 ולכןP , P = P ∪ P 000 ∈ Pk (i, j) אזי 0 αk (i, j) ≤ min{w(P ), w(P )} = min{αk−1 (i, j), αk−1 (i, k) + αk−1 (k, j)}. אזיP ∈ Pek−1 (i, j) אם.w(P ) = α ek (i, j) כך ש־P ∈ Pek (i, j) ( יהאii) w(P ) ≥ α ek−1 (i, j) 00 0 0 00 ואזי.P ∈ Pek−1 (k, j) ,P ∈ Pek−1 (i, k) כאשרP = P ∪ P אחרת נסמן 0 00 α ek (i, j) = w(P ) = w(P ) + w(P ) ≥ α ek−1 (i, k) + α ek−1 (k, j). לכן α ek (i, j) ≥ min {e αk−1 (i, j), α ek−1 (i, k) + α ek−1 (k, j)} 29 מסקנה :לכל 0 ≤ k ≤ nמתקיים αk (i, j) ≤ Dk (i, j) ≤ α ek (i, j). מסקנה: Dk (i, j) = αk (i, j) = α ) (iאם אין מסלול מ־ iל־ jהכולל מעגל שלילי אזי )ek (i, j לכל 1 ≤ k ≤ nובפרט )d(i, j) = Dn (i, j ) (iiיש מסלול מ־ iל־ jהכולל מעגל שלילי ⇔ קיים 1 ≤ k ≤ nכך ש־ Dn (k, k) < 0 וכך ש־ Dn (i, k) + Dn (k, j) < ∞. הוכחה: ) (iאם אין מסלול הכולל מעגל שלילי מ־ iל־ jאזי המסלול המינימלי מ־ iל־ jהוא αn (i, j) = αולכן ) Dn (i, jשווה לשניהם. פשוט ולכן )en (i, j ) (iiנניח שיש מסלול Pמ־ iל־ jהכולל מעגל שלילי .אזי Pמכיל מעגל שלילי פשוט .C .Dn (k, k) ≤ αכמו כן ברור שיש מסלולים יהא kקודקוד ב־ .Cאזי en (k, k) < 0 פשוטים מ־ iל־ kומ־ kל־ jולכן ∞ < ).Dn (k, j), Dn (i, k להיפך נניח כי Dn (k, k) < 0ו־ ∞ < ) .Dn (i, k) + Dn (k, jאזי יש מסלולים 000 00 00 0 מכוונים ) P ∈ Pn (k, k) ,P ∈ Pn (i, kעבורן ,w(P ) < 0ו־ ).P ∈ Pn (k, j 0 00 000 לכן P = P ∪ P ∪ Pהוא המסלול הדרוש . סיבוכיות O(|V |3 ) :כי בכל אחד מ־ nהשלבים מעדכנים מטריצה .n × n חישוב המסלול הקצר ביותר נגדיר ∞ = ) w(i, jאו ∅ i = j = )π0 (i, j אחרת i )πk−1 (i, j) Dk (i, j) = Dk−1 (i, j = )πk (i, j )πk−1 (k, j) Dk (i, j) = Dk−1 (i, k) + Dk−1 (k, j המסלול הקצר ביותר מ־ iל־ jנתון ע"י i → · · · → πn (i, πn (i, j)) → πn (i, j) → j דוגמא: 30 a −2 4 5 b 4 3 c a 0 −2 ∞ b 4 0 3 c 5 4 0 0 D1 = −2 ∞ 4 0 3 0 D2 = −2 1 4 0 3 D0 = a b c a ∅ b ∅ b a ∅ c c a b ∅ 5 3 0 ∅ π1 = b ∅ a ∅ c a a ∅ 5 3 0 ∅ π2 = b b a ∅ c a a ∅ π0 = D3 = D2 a b c π3 = π2 :c ל־b מסלול מינימלי מ־ b = π3 (b, a) → a = π3 (b, c) → c. 31 חפוש עומק (Depth First Search) DFS קלט G = (V, E) :גרף מכוון. פלט :יער מכוון פורש Tשל .G משתני האלגוריתםt :־ זמן בדיד t = 1, 2, . . . } = color(v) ∈ {W, B, Gצבע הקדקד vבזמן נתון ,כאשר: vטרם התגלה W G vבטיפול = )color(v הסתיים הטיפול ב B v − ) = d(vזמן הגלוי של .v ) = f (vזמן הסגירה של .v ) = π(vאב של vביער ה־ T DFSשל .G נסמן }.Γ+ (u) = {v : uv ∈ E )DFS(G t=0 ∀u ∈ V π(u) = ∅ , color(u) = W ∀u ∈ V such that color(u) = W do DFS-visit(u). )DFS-visit(u color(u) ← G t←t+1 d(u) ← t ) )∀v ∈ Γ+ (u): If color(v) = W then (π(v) ← u , DFS-visit(v color(u) ← B t←t+1 f (u) ← t T uאם יש מסלול מכוון ב־ Gמ־ uל־ .vנסמן נסמן u → vאם (u, v) ∈ Eו־ v יש מסלול מכוון מ־ uל־ vביער ה־.T DFS מתיאור האלגוריתם נובע שהאנטרוולים ]) [d(u), f (uמקיימים תכונת הסוגריים :אם u 6= vאזי האנטרוולים ]) [d(v), f (v)] [d(u), f (uהינם זרים או שאחד מוכל באחר. v T d(u) < d(v) < f (v) < f (u) ⇔ u טענה :אם u → vאזי ).d(v) < f (u הוכחה :אם vטרם התגלה הרי שאי אפשר לסגור את .u הערה .d(w) < f (u) 6⇐ u → v → w :למשל, 32 אם 4/5 u v 2/9 1/10 3/6 7/8 w למת המסלול הלבן :אם u1 → u2 → · · · um אזי um T ו־) d(u1 ) < d(u2 ), . . . , d(um .u1 צלום הצבעים בזמן ) :d(u1 um−1 um u3 u1 u2 הוכחה :אנדוקציה על .mאם m = 2אזי ) f (u1 הנחה טענה ↓ ↓ ) d(u1 < ) d(u2 < ולכן לפי תכונת הסוגריים ) d(u1 ) < d(u2 ) < f (u2 ) < f (u1ו־ u2 יהא עתה .m > 2אזי ) f (u1 הנחת האנדוקציה ↓ ) f (um−1 < T .u1 הנחה טענה ↓ ↓ ) d(u1 < ) d(um < לכן לפי תכונת הסוגריים ) d(u1 ) < d(um ) < f (um ) < f (u1ולכן um למת המסלול השחור :אם u1 → u2 → · · · → um T .um ו־) f (u1 ), . . . , f (um−1 ) < f (umאזי u1 צלום הצבעים בזמן :f (um ) − 1 um um−1 u2 33 u1 T .u1 הוכחה :אם ) d(um ) < d(u1אזי לפי תכונת הסוגריים T ) d(um ) < d(u1 ) < f (u1 ) < f (umואזי u1 נניח בשלילה כי ) d(u1 ) < d(umויהא }) m − 1 ≥ i = max{j : d(uj ) ≤ d(u1אזי .um ) d(ui ) ≤ d(u1 ) < d(ui+1 ), . . . , d(um ולכן ,לפי למת המסלול הלבן um T uiולכן ) ,f (um ) < f (uiסתירה להנחה. דוגמא להרצת DFS 1/14 2/13 8/11 9/10 15/22 3/12 4/5 6/7 16/19 17/18 23/24 20/21 מיון טופולוגי יהא ) G = (V, Eגרף מכוון .מיון טופולוגי של Gהוא העתקה חח"ע ϕ : V → Nכך ש־ ϕ(u) < ϕ(v) ⇐ u → v טענה :קיים מיון טופולוגי ל־ Gאם"ם Gחסר מעגלים מכוונים. הוכחה :אם u1 → · · · → um → u1מעגל ב־ Gו־ ϕ : V → Nמיון טופולוגי אזי ) ϕ(u1 ) < · · · < ϕ(um ) < ϕ(u1סתירה. להיפך ,אם Gחסר מעגלים מכוונים אזי יש קדקד uכך ש־ ∅ = ).{v : (v, u) ∈ E} = Γ+ (u יהא Gהגרף המתקבל מ־ Gע"י השמטת .u לפי הנחת האנדוקציה יש ϕ0 : V 0 = V \ {u} → Nכך ש ϕ0מיון טופולוגי של .G0 נגדיר 1 v=u = )ϕ(v ϕ0 (v) + 1 v ∈ V 0 34 אזי ϕמיון טופולוגי של .G טענה :אם Gאציקלי אזי ) ϕ(u) = −f (uמיון טופולוגי של .G T הוכחה :נניח .u → vאם ) f (u) < f (vאזי ) d(v) < f (u) < f (vלפי הטענה ולכן u ולכן Gמכיל מעגל מכוון ,בסתירה להנחה. לכן ) f (u) > f (vולכן ).ϕ(u) < ϕ(v v קשירות חזקה .v uו־u יהא ) G = (V, Eגרף מכוון .נגדיר u ∼ vאם v ∼ הוא יחס שקילות .מחלקות השקילות של יחס זה נקראות רכיבי קשירות חזקה. טענה :נפעיל DFSעל Gונקבל את סדרת זמני הסגירה של הקדקדים .(f (u))u∈V יהא Gtהגרף המתקבל מ־ Gע"י הפוך כוון הצלעות. t נפעיל DFSעל Gtכאשר הקדקדים הנבחרים ב־) DFS(Gנלקחים לפי סדר יורד של .(f (u))u∈V אזי רכיבי היער Gtמתלכדים עם רכיבי הקשירות החזקה של .G הוכחה :יהיו )) (d(u), f (uזמני הפתיחה והסגירה של הקדקד u ∈ Vבהרצה הראשונה של ה־ ,DFSויהא T1יער ב־ DFSהמתקבל. יהא T2יער ה־ DFSהמתקבל לאחר הרצת DFSעל Gtבסדר יורד של ) .f (uיהיו V1 , . . . , Vmרכיבי הקשירות של T2עם שורשים v1 , . . . , vmלפי סדר קבלתם. עלינו להראות כי V1 , . . . , Vmהם רכיבי הקשירות החזקה של .Gראשית נראה כי Viקשיר חזק .די להראות כי לכל v ∈ Viיש מסלולים מכוונים מ־ vל־ viומ־ viל־ vב־.G T vב־.G עתה v ∈ Vi ,גורר כי vi 2 vב־ Gtולכן vi .vלפי בחירת סדר הקדקדים ב־ DFSהשני f (vi ) > f (u) ,לכל נעיין במסלול הנ"ל vi .vלכן מלמת המסלול u ∈ Viובפרט לכל הקדקדים u 6= viהנמצאים במסלול vi T viב־ .Gלכן Viקשיר חזק. השחור נובע כי vi 1 vובפרט v עתה נשים לב כי אם i < jאזי אין צלע ב־ Gtמ־ viל־ ,vjולכן ב־ Gאין צלע מ־ Vjל־ .Vi מכאן נובע כי ה־ Vi־ים הם רכיבי הקשירות החזקה של .G vm uj vi ··· Vm v1 ··· Vj Vi 35 TL V1 דוגמא: 2/5 1/10 11/16 12/15 3/4 6/9 8/9 13/14 7/8 7/10 1/6 3/4 15/16 12/13 11/14 2/5 זרימה ברשתות רשת זרימה היא גרף מכוון ) G = (V, Eעם זוג קדקדים מיוחדים שונים: sהנקרא מקור ) (sourceו־ tהנקרא בור ) ,(sinkופונקציה אי שלילית .c : E → R+ ) c(eנקרא הקבול ) (capacityשל הצלע .e לקדקד u ∈ Vנסמן } .T + (u) = {v : uv ∈ E} ,T − (u) = {w : wu ∈ Eלפונקציה f : E → Rולקדקד u ∈ Vנסמן X X = )f + (u = )f (uv) , f − (u )f (wu )w∈T − (u )v∈T + (u f : E → R+תקרא זרימה ) (flowברשת אם ) 0 ≤ f (e) ≤ c(eלכל ,e ∈ Eולכל }.f + (u) = f − (u) u ∈ V \ {s, t + ערך הזרימה fמוגדר ע"י ).val(f ) = f (s) − f − (s דוגמא G :מתאר מערכת כבישים חד־סטריים מ־ sל־.t קבול כל צלע ,דהיינו קטע כביש ,הינו מספר הרכבים לשעה שקטע זה יכול לשאת )זו פונקציה של רוחב קטע הכביש ,איכותו וכול'( .המטרה היא למצוא את מקסימום המכוניות לשעה שאפשר להעביר מ־ sל־ .t לקבוצת קדקדים לאו דווקא זרות A, B ⊂ Vנגדיר X = )f (A, B )f (ab (a,b)∈A×B∩E 36 לקבוצת קדקדים S ⊂ Vנסמן .S¯ = V \ Sחתך s − tהיא חלוקה ¯ ) (S, Sכך ש ,s ∈ S ¯.t ∈ S טענה :לכל זרימה fולכל חתך ¯ s − t ) (S, Sמתקיים ¯ − f (S, )¯ S )val(f ) = f (S, S הוכחה: = )f + (u) − f − (u) = f (S, V ) − f (V, S X = )val(f ) = f + (s) − f − (s u∈S ¯ − f (S, S) + f (S, )¯ S) = f (S, S ¯ − f (S, )¯ S )= f (S, S) + f (S, S לחתך ¯ s − t ) (S, Sנגדיר את קבול החתך ע"י X = ¯ )cap(S, S )c(uv ¯ uv∈S×S∩E דואליות חלשה :לכל זרימת fוחתך ¯ s − t ) (S, Sמתקיים ¯ )val(f ) ≤ cap(S, S הוכחה: ¯ − f (S, )¯ S) ≤ f (S, S = ¯ )val(f ) = f (S, S ¯ )c(uv) = cap(S, S X ≤ )f (uv ¯ uv∈S×S∩E X = ¯ uv∈S×S∩E יהיו .u, v ∈ V אוסף סדור של צלעות ) (e1 , . . . , emיקרא מסלול ) u − vלא מכוון( אם קיימת סדרת קדקדים שונים u = v0 , v1 , . . . , vm = vכך שלכל 1 ≤ i ≤ m או ei = vi−1 viאו .ei = vi vi−1 אם ei = vi−1 viנאמר ש־ eiבכוון המסלול, ואם ei = vi vi−1נאמר ש־ eiנגד כוון המסלול. בהנתן מסלול Pוזרימה fנגדיר את העודף של fעל צלע ei ∈ Pע"י c(ei ) − f (ei ) ei = vi−1 vi = ) εf,P (ei ) f (ei ei = vi vi−1 העודף של fעל Pיוגדר כ־ ) εf,P = min εf,P (ei 1≤i≤m טענה :אם Pמסלול ) s − tכלומר (v0 = s ,vm = tאזי קיימת זרימה ˜ fהמקיימת .val(f˜) = val(f ) + εf,P 37 הוכחה :נגדיר e 6∈ P e = vi−1 vi e = vi vi−1 )f (e f (e) + εf,P = )f˜(e f (e) − εf,P מתקיים כי ).0 ≤ f˜(e) ≤ c(e כמוכן ) f˜+ (u) = f˜− (uלכל .u 6= s, t דוגמא :זרימה נוכחית: t 3/6 4/7 6/9 6/10 6/8 3 3 6 s 4 3 )εf,P (e εf,P = min εf,P (e) = 3 e∈P זרימה מעודכנת: t 7/7 9/9 0/6 3/8 9/10 s התוצאנ הבסיסית בנושא זרימות ברשתות היא האפיון הבא של הזרימה המקסימלית שהוכח ע"י .Ford-Fulkenson משפט הזרימה המקסימלית והחתך המינימלי (MFMC) Max Flow Min Cut ) (S, Sחתך )¯ : (s, t ¯ ) f } = min cap(S, Sזרימה ברשת max {val(f ) : הוכחה :הראינו כי ¯ )max val(f ) ≤ min cap(S, S ¯ )(S,S f לכן ,כדי להשלים את ההוכחה יש להראות שקיימת זרימה fוקיים חתך ¯ s − t ) (S, Sכך ש־ ¯ ) .val(f ) = Cap(S, Sתהא fזרימה ברשת עם ערך ) val(fמקסימלי .נסמן קיים מסלול u ∈ V : P s − u =S כך ש־ εf,P > 0 מהטענה נובע כי ,t 6∈ S¯ ,s ∈ Sאחרת אפשר היה לקבל זרימה ˜ fעם ערך גדול יותר. טענה: ) (iאם uv ∈ S × S¯ ∩ Eאזי )f (uv) = c(uv 38 ) (iiאם vu ∈ S¯ × S ∩ Eאזי f (vu) = 0 הוכחה: ) (iיהא Pמסלול s − uכך ש־ εf,P > 0 נגדיר } P 0 = P ∪ {uvאזי P 0מסלול s − vומתקיים })εf,P 0 = min{εf,P , c(uv) − f (uv מאידך εf,P 0 = 0כי v 6∈ Sולכן ).c(uv) = f (uv ) (iiיהא Pמסלול s − uכך ש־ .εf,P > 0נגדיר } P 00 = P ∪ {vuאזי P 00מסלול s − v ומתקיים })εf,P 00 = min{εf,P , f (vu מאידך εf,P 00 = 0כי v 6∈ Sולכן f (vu) = 0 מהטענה נובע כי = )f (vu X f (uv) − ¯ vu∈S×S∩E X ¯ − f (S, = )¯ S )val(f ) = f (S, S ¯ uv∈S×S∩E ¯ )c(uv) = cap(S, S X = ¯ uv∈S×S∩E הוכחת משפט MCMFמראה גם את התוצאה הבאה: משפט :אם כל הקבולים ברשת טבעיים אזי יש זרימה מקסימלית שלמה ,fכלומר f (e) ∈ N לכל .e ∈ E הוכחה :תהא fזרימה מקסימלית בין כל הזרימות השלמות. אם Pמסלול ,s − tאזי εf,P ∈ Nולכן בגלל המקסימליות של ) val(fנובע כי εf,P = 0 ולפיכך החתך ¯ ) (S, Sשהוגדר בהוכחת משפט MCMFמקיים ¯ ) val(f ) = Cap(S.Sולכן fזרימה מקסימלית ברשת. אלגוריתם למציאת זרימה מקסימלית ברשת נגדיר .f1 = 0נניח שהגדרנו זרימות .f1 , . . . , fkאם קיים מסלול P s − tהמקיים εfk ,P > 0אזי נגדיל את fkלאורך המסלול Pלזרימה fk+1 = f˜kכמתואר בטענה. אם אין Pכנ"ל אזי fkזרימה מקסימלית. דוגמא: 39 s 4/4 0/4 t 1/1 1/6 5/5 2/3 0/1 5/5 3/5 2/3 2/2 εf,P = min{5, 2, 5, 4} = 2 s 4/4 2/4 t 1/1 3/6 0/1 3/5 0/3 3/5 2/3 2/2 40 5/5 הערות: .1האלגוריתם הנ"ל מתכנס לזרימה מקסימלית )שלמה( אם כל הקבולים שלמים מאחר וכל צעד באלגוריתם מגדיל את הזרימה בלפחות אחד. שיקול דומה מראה שהאלגוריתם מתכנס לזרימה מקסימלית אם כל הקבולים רציונליים. אך גם במקרים אלה ,מספר האטרציות יכול להיות מעריכי בגודל הקלט ,למשל ,סדרת ההרחבות 2/m 1/m 1/1 , ... 1/m 1/m , 1/m 2/m 0/m 1/m 0/m 1/1 , 1/m 1/m 0/m 0/m 0/1 t, 0/m 1/m s 0/m 0/m מגיעה לזרימה מקסימלית אחרי 2mצעדים. מאידך גודל הקלט בביטים הוא ).O(log m .2אם הקבולים אינם רציונלים ,האלגוריתם הנ"ל אינו בהכרח מתכנס. אלגוריתם יעיל לבעיית הזרימה תהא ) G = (V, Eרשת זרימה עם פונקציות קבול ,c : E → R+ ← − ותהא fזרימה על .Gלכל צלע e = uv ∈ Eנתאים שתי צלעות חדשות ) e = vuגם אם הצלע vuהופיעה אף היא ב־.(G נגדיר גרף מכוון ) Gf = (V, Efכאשר − ←{ ∪ })Ef = {~e ∈ E : f (e) < c(e }e : e ∈ E , f (e) > 0 מסלול P s − tיקרא f־לא רווי אם .εf,P > 0 טענה :קיים מסלול f s − t־לא רווי ⇔ קיים ב־ Gfמסלול מכוון מ־ sל־.t הוכחה :יהא s = v0 , v1 , . . . , vm = tמסלול f־לא רווי עם צלעות e1 , . . . , emכאשר ei = vi−1 viאו .ei = vi vi−1 נגדיר עתה צלעות ) g1 , . . . gm ∈ E(Gfע"י ~ei ei = vi−1 vi = gi ← e−i ei = vi vi−1 ברור כי הצלעות g1 , . . . , gmהן מסלול מכוון מ־ sל־ tב־ .Gf כוון שני דומה. אלגוריתם : Edmonds-Karp אתחולf1 = 0 : אטרציה :בהנתן fkבנה את הגרף המכוון .Gfk חפש מסלול מכוון מאורך מינימלי בין sל־ tע"י .BFS 41 אם אין מסלול כזה ,סיים f = fk .היא זרימה מקסימלית ברשת. אחרת ,יהא g1 , . . . , gmמסלול מינימלי מכוון ב־ Gfkמ־ sל־.t − ← = .gi יהיו ) e1 , . . . , em ∈ E(Gכך שלכל gi = e~i iאו e i } P = {e1 , . . . , emהוא מסלול fkלא־רווי. נגדיר זרימה חדשה fk+1על Gע"י } e 6∈ {e1 , . . . , em ) fk (e fk (ei ) + εfk ,P gi = e~i = )fk+1 (e − ← = gi ei fk (ei ) − εfk ,P אנו נראה כי אלגוריתם EKמסתיים אחרי )| O(|V ||Eאטרציות. לגרף מכוון ) H = (V, Eנגדיר − d+ G (u) = |{v : uv ∈ E}| , dG (u) = |{w : wu ∈ E}| ∀u ∈ V טענה :יהיו s 6= tקדקדים ב־ Hכך ש: − d+ G (s) − dG (s) = k > 0 − d+לכל u 6= s, t )G (u) = dG (u ו־ אזי קיימים ב־ k Hמסלולים מכוונים זרים בצלעות מ־ sל־.t הוכחה :אנדוקציה על .kבלי הגבלת הכלליות Hאינו מכיל מעגלים מכוונים ,כי השמטת מעגל מכוון אינה משנה את תנאי הדרגה במשפט. d+הרי שיש צלע .E 3 v0 v1 ,מאחר ו־ נגדיר ,v0 = sמאחר ו־G (v0 ) ≥ k > 0 d+ (v1 ) = d− (v1 ) ≥ 1הרי שיש צלע .E 3 v1 v2נמשיך באופן זה לבנות מסילה מכוונת Pkשבהכרח תגיע לקדקד .t 0 d+ נשמיט את המסילה המכוונת Pkמ־ sל־ .tהגרף החדש ) G = (V, E − Pמקיים G0 (s) − − − .∀u 6= s, t d+ dG0 (s) = k − 1ו )G0 (u) = dG0 (u לכן לפי הנחת האנדוקציה מכיל k − 1מסלולים מכוונים ,P1 , . . . , Pk−1 ,זרים בצלעות מ־s ל־.t המסילות P1 , . . . , Pkמקיימות את הדרוש. משפט Edmonds- Karp יהיו f1 , f2 , . . .הזרימות המתקבלות כך ש־ fk+1מתקבלת מ־ fkע"י הגדלת הזרימה fkעל המסלול Pkב־ .Gfkאזי )|E(Pk )| ≤ |E(Pk+1 )| (i − ← אזי ) (iiאם k < lו־ Pl , Pkמכילים צלעות נגדיות e , ~e |) |E(Pk )| + 2 ≤ |E(Pl ) (iiiאלגוריתם Ekמסתיים אחרי ≥ )| O(|V ||Eאטרציות. 42 הוכחה (i) :נגדיר גרף מכוון (V, E(H)) = Hע"י [ − − E(H) = E(Pk ) ∪ E(Pk+1 ) − →{ ←e , }e → − ← − ) { e , e }⊂E(Pk )∪E(Pk+1 טענהE(H) ⊂ E(Gfk ) : הוכחה :ברור כי ) .E(Pk ) ⊂ E(Gfkתהא ) .g ∈ E(Pk+1 ) − E(Gfk אזי או ש־ g = ~eכאשר e ∈ Eואזי ).fk+1 (e) < c(e) , fk (e) = c(e − ← = gכאשר e ∈ Eואזי .fk+1 (e) > 0 , fk (e) = 0 או ש־ e − ← , במקרה הראשון נובע כי ) e ∈ E(Pk ובמקרה השני נובע כי ) .~e ∈ E(Pk − ← ,E(H) 63 e,ולכן .E(H) 63 g בכל מקרה הזוג e − + − d+לכל u 6= s, tולכן לפי טענה הגרף Hמקיים dH (s) − dH (s) = 2ו־ )H (u) = dH (u קודמת H ,מכיל שני מסלולים זרים בקשתות Q1 , Q2מ־ sל־.t E(Gfk ) ⊃ Q1 , Q2לכן ממינימליות |) |E(Pkנובע כי |) i = 1, 2 |E(Pk )| ≤ |E(Qiולכן |) 2|E(Pk )| ≤ |E(Q1 )| + |E(Q2 )| ≤ |E(Pk )| + |E(Pk+1 ולכן |) .|E(Pk )| ≤ |E(Pk+1 − ← e,אזי ) (iiנשים לב כי מהוכחת ) (iנובע כי אם Pk , Pk+1מכילים צלעות נגדיות e 2|E(Pk )| ≤ |E(Q1 )| + |E(Q2 )| ≤ |E(Pk )| + |E(Pk+1 )| − 2 ולכן |) .|E(Pk )| + 2 ≤ |E(Pk+1זה מוכיח את המקרה .l = k + 1המקרה הכללי מוכח באינדוקציה על .l − k ובאופן דומה :אם קיים k < i < lכך ש־ Pk , Piמכילים צלעות נגדיות אזי לפי הנחת האנדוקציה וסעיף ):(i |) |E(Pk )| + 2 ≤ |E(Pi )| ≤ |E(Pl אחרת Pk , Piאינם מכילים צלעות נגדיות ל .k < i < l נגדיר עתה )) H = (V, E(Hע"י [ − E(H) = E(Pk ) ∪ E(Pl ) − ← {e, }e ← − ) {e, e }⊂E(Pk )∪E(Pl ונמשיך כבסעיף ).(i ) (iiiבהנתן זרימה fומסלול s − tלא רווי Pכך ש εf,P = max εf,P (e) > 0 e∈P נאמר כי P 3 eהיא צואר בקבוק ל־ fאם ).εf,P = εf,P (e נעיין בסדרת הזרימות f1 , f2 , . . . , fmובסדרת מסלולי ההרחבה .P1 , P2 , . . . , Pm ברור כי כל Pkמכיל צלע שהיא צואר בקבוק ל־ .fk 43 → ← − − תהא ,g ∈ E ∪ Eונניח כי gהוא צואר בקבוק במסילות Pi1 , Pi2 , . . . , Pir ,i1 < · · · < irאזי בהכרח קיימים i1 < j1 < i2 < j2 < i3 < · · · < ir−1 < jr−1 < ir כך שהצלע ההפוכה ל־ gמופיעה ב־ .1 ≤ l ≤ r − 1 Pjlלכן לפי )(ii | |Pil | + 4 ≤ |Pjl | + 2 ≤ |Pil+1 ולכן )|V | − 1 ≥ |Pir | ≥ |Pi1 | + 4(r − 1 ולכן |V | − 1 +1≥r 4 ולכן |V | − 1 )|+ 1 · 2|E| = O(|V ||E 4 ≤m שמושים של משפט הזרימה המקסימלית והחתך המינימלי בעייה :נתונות nקבוצות כדורגל .1, . . . , nקבוצות i, jמשחקות ביניהן aijמשחקים .כל קבוצה מקבלת נקודה אחת על כל ניצחון ואפס על כל הפסד .האם יש מהלך משחקים שבסופו כל קבוצה iתצבור ≥ biנקודות? פתרון :נגדיר רשת ) G = (V, Eעם }V = {s} ∪ {ui }ni=1 ∪ {vij }ni6=j=1 ∪ {t E = {sui }ni=1 ∪ {ui vij }i6=j ∪ {vij t}ij וקבולים c(sui ) = bi , c(ui vij ) = ∞ , c(vij t) = aij קבוצה iתצבור ≥ biנקודות לכל 1 ≤ i ≤ nאם ורק אם טענה :יש מהלך משחקים שבו P יש ברשת זרימה fשערכה . aij ij הוכחה :נניח כי יש מהלך משחקים כנ"ל ונגדיר ) = f (suiמספר נצחונות של קבוצה ,i Pעל קבוצה ,jו־ .f (vij t) = aij ) = f (ui vijמספר נצחונות של קבוצה i ברור כי fהיא זרימה ב־ Gשערכה . aijהכוון ההפוך דומה. ij 44 u1 b1 v12 ui bi ∞ s aij uj bn vij un vn−1,n K ⊂ [n] קיים מהלך משחקים כנ"ל אם ורק אם לכל:מסקנה X X aij ≤ bi (∗) K 2 ij∈ i∈K אזיj ניצח אתi את מספר המשחקים בהםθ(i, j) נסמן ב־: הכרחיות:הוכחה X X aij = [θ(i, j) + θ(j, i)] = ij∈ K 2 {ij}∈ K 2 X X X = θ(i, j) ≤ bi i∈K i∈K j∈K j 6= i ¯ יהא. נניח כי )∗( מתקיים:מספיקות ברשתs, t ( חתךS, S) S = {s} ∪ {ui : i ∈ I} ∪ {vrs : {r, s} ∈ P} [n] S¯ = {t} ∪ {ui ; [n] − I} ∪ {vrs ; {r, s} ∈ − P} 2 ¯ = ∞ כלשהוא אזיj { עבורi, j} 6∈ P כך ש־i ∈ I אם קיים .c(S, S) [n] I¯ .P ⊃ − אחרת 2 2 לכן X X X ¯ ≥ Cap(S, S) bi + aij ≥ aij ij i6∈I [n] I¯ ij∈ − 2 2 כי X ij∈ I¯ 2 aij ≤ X i∈I¯ 45 bi כיסויים וזווגים בגרפים דו־צדדיים יהא ) G = (V, Eגרף פשוט לא מכוון כלשהוא. M ⊂ Eנקראת זווג ) (matchingאם ∅ = e1 ∩ e2לכל .e1 6= e2 ∈ M S ⊂ Vקראת כסוי ) (coverאם ∅ = S ∩ e 6לכל .e ∈ E נסמן } M ⊂ Eזווג ν(G) = max{|M | : } S ⊂ Vכיסוי τ (G) = min{|S| : ברור כי ) ν(G) ≤ τ (Gאך לא תמיד יש שיויון .למשל jnk = ) ν(Kn , τ (Kn ) = n − 1 2 משפט :K¨onigאם ) G = (V = A ∪ B, Eדו צדדי אזי )ν(G) = τ (G הוכחה :נגדיר רשת ) H = (V 0 , E 0על ידי }V 0 = {s} ∪ V ∪ {t E 0 = {sa}a∈A ∪ E ∪ {bt}b∈B וקבולים c(e0 ) ≡ 1לכל .e0 ∈ E 0 טענה (i) :לכל זרימה שלמה fב־ Hמתקיים ).val(f ) ≤ ν(G ) (S, Sב־ Hמתקיים ¯ ) (iiלכל חתך ¯ s − t ).τ (G) ≤ Cap(S, S הוכחה (i) :אם fזרימה שלמה ב־ Hאזי } M = {ab ∈ E : f (ab) = 1הוא זווג שגודלו = |}|H| = |{ab ∈ E : f (ab) = 1 ) f (ab) = f ({s} ∪ A, B ∪ {t}) = val(f X ab∈A×B∩E לכן )val(f ) ≤ ν(G 46 = B ¯S t )A A0 B 0 s S oA n 1 B1 S = {s} ∪ A0 ∪ B0 יהא ¯ ) (S, Sחתך הנתון ע"י S¯ = {t} ∪ A1 ∪ B1 | ¯ = |A1 | + e(A0 , B1 ) + |B0 )Cap(S, S נבחר מכל צלע ב־) E(A0 , B1קדקד ותהא Cהקבוצה המתקבלת .ברור כי A1 ∪ C ∪ B0 כיסוי של Gשגודלו ¯ ) .Cap(S, Sלכן )¯ ≥ τ (G )Cap(S, S תהא עתה fזרימה שלמה מקסימלית ויהא ¯ ) (S, Sחתך מינימלי אזי )¯ ≥ τ (G )ν(G) ≥ val(f ) = Cap(S, S ולפיכך ).ν(G) = τ (G יהא ) G = (A ∪ B, Eגרף דו־צדדי .ל־ I ⊂ Aנסמן }Γ(I) = {b ∈ B : ∃a ∈ A , (a, b) ∈ E משפט :Hallאם | |Γ(I)| ≥ |Iלכל I ⊂ Aאזי Gמכיל זווג המכסה את כל קדקדי .A B0 הוכחה :תהא S ⊂ A ∪ Bהמכסה את כל צלעות .G .A0 = A ∩ S ,B0 = B ∩ S A1 A0 נסמן ,A1 = A − A0אזי Γ(A1 ) ⊂ B0ולכן | |A| − |A0 | = |A1 | ≤ |Γ(A1 )| ≤ |B0 ולכן | .|A| ≤ |A0 | + |B0 | = |Sלכן לפי משפט K¨onigיש זווג בגודל |.|A 47 B A קשירות צלעית בגרפים מכוונים יהא ) G = (V, Eגרף מכוון ויהיו s, tקדקדים שונים ב־ .Vנגדיר מספר מקסימלי של מסלולים מכוונים זרים בקשתות מ־ sל־ λG (s, t) = t מספר מינימלי של קשתות ב־ Eשהשמטתן מנתקת את sמ־kG (s, t) = t משפט λG (s, t) = kG (s, t) :Menger הוכחה :ברור כי ).λG (s, t) ≤ kG (s, t כוון שני :נתייחס ל־ Gכרשת כשכל הקבולים שווים ל־.1 טענה (i) :לכל זרימה שלמה fב־ Gמתקיים ).val(f ) ≤ λG (s, t ) (S, Sב־ Gמתקיים )¯ ≥ kG (s, t ) (iiלכל חתך ¯ s − t ).Cap(S, S הוכחה (i) :תהא fזרימה שלמה ב־ .Gנגדיר } E 0 = {e ∈ E : f (e) = 1אזי הגרף ) G0 = (V, E 0מקיים ) d+ (u) = d− (uלכל u 6= s, tו־) .d+ (s) − d− (s) = val(f לכן ,לפי טענה שהוכחנו בשעור הקודם G ,מכיל ) val(fמסלולים זרים בקשתות מ־ sל־,t ולכן ) .λG (s, t) ≥ val(f ) (iiיהא ¯ ) (S, Sחתך s − tב־ .Gאזי ברור כי S × S¯ ∩ Eהיא קבוצת צלעות הפוגשת כל מסלול מכוון מ־ sל־.t לכן ¯ )kG (s, t) ≤ |S × S¯ ∩ E| = Cap(S, S תהא עתה fזרימה שלמה מקסימלית ¯ ו־) (S, Sחתך מינימלי אזי ) ¯ = val(f )val(f ) ≤ λG (s, t) ≤ kG (s, t) ≤ Cap(S, S ולכן )λG (s, t) = kG (s, t צירקולציות יהא ) G = (V, Eגרף מכוון ופונקציות α, β : E → Rכך שלכל e ∈ E )α(e) ≤ β(e צירקולציה ב־ Gהיא העתקה g : E → Rהמקיימת ) g + (u) = g − (u) (iלכל u ∈ V 48 )α(e) ≤ g(e) ≤ β(e) (ii נגדיר רשת חדשה ) H = (V 0 , E 0 V 0 = {s, t} ∪ V } E 0 = E ∪ {su : u ∈ V } ∪ {ut : u ∈ V עם קבולים β(e) − α(e) e = uv ∈ E )α(V, u e = su = )c(e ) α(u, V e = ut P P = ) α(u, V = )α(uv) , α(V, u כאשר כמקודם )α(vu v∈V v∈V טענה :קיימת צירקולציה ב־ Gאם ורק אם קיימת זרימה ב־ Hשערכה ) .α(V, V הוכחה :תהא g : E → Rצירקולציה .נגדיר f : E 0 → Rעל ידי g(e) − α(e) e = uv ∈ E )α(V, u )e = (su = )f (e ) α(u, V )e = (ut אזי לכל u 6= s, t )f + (u) = [g + (u) − α+ (u)] + α+ (u) = g + (u )f − (u) = [g − (u) − α− (u)] + α− (u) = g − (u לכן fזרימה וערכה הוא ) val(f ) = f (s, V ) = α(V, V להיפך ,נניח fזרימה ב־ Hשערכה הוא ) .α(V, V אזי ) f (su) = α(V, uו־) f (ut) = α(u, Vלכל .u ∈ V ).g(uv) = f (uv) + α(uv נגדיר לכל uv ∈ E ברור כי ) α(e) ≤ g(e) ≤ β(eלכל .e ∈ E )g + (u) = f (u, V ) + α(u, V ) = f + (u) = f − (u) = f (V, u) + α(V, u) = g − (u הערה :אלגוריתם EKוהטענה דלעיל נותנים אלגוריתם יעיל למציאת צירקולציה ב־ Gאם יש כזו. משפט ) :(Hoffmanקיימת צירקולציה ב־ ⇔ Gלכל חתך ¯ )(S, S ¯ ≤ β(S, )¯ S )α(S, S הוכחה :אם fצירקולציה ב־ Gאזי לכל חתך ¯ )(S, S )¯ ≤ f (S, S ¯ = f (S, ¯ S) ≤ β(S, )¯ S )α(S, S 49 ¯ לכל חתךα(S, S) ¯ ≤ β(S, ¯ S) לפי הטענה די להראות כי אם:כוון שני אזי ישG ( ב־S, S) .α(V, V ) זרימה שערכהHב־ ¯ ( מתקייםs ∪ S, t ∪ S) H( ב־s, t) די להראות כי לכל חתךMCMF לפי משפט ואכןCap(s ∪ S, S¯ ∪ t) ≥ α(v, V ) ¯ + β(S, S) ¯ − α(S, S) ¯ + α(S, V ) Cap(s ∪ S, S¯ ∪ t) = α(V, S) ¯ − α(S, ¯ S) + α(S, ¯ S) − α(S, S) ¯ + α(S, V ) = α(V, V ) − α(V, S) + β(S, S) ¯ ¯ ¯ ¯ ≥ α(V, V ) − α(S, S) − α(S, S) + α(S, S) − α(S, S) + α(S, S) + α(S, S) = α(V, V ) s S¯ S 50 t אלגוריתם אריתמטיים והצפנה צבורית תזכורת מאריתמטיקה: = Zחוג השלמים .מסמנים a|bאם aמחלק את ,bדהיינו אם קיים q ∈ Zכך ש־ .qa = b חלוק עם שארית :ל־ a, b ∈ Zו־ a > 0קיימת הצגה יחידה b = qa + rכאשר q ∈ Z q, r .0 ≤ r < aנתונים על ידי b b , r =b− ·a =q a a המחלק המשותף המקסימלי של a, b }qcd(a, b) = max{d > 0 : d|a, b טענה :אם b = qa + rאזי )gcd(a, b) = gcd(r, a דוגמא: gcd(57, 72) = gcd(15, 57) = gcd(12, 15) = gcd(3, 12) = gcd(0, 3) = 3 אלגוריתם אוקלידס למציאת gcd יהיו .(a, b) 6= (0, 0) b ≥ a ≥ 0 נגדיר .c1 = b , c2 = aנניח שהגדרנו .k ≥ 2 c1 , . . . , ck אם ck = 0אזי .gcd(a, b) = ck−1אחרת נחלק עם שארית < ak ,qk ck + ck+1ונקבל על ידי זה את .ck+1 ck−1 = 0 ≤ ak+1 סבוכיות אלגוריתם אוקלידס ∞} {fkסדרת פיבונצ'י: תהא k=0 k≥2 תזכורת: f0 = 0 , f1 = 1 , fk = fk−1 + fk−2 √ !k 1− 5 2 √ !k 1 1+ 5 √ = fk − 2 5 נסמן ב־ ) E(a, bאת מספר האטרציות )חלוקות עם שארית( שמבצע אלגוריתם אוקלידס על הזוג ).(a, b טענה :לכל k ≥ 0 E(fk , fk+1 ) = k הוכחה :אינדוקציה על k = 0 :kברור .יהא k > 0אזי E(fk , fk+1 ) = 1 + E(fk+1 − fk , fk ) = 1 + E(fk−1 , fk ) = 1 + (k − 1) = k 51 טענה :יהא .k ≥ 1אם fk ≥ bאו fk−1 ≥ aאזי .E(a, b) ≤ k הוכחה :אינדוקציה על :kהמקרה k = 1ברור .נניח .k ≥ 2 נחלק עם שארית 0 ≤ r < a b = qa + r אם a ≤ fk−1אזי אינדוקציה ↓ )E(a, b) = 1 + E(r, a ≤ 1 + (k − 1) = k אחרת a ≤ fk−1 , fk ≥ bואזי r ≤ b − a ≤ fk − fk−1 = fk−2 ושוב לפי הנחת האנדוקציה E(a, b) = 1 + E(r, a) ≤ 1 + (k − 1) = k טענה :לכל (0, 0) 6= (a, b) ∈ Z2קיימים x, y ∈ Zכך ש־ gcd(a, b) = x · a + y · b הוכחה :בלי הגבלת הכלליות .b ≥ a ≥ 0נוכיח את הטענה באינדוקציה על .aאם a = 0 אזי .gcd(0, b) = b = 0 · a + 1 · b נניח .a > 0נחלק עם שארית .0 ≤ r < a b = ab · a + r לפי הנחת האינדוקציה קיימים x0 , y 0 ∈ Zכך ש gcd(r, a) = x0 · r + y 0 · a ואזי b 0 gcd(a, b) = gcd(r, a) = x · r + y · a = x b − ·a +y ·a a b y 0 − x0 · a + x0 · b a b ,(x, y) = y 0 − x0אזי .gcd(a, b) = x · a + y · b נסמן , x0 a 0 0 52 0 דוגמא(a, b) = (21, 111) : y x b a b a −3 1 0 1 16 −3 1 0 5 3 2 − 111 21 6 3 21 6 3 0 יהא } Zn = Z/nZ = {0, 1, . . . , n − 1חוג השאריות מודולו ,n ותהא } Z∗n = {a ∈ Zn : gcd(a, n) = 1החבורה הכפלית של האיברים ההפיכים ב־ .Zn חישוב ההפכי ב־ Z∗nמתבצע באופן הבא :יהא a ∈ Z∗nאזי קיימים (x, y) ∈ Z2כך ש־ x · a + y · n = gcd(a, n) = 1ולכן ).a−1 ≡ x(mod n משפט השארית הסיני יהיו n1 , . . . , nkזרים בזוגות אזי ההעתקה F : Zn1 ...nk → Zn1 ⊕ · · · ⊕ Znk הנתונה ע"י )) F (x) = (x(mod n1 ), . . . , x(mod nk היא איזימורפיזם של חוגים. הוכחה :ברור כי Fהיא הומומורפיזם של חוגים. ההעתקה Fחח"ע :אם ) F (x) = F (yאזי ) x(mod ni ) = y(mod niכלומר ni |y − x לכל 1 ≤ i ≤ kולכן ,n1 · · · nk |y − xכלומר ) .x ≡ y(mod n1 · · · nk העובדה כי ההעתקה Fהיא על נובעת מחח"ע Fומכך ש ־ | |Zn1 ···nk | = n1 · · · nk = |Zn1 × · · · × Zn1 גרסא אלגוריתמית למשפט השאריות הסיני. כמקודם יהיו n1 , . . . , nkזרים בזוגות לכל 1 ≤ i ≤ k nj ∈ Z∗ni Y ולכן קיים αi ∈ Z∗ni j6=i כך ש־ Y ) nj αi ≡ 1(mod ni j6=i .1 ≤ i ≤ k ai ∈ Zאזי טענה :יהיו ni k X Y = xמקיים ) ` x ≡ a` (mod nלכל .1 ≤ ` ≤ k ai nj αi j6=i i−1 הוכחה: ! ) `αi (mod n nj Q j6=i ) `nj α` (mod n` ) = a` (mod n ai Q k P i=1 j6=i 53 = `= a ) `x(mod n דוגמא(n1 , n2 , n3 ) = (5, 6, 7) : α1 = (n2 n3 )−1 (mod n1 ) = 42−1 (mod 5) = 3 α2 = (n1 n3 )−1 (mod n2 ) = 35−1 (mod 6) = 5 α3 = (n1 n2 )−1 (mod n3 ) = 30−1 (mod 7) = 4 לכן = 42 · 3a1 + 35 · 5a2 + 30 · 4a3 = 126a1 + 175a2 + 120a3 x מקיים x(mod ni ) = aiלכל .1 ≤ i ≤ 3 טענה :אם n1 , . . . , nkזרים בזוגות אזי Fהיא איזומורפיזם של חבורות אבליות F : Z∗n1 ,...,nk → Z∗n1 × · · · × Z∗nk הוכחה :אם x ∈ Z∗n1 ···nkאזי x(mod ni ) ∈ Z∗niלכל 1 ≤ i ≤ k ולכן .F (x) ∈ Z∗n1 × · · · × Z∗nk כמוכן ,אם (a1 , . . . , ak ) ∈ Z∗n1 ×· · ·×Z∗nkו־ x ∈ Zn1 ,...,nkמקיים ) F (x) = (a1 , . . . , ak אזי gcd(x, ni ) = 1לכל 1 ≤ i ≤ kולכן ,gcd(x, n1 · · · nk ) = 1כלומר .x ∈ Z∗n1 ···nk מספר האיברים ב־ Z∗nמסומן ב ) ϕ(nונקרא פונקציית אוילר של .n αk 1 n = pαכאשר piראשוניים שונים ו־ αi ≥ 1אזי טענה :אם 1 · · · pk k k Y X 1 αi αi −1 = )ϕ(n pi − pi =n 1− pi i=1 i=1 הוכחה :נובע מהכפליות αk 1 ϕ(n) = Z∗pα1 ···pαk = Z∗pα1 × · · · × Z∗pαk = ϕ(pα ) 1 ) · · · ϕ(pk 1 k k αi αi −1 i .ϕ(pα ומכך ש־ i ) = pi − pi המשפט הקטן של פרמה: אם gcd(a, n) = 1אזי ).aϕ(n) ≡ 1(mod n הוכחה a ∈ Z∗n :לכן ב־ :Z∗n =1 ∗|Z |n =a )ϕ(n a סבוכיות של פעולות אריתמטיות ב ־ Zn טענה :הסבוכיות של פעולות אריטמטיות ב־ Znחסומה כלהלן: פעולה חבור כפל חלוק עם שארית העלאה בחזקה 54 סבוכיות )O(log n )O(log2 n )O(log2 n )O(log3 n 1 הוכחה :החסמים לגבי חבור ,כפל וחלוק עם שארית נובעים מידית מהאלגוריתמים הסטנדרטים לפעולות אלה .נתאר עתה אלגוריתם יעיל להעלאה בחזקה. יהא ,0 ≤ b ≤ nויהא .a ∈ Zn t P = .t ≤ log n − 1 ,bi ∈ {0, 1} ,b נכתוב bi z i i=0 נגדיר ברקורסיה סדרה c0 , . . . , ct ∈ Znכדלקמן: לכל 1 ≤ k ≤ t c0 = abt , ck ≡n c2k−1 · abt−k קל לבדוק כי ) .ab ≡ ct (mod nמאחר וחישוב ckמתוך ck−1מבוצע ע"י שלושה כפלים, סיבוכיותו היא ) O(log2 nולכן הסבוכיות הכוללת הוא )t · O(log2 n) = O(log3 n אלגוריתמים הסתברותיים עד כה עסקנו באלגוריתמים דטרמיניסטיים ,כאלה שפלט האלגוריתם תלוי אך ורק בקלט, ושתי הרצות שונות של אותו אלגוריתם על אותו קלט ייצרו אותו פלט .כמו שנראה בהמשך ,ישנם מצבים בהם כדאי לאפשר לאלגוריתם להטיל מטבעות במהלך הריצה ,בתנאי שההסתברות לפלט מוטעה תהיה קטנה למדי .ננסח את הדברים בדרך )סמי־(פורמלית. תהא ∗} {0, 1קבוצת כל המחרוזות הסופיות של 0ו־ .1ל־ ∗}x = (x1 , . . . , xn ) ∈ {0, 1 נסמן .|x| = nשפה היא תת קבוצה ∗}.L ⊂ {0, 1 כל בעיית הכרעה אפשר לקודד כשפה ∗}.L ⊂ {0, 1 דוגמאות: } Gגרף דו־צדדי L = {G : } xראשוני L = {X ∈ N : אלגוריתם )דטרמיניסטי( המכריע שייכות לשפה Lהוא אלגוריתם Aהפועל על מחרוזות סופיות ומייצר פלט ב־ } {0, 1כך ש־ {x : A(x) = 1} = L אלגוריתם הסתברותי ε־טוב לשפה Lהוא אלגוריתם Bהמקבל כקלט ∗} x ∈ {0, 1ומשתנה מקרי ) wהמייצג מספר הטלות מטבע( כך ש ־ P r [B(w, x) = 0 | x ∈ L] = 0 וגם P r [B(w, x) = 1 | x 6∈ L] < ε כלומר ,אם הפלט של Bהוא 0אזי בבטחון ,x 6∈ L מאידך אם x ∈ Lאזי B(w, x) = 1בהסתברות .1 − ε דוגמא )מלאכותית במקצת(: נתון קלט x = (x1 , . . . , xn ) ∈ {0, 1}nונתון כי מתקיימים אחד משני התנאים הבאים: x = (0, . . . , 0) .I 55 או .II n 2 = |}|{i : xi = 0 בעייה :קבע האם xמקיים Iאו .II אלגוריתם דטרמיניסטי לבעייה :בדוק את 1 ≤ i ≤ n2 + 1 xiבזה אחר זה. אם אחד מהם הוא 1אזי xמקיים .IIאחרת xמקיים .I אלגוריתם זה יבצע במקרה הרע ביותר n2 + 1בדיקות. נתאר עתה אלגוריתם הסתברותי לבעייה המבצע הרבה פחות בדיקות ,ויחד עם זאת טועה בהסתברות נמוכה .יהא .ε > 0 אלגורתם :Bיהא .s = dlog2 1ε eל k = 1עד k = sבצע: בחר 1 ≤ i ≤ nבאופן מקרי .אם xi = 1קבע B(x) = IIוסיים. אם xi = 0עבור ל־ kהבא .אם ב־ sההגרלות קבלנו xi = 0נקבע .B(x) = I x] = 0מקיים P r [B(x) = II | I s x] = 21 < εמקיים P r [B(x) = I | II מספר הבדיקות שבצענו הוא .s = dlog2 1ε e לדוגמא ,אם אנו מוכנים לקבל תשובה מוטעית בהסתברות של בדיקות במקום . n2 + 1 −50 ,2די להסתפק ב־ 50 מציאת ראשוניים גדולים משפט המספרים הראשוניים (Hadamard, de la Vallee-Poussin) PNT נסמן ב־|} p ≤ xראשוני π(x) = |{p : אזי x ∼ )π(x ln x משפט המספרים הראשוניים אומר כי הצפיפות של המספרים הראשוניים עד xהיא בערך , ln1xולכן אם נבדוק נניח 10 ln xמספרים החל מ־ xהרי שסביר שביניהם נמצא מספר ראשוני. ראשוני. הוא n נתון מספר האם לקבוע כיצד היא המרכזית הבעיה √ √ היא לבדוק האם nמתחלק ב־ kעבור k < nכלשהוא .ברור דרך פשוטה לעשות זאת עם זאת שחפוש על nמספרים כאשר n = 10200אינו אפשרי .אנו נתאר אלגוריתם הסתברותי ε־טוב לבדיקת ראשונות עם זמן ריצה ).O(log 13 log3 n עדים לפריקות יהא n > 1איזוגי ,ונכתוב n − 1 = 2t u נגדיר .2 6 |u })W1 (n) = {a ∈ Z∗n : an−1 6≡ 1(mod n i−1 i })W2 (n) = {a ∈ Z∗n : ∃1 ≤ i ≤ t a2 u 6≡ ±1(mod n) , a2 u ≡ 1(mod n טענה n ⇐ W1 (n) ∪ W2 (n) 6= ∅ :פריק. הוכחה :אם ) a ∈ W1 (nאזי ) an−1 6≡ 1(mod nולכן לפי המשפט הקטן של פרמה nפריק. 56 i−1 אם ) a ∈ W2 (nאזי λ = a2 u 6≡n ±1ומקיים ).λ2 ≡ 1(mod n כלומר למשוואה z 2 − 1 = 0יש לפחות שלושה שורשים ב־ .±1, λ :Znלכן Znאינו שדה ולכן nפריק. הערה :מספר פריק nעבורו ∅ = ) W1 (nנקרא מספר .Carmichael למשל n = 3 · 11 · 17 = 561הוא מספר כזה. ידוע כי יש אינסוף מספרי קרמייקל. )ϕ(n טענה :אם ∅ = W1 (n) 6אזי 2 הוכחה G1 = Z∗n − W1 (n) 6= Z∗n :היא תת חבורה של ).W1 (n) ≥ ϕ(n 2 ≥ |)|W1 (n ,Z∗nולכן )ϕ(n 2 )ϕ(n 2 ≤ | |G1ולכן טענה :אם nפריק ו־∅ = )) W1 (nכלומר nמספר כרמייקל( אזי הוכחה :ראשית נשים לב כי n 6= plכאשר pראשוני ו־.l ≥ 2 l−1 ואכן ,אם n = plכנ"ל אזי ידוע כי Z∗nציקלית מסדר ).ϕ(n) = p (p − 1 l l−1 יהא αיוצר של Z∗nאזי ) .αp −1 6≡ 1(mod plכי הסדר של αהוא )p (p − 1 .pl−1 (p − 1) 6 |pl − 1 נכתוב ,על כן n = n1 n2 ,כאשר .n1 , n2 > 1 ,gcd(n1 , n2 ) = 1 j יהא 0 ≤ j ≤ tהמקסימלי כך שקיים α ∈ Z∗nהמקיים ).α2 u ≡ −1(n )קיים jכזה כי ).((−1)u ≡ −1(n נגדיר j })G2 = {x ∈ Z∗n : x2 u ≡ ±1(mod n ≥ |).|W2 (n טענהZ∗n − G2 ⊂ W2 (n) : .xיהא iמינימלי כך ש ־ )≡ 1(n הוכחה :יהא .x ∈ Z∗n − G2אזי )6≡ ±1(n i−1 t )קיים כזה כי ) .(x2 u = xn−1 ≡ 1(nאזי )x2 u 6≡ 1(n j i−1 מאידך אם ) x2 u ≡ −1(nאזי i − 1 ≤ jולכן ) .x2 u ≡ ±1(nסתירה. i−1 לכן ).x2 u ≡ ±1(n 2j u ∗ < G2 טענה6= Zn : ∗ הוכחה :יהא x ∈ Znכך ש: ) x ≡ α(n1 ) x ≡ 1(n2 אזי ≡n1 −1 u j j x2 u ≡n1 α2 j x2 u ≡n2 1 j .x2 ולכן )6≡ ±1(n u )ϕ(n מסקנה: 2 ≤ | |G2ולכן )ϕ(n 2 ≥ |).|W2 (n האלגוריתם ההסתברותי של מילר־רבין לבדיקת ראשוניות יהא .ε > 0נתאר אלגוריתם ε־טוב לבדיקת ראשוניות של n > 1איזוגי. 57 2i u ו x נציג n − 1 = 2t uכאשר .2 6 |uיהא .s = dlog2 1ε e עבור 1 ≤ j ≤ sנבצע את התהליך הבא :נגריל 1 < aj < nמקרי. .Iאם gcd(aj , n) > 1הכרז nפריק ,סיים. = an−1 אחרת ,חשב את הסדרה j u t 2 .auj , a2u j , . . . , aj an−1הכרז nפריק ,סיים. .IIאם )6≡ ±1(n j .IIIאחרת ,יהא iהמינימלי כך ש־ )≡ 1(n אם )6≡ ±1(n u u i .a2j i−1 a2jהכרז nפריק ,סיים. .IVאם בכל sהאיטרציות nלא הוכרז פריק ,הכרז nראשוני. נתוח האלגוריתם :אם nהוכרז כפריק בשלב , Iאזי gcd(a, n) > 1ו־ nאכן פריק .אם nהוכרז כפריק בשלב IIאזי ) a ∈ W1 (nובפרט ∅ = W1 (n) 6ולכן nפריק .אם nהוכרז כפריק בשלב IIIאזי ) a ∈ W2 (nובפרט ∅ = W2 (n) 6ולכן nפריק. מסקנה :אם האלגוריתם הכריז על nכפריק ,אזי nאכן פריק. נדון כעת במקרה ש־ nהוכרז כראשוני בשלב .IVאם nאכן ראשוני אזי ההכרזה נכונה. יתכן ,עם זאת ,ש־ nאינו ראשוני. נעריך עתה את ההסתברות המותנה ] nפריק | nהוכרז ראשוני[ P r נפריד לשני מקרים: ) .W1 (n) 6= ∅ (iמכך שהכרזנו על nכראשוני נובע כי כל a1 , . . . , asשבחרנו מקיימים ) .ai ∈ Z∗n − W1 (nלכן במקרה זה ∗ s s |)|Zn − W1 (n |)|W1 (n ≤ ] nפריק | nהוכרז ראשוני[ P r = 1− )ϕ(n )ϕ(n s 1 ≤ε 2 ≤ ) .W1 (n) = ∅ (iiמכך שהכרזנו על nכראשוני נובע כי כל a1 , . . . , asשבחרנו מקיימים ) .ai ∈ Z∗n − W2 (nולכן s s ∗ |)|W2 (n |)|Zn − W2 (n ≤ 1− ≤ ] nפריק | nהוכרז ראשוני[ P r )ϕ(n )ϕ(n s 1 ≤ε 2 58 ≤ לכן בכל מקרה n] ≤ εפריק | nהוכרז ראשוני[ P r כלומר האלגוריתם הוא ε־טוב. סבוכיות אלגורתם מילר־רבין סבוכיות חשוב הסדרה t auj , . . . , a2j u 3 היא )O(log n 1 ולכן סבוכיות האלגוריתם היא )O(s log n) = O(log · log3 n ε 3 הצפנה ציבורית בשיטת RSA בעיית ההצפנה נניח כי Aliceו־ Bobרוצים לשלוח ביניהם הודעות מוצפנות כך שצד שלישי המצותת להן לא יוכל לפענח את תוכנן .כיצד יוכלו לעשות זאת? שיטת ההצפנה הקלאסית מניחים כי כל הודעה מורכבת מ־ nאותיות לועזיות ושכל אות מיוצגת ע"י ,jכאשר Alice .0 ≤ j ≤ 25ו־ Bobנפגשים מראש ומחליטים על פונקצית הצפנה סודית Eופונקצית פענוח )סודית גם כן( .D = E −1לכל הודעה אפשרית Mמתקיים .D(E(M )) = M נביא כמה דוגמאות לצפנים )נניח שההודעה היא ) :(M = (x1 , . . . , xn .1צופן המיוחס ליוליוס קיסר: )E(x1 , . . . , xn ) = ((x1 + 3)mod 26, . . . , (xn + 3)mod 26 פונקצית הפענוח במקרה זה היא: )D(x1 , . . . , xn ) = ((x1 − 3)mod 26, . . . , (xn − 3)mod 26 .2צופן מהסוג המתואר בספרי מתח נושנים: תהי ziהאות הראשונה בעמוד iשל הספר "אנה קרנינה" )נניח שבידי Aliceו־ Bob אותה מהדורה( .נגדיר: )E(x1 , . . . , xn ) = ((x1 + zi )mod 26, . . . , (xn + zi )mod 26 פונקצית הפענוח היא: )D(x1 , . . . , xn ) = ((x1 − zi )mod 26, . . . , (xn − zi )mod 26 .3צופן אקראי: בפגישתם Aliceו־ Bobמגרילים סדרה "מקרית" ) (z1 , . . . , znומגדירים את פונקציות ההצפנה והפענוח כמו בדוגמא הקודמת .אם הסדרה ) (z1 , . . . , znהיא אכן "מקרית", שיטת הצפנה זו היא בטוחה לחלוטין )להודעה בודדת באורך .(n 59 בשיטת ההצפנה הקלאסית ישנן מספר בעיות: )א( קשה לייצר סדרות שדומות למקריות. )ב( השיטה מחייבת תיאום מראש בין Aliceו־ .Bob שיטת ההצפנה הציבורית כעת נניח ש ־ Aliceמעוניינת לקבל הודעות מוצפנות מציבור גדול של משתמשים מבלי להיפגש איתם מראש .נסמן את מרחב ההודעות האפשריות ב־ .M הרעיון הוא פשוט Alice :תבחר פונקצית חח"ע ועל E : M → Mותפרסם ברבים )למשל, במדריך הדומה למדריך טלפונים( את האלגוריתם לחישוב הפונקציה .Eפונקצית הפענוח תיקרא ,כמקודם Dותקיים: ∀M ∈ M : D(E(M )) = M לכאורה ,נוצרת בעיה :אם הפונקציה Eידועה לכל ,אזי כל מצותת יוכל לחשב את הפונקציה ההופכית D = E −1ולפענח את התקשורת המוצפנת ע"י כך שיעבור על מרחב ההודעות האפשריות Mוימצא את ) E(Mלכל הודעה .M ∈ Mברם ,אם המרחב Mהוא מספיק גדול )נניח מסדר גודל של (10700שיטה זו למציאת Dאינה מציאותית. ננסח ,אפוא ,את הדרישות מפונקצית הצפנה טובה Eעבור שיטת ההצפנה הציבורית: E .1ניתנת לחישוב מהיר על כל קלט .M ∈ M Alice .2יכולה לחשב את Dבמהירות על כל .M ∈ M .3למרות ש־ Eנתונה ,איש מלבד Aliceאינו יכול לחשב את Dבזמן סביר. פונקציה כזו נקראת ) trapdoor functionמונח זה נטבע ע"י Diffieו־ Hellmanבשנת .(1976 שיטת RSA בשנת 1977המציאו Shamir ,Rivestו־ Adlemanאת אלגוריתם RSAשרבים משערים כי הוא מממש .trapdoor functionנתאר כעת אלגוריתם הצפנה פופולרי זה: Aliceמוצאת )למשל בשיטת מילר־רבין( שני מספרים ראשוניים p, qגדולים )נניח מסדר גודל של (10700ומחשבת את .n = pqעתה Aliceבוחרת מספר ) eדי גדול( שמקיים .(e, (p − 1)(q − 1)) = 1מרחב ההודעות מוגדר להיות .M = Z∗n Aliceמפרסמת את הזוג ) (n, eבפומבי ומגדירה את פונקצית ההצפנה E : M → Mע"י: )∀x ∈ M : E(x) = xe (mod n לאחר מכן Aliceמחשבת בעזרת אלגוריתם אוקלידיס את ההופכי ל־e מודולו ) ,(p − 1)(q − 1כלומר מוצאת מספר dהמקיים )de ≡ mod (p − 1)(q − 1 הפונקציה ההופכית ל־ Eנתונה ע"י: )∀y ∈ M : D(y) ≡ y d (mod n 60 נוודא שהפונקציה Dאכן הופכית ל־:E ∀x ∈ M : D(E(x)) = (xe )d mod n = x1+λ(p−1)(q−1) mod n לפי הנוסחה שהוכחנו לפונקצית אוילר ,מתקיים: )φ(n) = φ(pq) = (p − 1)(q − 1 ולכן ,לפי המשפט הקטן של פרמה: )x1+φ(n) (mod n) ≡ x(mod n לפיכך: D(E(x)) = x הערה :מאחר והזוג ) (n, eידוע ברבים הרי שע"י פירוק nלגורמים ראשוניים p, qאפשר לחשב את dואת פונקצית הפענוח .Dהחסינות של שיטת RSAמבוססת על ההשערה )שטרם הוכחה( כי פירוק מספר לגורמיו היא בעייה חישובית קשה. 61 מבוא לסבוכיות של חשובים בעיות אופטימיזציה ובעיות הכרעה הבעיות האלגוריתמיות בהן עסקנו עד כה הן בדרך כלל בעיות אופטימיזציה ,למשל מציאת העץ הפורש המינימלי ,מציאת המסלול הקצר ביותר בין זוג קדקדים בגרף ,מציאת הזרימה המקסימלי ברשת וכיו"ב. בעיות הכרעה ,הינן ,מאידך ,בעיות שהתשובה עליהן היא כן או לא. למשל ,בהנתן גרף ממושקל Gומספר ,kהכרע האם הגרף מכיל עץ פורש שמשקלו ≥ .k בדיון בנושא סבוכיות ,מתייחסים בד"כ לבעיות הכרעה בלבד. הסיבה היא שאם נתונה בעיית אופטימיזציה ,Pואם Qבעיית ההכרעה הנגזרת ממנה ,אזי אם יש ל־ Qאלגוריתם פולונומיאלי ,אזי גם ל־ Pיש אלגוריתם פולינומיאלי ־ יתכן עם מעריך חזקה גדול יותר. דוגמא :תהא Pבעיית האופטימיזציה הבאה :בהנתן גרף ) G = (V, Eמצא S ⊂ Vכיסוי צלעות מינימלי בגודלו ).S = τ (G תהא Qבעיית ההכרעה המתאימה :בהנתן זוג ) k) (G, kטבעי( קבע האם .τ (G) ≤ k נסמן ב־ ) f (nאת סיבוכיות Pעל גרף עם nקדקדים ,ונסמן ב־) g(n, kאת סבוכיות Qעל גרף עם nקדקדים ו־ 1 ≤ k ≤ n טענה :אם ) g(n, k) ≤ O(ncלכל 0 ≤ k ≤ nאזי ) .f (n) ≤ O(nc+2 הוכחה :יהא Bאלגוריתם לבעייה Qמסבוכיות .g נתאר אלגוריתם Aלבעייה :Pיהא )V = {v1 , . . . , vn } G = (V, E A(G): k=0 while B(G, k) = False do k ← k + 1 )* לאחר whileזה מתקיים (* τ (G) = k i=1 while B(G − v1 , k − 1) = False do i ← i + 1 )* לאחר whileזה מתקיים (* τ (G − vi ) ≤ k − 1 } A(G) = A(G − vi ) ∪ {vi נתוח סבוכיות :נניח כי ,g(n, k) ≤ αncנראה באנדוקציה כי .f (n) ≤ 2αnc+2 ואכן מהאלגוריתם נובע כי )g(n, k) + ng(n − 1, k − 1) + f (n − 1 n P ≤ )f (n k=0 ) ≤ n · αnc + nαnc + 2α(n − 1)c+2 = 2α(nc+1 + (n − 1)c+1 ≤ 2αnc+2 62 שפות נסמן ב־ ∗} {0, 1את אוסף המחרוזות הסופיות של אפסים ואחדים. ל־ ∗} x = (x1 , . . . , xn ) ∈ {0, 1נסמן .|x| = n שפה היא תת קבוצה ∗} .L ⊂ {0, 1בעיית ההכרעה הקשורה לשפה Lהינה בהנתן ∈ x ∗} {0, 1האם x ∈ Lאו .x 6∈ L אלגוריתם } A : {0, 1}∗ → {0, 1הינו אלגוריתם הכרעה ל־ Lאם }L = {x ∈ {0, 1}∗ : A(x) = 1 כל בעיות ההכרעה ניתנות לנסוח בעזרת שפות ,ע"י קדוד מתאים וסטנדרטי של הקלט הנתון )גרף ,רשת וכיו"ב( על וקטור ב־ ∗}.{0, 1 המחלקה P שפה Lתקרא פולינומיאלית אם קיים לה אלגוריתם הכרעה ,Aוקבוע c > 0כך שלכל ∗} A(x) ,x ∈ {0, 1מחושב בזמן ) .O(|x|)c אוסף כל השפות הפולינומיאליות יסומן ב־ .P אנו מכירים דוגמאות רבות לשפות ב־ ,Pלמשל: ) (iשפת הגרפים בדו־צדדיים ) (iiשפת הגרפים הדו־צדדיים בעלי זווג מושלם ) (iiiשפת הגרפים הממושקלים בעלי עץ פורש שמשקלו ≥ 10 ) (ivשפת הגרפים המכילים קליק בגודל ≤ 10 השפות נמצאות ב־ Pנחשבות ל"טובות" מבחינה חשובית. ישנן בעיות שידוע שאינן ב־ ,Pלמשל האם במשחק דמקה על לוח n × nיש אסטרטגית נצחון ללבן. המחלקה N P יש שפות רבות Lשעבורן אם x ∈ Lאזי אורקל יכול להוכיח לנו בזמן פולינומי שאכן .x ∈ Lנסמן אוסף שפות זה ע"י .(Nondeterministic Polynomial) N P דוגמאות: ) G} (iגרף COV ER = {(G, k) : τ (G) ≤ k , k ∈ N , אם (G, k) ∈ COV ERאזי אורקל יכול לספק לנו קבוצה S ⊂ Vואנו נבדוק בזמן פולינומי כי |S| ≤ kוכי Sקבוצה מכסה של .G ) (iiמעגל המילטוני הוא מעגל פשוט העובר דרך כל קדקדי .G } Gגרף המילטוני HAM = {G : אם G ∈ HAMאזי אורקל לכול לספק לנו סדור של הקדקדים ואנו נוכל לבדוק בזמן לינארי ב־ nשהסדור מגדיר מעגל המילטוני. הגדרה פורמלית של N P 63 L ∈ N Pאם קיים אלגוריתם } A : {0, 1}∗ × {0, 1}∗ → {0, 1וקבוע c > 0כך ש־ ) A(x, yמחושב בזמן ) O ((|x| + |y|)cוכך ש־ }L = {x ∈ {0, 1}∗ : ∃y ∈ {0, 1}∗ , |y| ≤ O(nc ) , A(x, y) = 1 טענהP ⊂ N P : הוכחה :תהא ,L ∈ Pויהא } B : {0, 1}∗ → {0, 1אלגוריתם הכרעה ל־ Lכך ש־ )B(x מחושב בזמן ) .O(|x|cנגדיר } A : {0, 1}∗ × {0, 1}∗ → {0, 1ע"י ) .A(x, y) = B(xאזי ) A(x, yמחושב בזמן ) O(|x|cוברור כי }) L = {x : B(x) = 1} = {x : ∃y A(x, y) = 1 |y| = O(|x|c אנו נשווה בין סיבוכיות של בעיות שונות בעזרת המושג של רדוקציה פולינומיאלית. הגדרה :נאמר כי השפה L1ניתנת לרדוקציה פולינומיאלית לשפה ,L2 ובסימון ,L1 ≤P L2אם קיים אלגוריתם ∗} f : {0, 1}∗ → {0, 1וקיים קבוע c > 0כך שמתקיימים התנאים הבאים: f (x) .1מחושב בזמן ) .O(|x|c f (x) ∈ L2 ⇔ x ∈ L1 .2 דוגמא :מספר הצביעה ) χ(Gשל גרף Gהוא ה־ kהמינימלי כך שקיימת צביעה ] ϕ : V → [kהמקיימת .ϕ(u) 6= ϕ(v) ⇐ {u, v} ∈ E עבור iקבוע נסמן ב־ ) COL(kאת משפחת הגרפים המקיימים .χ(G) ≤ kלמשל )COL(2 היא משפחת הגרפים הדו־צדדיים ולכן .COL(2) ∈ P טענה :לכל kקבוע.COL(k) ≤P COL(k + 1) , הוכחה :לגרף ) G = (V, Eנגדיר ) f (G) = (V 0 , E 0כאשר } w) V 0 = V ∪ {wקדקד חדש( ו } .E 0 = E ∪ {{v, w} : v ∈ V ברור כי ) ,χ(f (G)) = 1 + χ(Gולכן )f (G) ∈ COL(k + 1) ⇔ G ∈ COL(k טענה: ) (iאם L1 ≤P L2 ,L2 ≤P L3אזי .L1 ≤P L3 ) (iiאם L1 ≤P L2ו־ L2 ∈ Pאזי .L1 ∈ P הוכחה (i) :ברור. ) (iiיהא A2אלגוריתם הכרעה ל־ L2כך ש־ ) A2 (xמחושב בזמן ) .O(|x|c2תהא ∗} f : {0, 1}∗ → {0, 1רדוקציה פולינומיאלית של L1ל־ L2כך ש ) f (xמחושבת בזמן ) .O(|x|c cc1 אזי )) A1 (x) = A2 (f (xהוא אלגוריתם הכרעה ל־ ,L1ו־ A1מחושב בזמן ) |.O(|x 64 הגדרה :השפה Lנקראת N P־קשה ) (NP-Hardאם L0 ≤P Lלכל .L0 ∈ N P Lנקרא N P־שלמה ) NP-Completeאו בקיצור (NPCאם L ∈ N Pו־ Lהיא N P־קשה. השערה.P 6= N P : הערה חשובה :אם עבור בעיה כלשהיא L ∈ N P Cמתקיים L ∈ Pאזי מהטענה למעלה נובע כי .P = N Pלכן אם אנו מראים עבור בעייה מסויימת Lשהיא ב־ N P Cאזי ,בכפוף להשערה ,P 6= N Pנובע כי אין לה אלגוריתם הכרעה פולינומיאלי. נוסחא בוליאנית ) φ(x1 , . . . , xnנקראית ספיקה אם יש הצבה ∈ ) x = (x1 , . . . , xn (T, F )nכך ש ־ .φ(x) = T דוגמא (x7 ∨ ¬x2 ) ∧ (x1 ∨ x3 ) :ספיקה x1 ∧ ¬x1 .אינה ספיקה. נסמן ב־ SATאת אוסף הנוסחאות הספיקות. משפט .SAT ∈ N P C :Cook בעזרת משפט Cookוהטכניקה של רדוקציה פולינומיאלית ,ניתן להראות כי בעיות טבעיות רבות נמצאות ב־ N P Cולכן ,בכפוף להשערה ,P 6= N Pאינן ניתנות להכרעה בזמן פולינומיאלי. כהדגמה לשיטה זו נראה כי הבעיות הבאות ב־ :N P C .1נוסחא בוליאנית φהיא ב conjuctive normal formאם φהיא ANDשל OR־ים באורך שלוש של משתנים או שלילותיהם ,למשל ) φ = (x1 ∨ ¬x2 ∨ x4 ) ∧ (x3 ∨ ¬x1 ∨ x7 נסמן ב־ 3CN Fאת אוסף הנוסחאות הנ"ל שהן ספיקות. .2נסמן ב־ ) w(Gאת גודל הקליק המרבי בגרף .G נסמן ב־ CLIQU Eאת אוסף הזוגות ) (G, kכך ש־ .w(G) ≥ k .3נסמן ב־ COV ERאת אוסף הזוגות ) (G, kכך ש ־ .τ (G) ≤ k .4נסמן ב־ DHAMאת אוסף הגרפים המכוונים Gבעלי מעגל המילטוני מכוון. קל לבדוק כי 3CN F, CLIQU E, COV ER, HAM, DHAM, COL(3) ∈ N P טענהSAT ≤P 3CN F ≤P CLIQU E ≤P COV ER ≤P DHAM : )3CN F ≤P COL(3 מסקנה :כל הבעיות המופיעות בטענה הקודמת הן ב־ .N P C 65
© Copyright 2024