14אלגוריתמי קירוב ב׳: ½-קירוב חמדני ל-MAXCUT, 2-קירוב ל-TSP המטרי ו-2-קירוב לאריזה למכלים

שלושה אלגוריתמי קירוב פולינומיים, כל אחד עם הוכחת פיזביליות, ניתוח זמן ריצה והוכחת יחס: אלגוריתם חמדני חד-מעברי ביחס ½ ל-MAXCUT, אלגוריתם עץ פורש מינימלי + DFS ביחס 2 לבעיית הסוכן הנוסע כשהמשקלים מקיימים את אי-שוויון המשולש, ואלגוריתם First-Fit ביחס 2 לבעיית האריזה למכלים.

ביטחון: mediumללא הקלטה4 עמודי סיכוםapproximation-algorithmsmax-cutmetric-tspbin-packinggreedy-algorithmsminimum-spanning-tree

לשיעור הזה אין הקלטה

המפגש הזה אינו קיים בשום הקלטה בקורפוס, והקובץ נשען על עמודי הסיכום בלבד. הוא קצר מן השיעורים השכנים, וזה מכוון — לא נוספה אליו מלל כדי להסתיר את הפער. פירוט מלא נמצא במקטע ״פערים בין הסיכום להקלטה״.

נשען על: שיעור 12, שיעור 13

עמודי הסיכום בכתב יד

פתיחת עמוד 1 בגודל מלא

סיבוכיות שיעור 14 אלגוריתמי קירוב.pdf

עמוד 1 מתוך 4 בסיכום הכתב יד

בקצרה

  • זהו השיעור השני על אלגוריתמי קירוב, והוא כולו אלגוריתמים ובניית חסמים — אין בו אף תוצאת קושי. שלושה אלגוריתמים, שלוש הוכחות יחס, ואותה טכניקה בדיוק בכל אחת.
  • הטכניקה החוזרת (מ־שיעור 13): האלגוריתם אינו יודע לחשב את OPT\mathrm{OPT}. לכן בונים גודל עזר שהאלגוריתם שולט בו, מוכיחים שהוא חוסם את OPT\mathrm{OPT} מהצד הנכון, ומשווים אליו את הפלט. כאן שלושת גדלי העזר הם: ∣E∣|E| עבור MAXCUT\mathrm{MAXCUT}, משקל העץ הפורש המינימלי עבור TSP\mathrm{TSP}, וסכום האיברים ∑ai\sum a_i עבור בעיית האריזה.
  • ½-קירוב חמדני ל-MAXCUT\mathrm{MAXCUT}: מעבר יחיד על הקודקודים לפי סדר; כל קודקוד נכנס לצד שבו יש לו פחות שכנים שכבר הוצבו. ההוכחה מפרקת את EE לקבוצות E1,…,EnE_1,\dots,E_n לפי הקצה בעל האינדקס הגבוה, ומראה ∣F∩Ej∣≥12∣Ej∣|F \cap E_j| \ge \tfrac12 |E_j| בנפרד לכל jj. זהו אלגוריתם שונה מהחיפוש המקומי של שיעור 13, ומשיג את אותו יחס — במעבר אחד ובלי איטרציות.
  • 2-קירוב לבעיית הסוכן הנוסע כשהמשקלים מטריים: חשב עץ פורש מינימלי TT, הרץ עליו DFS, והחזר את הקודקודים לפי סדר הגילוי. שלושה אי-שוויונות מרכיבים את ההוכחה: w(T)≤w(Copt)w(T) \le w(C_{\mathrm{opt}}), ואז w(P)=2w(T)w(P)=2w(T) עבור הסיור שעובר על כל קשת פעמיים, ואז w(C)≤w(P)w(C) \le w(P) בזכות אי-שוויון המשולש (״קיצורי דרך״).
  • שימו לב לניגוד מול שיעור 13: שם הוכחנו שלבעיית הסוכן הנוסע הכללית אין קירוב ביחס קבוע אלא אם P=NP\mathrm{P}=\mathrm{NP}. כאן, בתוספת הנחה אחת בלבד — אי-שוויון המשולש — יש קירוב ביחס 2. ההנחה הזו היא כל ההבדל.
  • 2-קירוב לבעיית האריזה למכלים (First-Fit): הכנס כל פריט לתא הראשון שהוא נכנס אליו. הלמה המרכזית: בפלט יש לכל היותר תא אחד שסכום איבריו ≤12\le \tfrac12. מכאן ∑ai>12(m−1)\sum a_i > \tfrac12(m-1), ומכיוון ש-mopt≥∑aim_{\mathrm{opt}} \ge \sum a_i מקבלים m≤2moptm \le 2m_{\mathrm{opt}}.
  • שני טריקים כלליים שכדאי לזכור מכאן: חלוקת קבוצת האילוצים לחלקים שהאלגוריתם מכריע עליהם אחד-אחד (הפירוק ל-EjE_j), ומעבר משלמים לחסם — האי-שוויון m<2mopt+1m < 2m_{\mathrm{opt}}+1 הופך ל-m≤2moptm \le 2m_{\mathrm{opt}} רק כי mm שלם.

רקע ותלויות

מ־שיעור 13 — הגדרת אלגוריתם הקירוב. נחזור עליה במלואה, כי כל השיעור הזה הוא שלוש הפעלות שלה.

עבור בעיית מינימיזציה ו-α≥1\alpha \ge 1, אלגוריתם AA הוא אלגוריתם קירוב ביחס α\alpha אם לכל קלט II:

  1. AA רץ בזמן פולינומי ב-∣I∣|I|;
  2. A(I)A(I) הוא פתרון אפשרי (feasible) לקלט II;
  3. OPT(I)  ≤  v(A(I))  ≤  α⋅OPT(I)\mathrm{OPT}(I) \;\le\; v(A(I)) \;\le\; \alpha \cdot \mathrm{OPT}(I).

עבור בעיית מקסימיזציה ו-0<α≤10 < \alpha \le 1 הכיוון מתהפך: α⋅OPT(I)  ≤  v(A(I))  ≤  OPT(I).\alpha \cdot \mathrm{OPT}(I) \;\le\; v(A(I)) \;\le\; \mathrm{OPT}(I).

בשני המקרים אחד משני אי-השוויונות טריוויאלי (פתרון אפשרי לעולם אינו טוב מהאופטימום), וכל העבודה היא בשני. זו הסיבה שכל שלושת הניתוחים בשיעור בנויים באותו סדר: פיזביליות →\to זמן ריצה →\to יחס. אל תוותרו על השלב הראשון במבחן; הוא נבדק.

הערה: הסיכום של שיעור 14 כותב ״ביחס קירוב 12\tfrac12״ עבור MAXCUT\mathrm{MAXCUT} ו״ביחס קירוב 2״ עבור שתי בעיות המינימום, כלומר משתמש בקונבנציה שבה α≤1\alpha \le 1 לבעיות מקסימום ו-α≥1\alpha \ge 1 לבעיות מינימום. זו הקונבנציה שנשמרת כאן לאורך כל הקובץ. ספרים אחרים כותבים OPT/ALG\mathrm{OPT}/\mathrm{ALG} גם לבעיות מקסימום ואז אותו אלגוריתם הוא ״2-קירוב״; שימו לב לכיוון לפני שאתם מצטטים תוצאה.

מ־שיעור 13 — MAXCUT\mathrm{MAXCUT}. בהינתן גרף לא מכוון G=(V,E)G=(V,E), יש למצוא חלוקה של VV לשתי קבוצות כך שמספר הקשתות שקצה אחד שלהן בכל צד יהיה מקסימלי. בשיעור 13 ראינו אלגוריתם חיפוש מקומי: כל עוד יש קודקוד שהעברתו לצד השני מגדילה את החתך — העבר אותו. הוא נותן יחס 12\tfrac12. האלגוריתם של השיעור הזה משיג את אותו יחס בשיטה אחרת לגמרי.

מ־שיעור 13 ומ־שיעור 12 — בעיית הסוכן הנוסע. בשיעור 12 ראינו את הרדוקציה UHC≤pTSP\mathrm{UHC} \le_p \mathrm{TSP} (הזכרה: A≤pBA \le_p B פירושו ש-AA ניתנת לרדוקציה פולינומית ל-BB, כלומר BB קשה לפחות כמו AA). בשיעור 13 הוכחנו, על גבי אותה רדוקציה, שאם קיים אלגוריתם קירוב ביחס α\alpha כלשהו ל-TSP\mathrm{TSP} הכללית אז P=NP\mathrm{P}=\mathrm{NP}. התוצאה הזו היא הרקע ההכרחי למשפט 3 כאן: היא מסבירה למה מוסיפים את הנחת אי-שוויון המשולש, ולמה בלעדיה אין מה לחפש.

מקורס אלגוריתמים — שני כלים שמשמשים אותנו כקופסה שחורה.

  1. עץ פורש מינימלי (MST). לכל גרף לא מכוון קשיר ממושקל אפשר למצוא בזמן פולינומי עץ פורש שמשקלו מינימלי מבין כל העצים הפורשים (Prim ב-O(∣V∣2)O(|V|^2), Kruskal ב-O(∣E∣log⁡∣V∣)O(|E| \log |V|)). התכונה היחידה שנשתמש בה: אם TT עץ פורש מינימלי ו-T′T' עץ פורש כלשהו, אז w(T)≤w(T′)w(T) \le w(T').
  2. DFS. סריקה לעומק של עץ מנוהלת ב-O(∣V∣+∣E∣)O(|V|+|E|) ומייצרת שני דברים שנצטרך: סדר הגילוי (preorder) של הקודקודים, והסיור הסגור שבו כל קשת של העץ נחצית בדיוק פעמיים — פעם ״ברדת״ ופעם ״בעלייה״.

הגדרות

הגדרה 1: החתך המושרה על ידי קבוצת קודקודים

יהי G=(V,E)G=(V,E) גרף לא מכוון, ותהי U⊆VU \subseteq V. החתך המושרה על ידי UU הוא F  =  { xy∈E  :  x∈U,  y∈Uˉ },F \;=\; \{\, xy \in E \;:\; x \in U,\; y \in \bar{U} \,\}, כאשר Uˉ=V∖U\bar{U} = V \setminus U. ערך הפתרון הוא ∣F∣|F|, ובעיית MAXCUT\mathrm{MAXCUT} היא למקסם אותו.

אינטואיציה. צובעים כל קודקוד בשחור או בלבן, וסופרים כמה קשתות מחברות בין צבעים שונים. כל קבוצה UU היא פתרון אפשרי — גם U=∅U=\emptyset (חתך ריק) וגם U=VU=V. אין כאן שום אילוץ פיזביליות מלבד ״UU היא תת-קבוצה של VV״, ולכן הוכחת הפיזביליות של אלגוריתם ל-MAXCUT\mathrm{MAXCUT} היא כמעט טריוויאלית — כל התוכן הוא ביחס.

דוגמה. ב-K3K_3 עם V={v1,v2,v3}V=\{v_1,v_2,v_3\}: עבור U={v1}U=\{v_1\} מתקבל F={v1v2,v1v3}F=\{v_1v_2, v_1v_3\} ו-∣F∣=2|F|=2, וזהו האופטימום. אי-דוגמה לרווח: עבור U=VU=V מתקבל F=∅F=\emptyset — פתרון אפשרי לחלוטין, וערכו 00.

הגדרה 2: משקלים המקיימים את אי-שוויון המשולש

יהי G=(V,E)G=(V,E) גרף שלם עם משקלים w:E→R+w: E \to \mathbb{R}^{+}. נאמר ש-ww מקיימת את אי-שוויון המשולש אם לכל x,y,z∈Vx,y,z \in V w(xz)  ≤  w(xy)+w(yz).w(xz) \;\le\; w(xy) + w(yz).

אינטואיציה. ״קיצור דרך אינו מייקר״: לעולם לא כדאי לעבור דרך תחנת ביניים כדי להגיע מ-xx ל-zz. כל מרחק גיאומטרי מקיים זאת, וגם מרחקי מסלול קצר בגרף.

דוגמה. ארבע נקודות במישור עם מרחק אוקלידי, למשל קודקודי מלבן 4×34 \times 3: המשקלים הם 3,4,53,4,5 והם מקיימים את אי-השוויון. אי-דוגמה: שלושה קודקודים עם w(xy)=1w(xy)=1, w(yz)=1w(yz)=1, w(xz)=5w(xz)=5 — כאן 5>1+15 > 1+1, ולכן משפט 3 אינו חל. זה בדיוק סוג המשקלים שהרדוקציה של שיעור 13 מייצרת, וזו הסיבה שהיא מצליחה לייצר אי-קירוב.

הגדרה 3: בעיית הסוכן הנוסע עם משקלים מטריים

נתון: גרף שלם G=(V,E)G=(V,E) עם משקלים w:E→R+w:E \to \mathbb{R}^{+} המקיימים את אי-שוויון המשולש. מטרה: למצוא מעגל המילטוני (מעגל העובר בכל קודקוד של GG בדיוק פעם אחת וחוזר לנקודת ההתחלה) שמשקלו מינימלי.

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

אי-דוגמה חשובה. מופע TSP\mathrm{TSP} שבו המשקלים הם 11 ו-22 בשרירותיות אינו בהכרח מטרי, אף שכל מופע כזה שנוצר מהרדוקציה של שיעור 12 כן מקיים את אי-השוויון (כי 1+1≥21+1 \ge 2). זו נקודה שכדאי לבדוק לפני שמכריזים שמשפט 3 סותר את שיעור 13 — הוא אינו סותר; שיעור 13 השתמש במשקלים 11 ו-α∣V∣+1\alpha|V|+1, שאינם מטריים.

הגדרה 4: בעיית האריזה למכלים (Bin Packing)

נתון: מספרים a1,…,an∈(0,1]a_1,\dots,a_n \in (0,1]. מטרה: לחלק את a1,…,ana_1,\dots,a_n למספר מינימלי של קבוצות, כך שסכום האיברים בכל קבוצה אינו עולה על 11.

פורמלית, פתרון אפשרי הוא פונקציה f:[n]→[m]f:[n] \to [m] (הקצאת פריט לתא) המקיימת ∑i: f(i)=jai≤1\sum_{i:\, f(i)=j} a_i \le 1 לכל j∈[m]j \in [m], וערך הפתרון הוא mm.

אינטואיציה. nn חפצים בגדלים שונים ומכלים בעלי קיבולת 11 — כמה מכלים צריך. התנאי ai≤1a_i \le 1 הכרחי: פריט גדול מ-11 לא היה נכנס לשום תא, ואז לא היה קיים פתרון אפשרי כלל.

דוגמה. a=(0.4, 0.7, 0.3, 0.6)a = (0.4,\,0.7,\,0.3,\,0.6): החלוקה {a1,a4}\{a_1,a_4\} (סכום 1.01.0) ו-{a2,a3}\{a_2,a_3\} (סכום 1.01.0) היא פתרון אפשרי בעל ערך 22, וזה האופטימום כי ∑ai=2.0>1\sum a_i = 2.0 > 1. אי-דוגמה. החלוקה {a1,a2}\{a_1,a_2\} אינה פתרון אפשרי, כי 0.4+0.7=1.1>10.4+0.7 = 1.1 > 1.


משפטים והוכחות

משפט 1: אלגוריתם חמדני הוא אלגוריתם קירוב ביחס ½ ל-MAXCUT

האלגוריתם (כפי שהוא בסיכום). לכל גרף G=(V,E)G=(V,E), נסמן V={v1,…,vn}V=\{v_1,\dots,v_n\}.

  1. אתחל U=Uˉ=∅U = \bar{U} = \emptyset.
  2. לכל 1≤i≤n1 \le i \le n:
    1. אם ל-viv_i יש יותר שכנים ב-UU מאשר ב-Uˉ\bar{U} — הכנס את viv_i ל-Uˉ\bar{U}; אחרת הכנס את viv_i ל-UU.
  3. החזר את UU.

שימו לב: בזמן הריצה UU ו-Uˉ\bar{U} הן שתי קבוצות נפרדות שנבנות במקביל, ורק בסוף הריצה מתקיים Uˉ=V∖U\bar{U} = V \setminus U. הספירה בשלב 2.1 מתייחסת רק לשכנים שכבר הוצבו, כלומר לשכנים vkv_k עם k<ik<i; שכנים עתידיים אינם נמצאים באף אחת מהקבוצות ולכן אינם נספרים.

טענת פיזביליות. האלגוריתם מחזיר תמיד קבוצת קודקודים U⊆VU \subseteq V, וכל תת-קבוצה של VV היא פתרון אפשרי לפי הגדרה 1. בנוסף, כל viv_i מוכנס בדיוק לאחת משתי הקבוצות בדיוק פעם אחת, ולכן בסוף אכן U ∪˙ Uˉ=VU \,\dot\cup\, \bar{U} = V. □\square

ניתוח זמן ריצה (כפי שהוא בסיכום). שלב 1 דורש O(1)O(1) פעולות. שלב 2 מתבצע ב-∣V∣|V| איטרציות, ובכל איטרציה עוברים על לא יותר מ-∣E∣|E| קשתות כדי לספור את השכנים בשני הצדדים. סך הכול O(∣V∣⋅∣E∣)O(|V| \cdot |E|), שהוא פולינומי בגודל הקלט. □\square

הערה: הסיכום מסתפק בחסם הרופף O(∣V∣⋅∣E∣)O(|V|\cdot|E|), וזה מספיק לחלוטין למטרה (להראות פולינומיות). לשלמות: אם באיטרציה ii סורקים רק את הקשתות הנוגעות ב-viv_i, כל קשת נסרקת פעמיים לאורך כל הריצה (פעם לכל קצה), והזמן הכולל הוא O(∣V∣+∣E∣)O(|V|+|E|) — כלומר האלגוריתם הוא ליניארי, במעבר יחיד.

ניתוח יחס הקירוב. יהי G=(V,E)G=(V,E) גרף, ונסמן V={v1,…,vn}V=\{v_1,\dots,v_n\}. יהי UU הפלט של האלגוריתם ויהי F⊆EF \subseteq E החתך המושרה על ידי UU.

הפירוק המרכזי. לכל 1≤j≤n1 \le j \le n נסמן ב-EjE_j את קבוצת הקשתות ש-vjv_j הוא הקצה שלהן בעל האינדקס הגבוה מבין שני הקצוות: Ej  =  { vivj∈E  :  i<j }.E_j \;=\; \{\, v_i v_j \in E \;:\; i < j \,\}.

אינטואיציה (מופיעה בסיכום בכחול): EjE_j היא קבוצת הקשתות ש-vjv_j ״יקבע את גורלן״. כשהאלגוריתם מגיע ל-vjv_j, כל הקצוות השניים של קשתות EjE_j כבר הוצבו, ולכן ההחלטה על vjv_j קובעת סופית עבור כל קשת ב-EjE_j אם היא בחתך או לא. הקשתות שיוכרעו מאוחר יותר שייכות ל-EkE_k עבור k>jk>j ואינן מושפעות.

למה 1.1. ⋃j=1nEj=E\bigcup_{j=1}^{n} E_j = E, והקבוצות E1,…,EnE_1,\dots,E_n זרות בזוגות; לכן ∣E∣=∑j=1n∣Ej∣|E| = \sum_{j=1}^{n} |E_j|.

הוכחה. תהי e=vivj∈Ee = v_i v_j \in E קשת כלשהי. הגרף פשוט ואין בו לולאות עצמיות, ולכן i≠ji \ne j, ולקשת יש קצה יחיד בעל אינדקס גבוה יותר — נניח j>ij > i. אז e∈Eje \in E_j, ומכאן שהאיחוד הוא כל EE. מצד שני, ee אינה יכולה להשתייך ל-EkE_k עבור k≠jk \ne j: לפי ההגדרה, e∈Eke \in E_k מחייב ש-vkv_k הוא הקצה בעל האינדקס הגבוה של ee, וקצה כזה יחיד. לכן הקבוצות זרות בזוגות, והשוויון בגדלים נובע מכלל החיבור. □\square

(שימו לב ש-E1=∅E_1 = \emptyset תמיד, כי אין קודקוד עם אינדקס קטן מ-11.)

למה 1.2. לכל 1≤j≤n1 \le j \le n מתקיים ∣F∩Ej∣≥12∣Ej∣|F \cap E_j| \ge \tfrac12 |E_j|.

הוכחה. נתבונן ברגע שבו האלגוריתם מטפל ב-vjv_j. נסמן ב-pp את מספר השכנים של vjv_j שכבר נמצאים ב-UU וב-qq את מספר השכנים שכבר נמצאים ב-Uˉ\bar{U}. כל שכן של vjv_j בעל אינדקס i<ji<j כבר הוצב (האלגוריתם עובר על האינדקסים בסדר עולה), וכל שכן כזה מגדיר קשת של EjE_j; להפך, כל קשת של EjE_j מגיעה משכן כזה. לכן ∣Ej∣=p+q.|E_j| = p + q.

יש שני מקרים, לפי תנאי שלב 2.1:

  • אם p>qp > q, האלגוריתם מכניס את vjv_j ל-Uˉ\bar{U}. אז כל אחת מ-pp הקשתות אל השכנים שב-UU הופכת לקשת חתך, ולכן ∣F∩Ej∣≥p|F \cap E_j| \ge p. מכיוון ש-p>qp > q מתקיים 2p>p+q=∣Ej∣2p > p+q = |E_j|, ובפרט p≥12∣Ej∣p \ge \tfrac12|E_j|.
  • אחרת p≤qp \le q, והאלגוריתם מכניס את vjv_j ל-UU. אז כל אחת מ-qq הקשתות אל השכנים שב-Uˉ\bar{U} הופכת לקשת חתך, ולכן ∣F∩Ej∣≥q|F \cap E_j| \ge q. מכיוון ש-q≥pq \ge p מתקיים 2q≥p+q=∣Ej∣2q \ge p+q = |E_j|, כלומר q≥12∣Ej∣q \ge \tfrac12|E_j|.

הערה: נקודה עדינה שמותר לפספס בקריאה ראשונה — למה מותר לכתוב ״הופכת לקשת חתך״ בזמן עתיד ולא לחשוש שהחלטה מאוחרת יותר תקלקל אותה? כי שני הקצוות של קשת ב-EjE_j כבר סופיים ברגע שבו vjv_j מוצב: קצה אחד הוא vjv_j עצמו, והשני הוצב קודם. האלגוריתם לעולם אינו מזיז קודקוד שכבר הוצב, ולכן החברות של קשת ב-FF נקבעת סופית ברגע ההצבה של הקצה המאוחר יותר. זו בדיוק הסיבה שהפירוק מוגדר לפי האינדקס הגבוה ולא הנמוך. □\square

סיום ההוכחה. לפי למה 1.1 החתך FF מתפרק לפי אותה חלוקה, ולפי למה 1.2: ∣F∣  =  ∑j=1n∣F∩Ej∣  ≥  12∑j=1n∣Ej∣  =  12∣E∣.|F| \;=\; \sum_{j=1}^{n} |F \cap E_j| \;\ge\; \frac12 \sum_{j=1}^{n} |E_j| \;=\; \frac12 |E|.

מצד שני, כל חתך הוא תת-קבוצה של EE, ובפרט האופטימלי: OPT(G)≤∣E∣\mathrm{OPT}(G) \le |E|. לכן ∣F∣  ≥  12∣E∣  ≥  12⋅OPT(G),|F| \;\ge\; \frac12 |E| \;\ge\; \frac12 \cdot \mathrm{OPT}(G), והאלגוריתם הוא אלגוריתם קירוב ל-MAXCUT\mathrm{MAXCUT} ביחס קירוב 12\tfrac12. ■\blacksquare

הערה: גודל העזר כאן הוא ∣E∣|E| — כמות שהאלגוריתם ״שולט בה״ במובן שהוא סופר אותה חלק-חלק (EjE_j אחרי EjE_j), והיא חוסמת את OPT\mathrm{OPT} מלמעלה כי הבעיה היא בעיית מקסימום. השוו לשיעור 13: שם, בבעיית המינימום VC\mathrm{VC}, גודל העזר (הזיווג) חסם את OPT\mathrm{OPT} מלמטה. זהו אותו רעיון בשני הכיוונים.

משפט 2: אי-שוויון המשולש המוכלל

יהי G=(V,E)G=(V,E) גרף שלם עם משקלים w:E→R+w:E \to \mathbb{R}^{+} המקיימים את אי-שוויון המשולש. אז לכל v1,…,vk∈Vv_1,\dots,v_k \in V מתקיים w(v1,vk)  ≤  ∑j=1k−1w(vj,vj+1).w(v_1,v_k) \;\le\; \sum_{j=1}^{k-1} w(v_j, v_{j+1}).

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

הערה: ההוכחה הבאה אינה מופיעה בסיכום; היא ההשלמה הסטנדרטית באינדוקציה.

הוכחה. באינדוקציה על k≥2k \ge 2.

בסיס, k=2k=2: הטענה היא w(v1,v2)≤w(v1,v2)w(v_1,v_2) \le w(v_1,v_2) — נכון.

צעד: נניח שהטענה נכונה עבור k−1k-1 (k≥3k \ge 3). לפי אי-שוויון המשולש (הגדרה 2) עם x=v1x=v_1, y=vk−1y=v_{k-1}, z=vkz=v_k: w(v1,vk)  ≤  w(v1,vk−1)+w(vk−1,vk).w(v_1,v_k) \;\le\; w(v_1,v_{k-1}) + w(v_{k-1},v_k). לפי הנחת האינדוקציה על הסדרה v1,…,vk−1v_1,\dots,v_{k-1}: w(v1,vk−1)  ≤  ∑j=1k−2w(vj,vj+1).w(v_1,v_{k-1}) \;\le\; \sum_{j=1}^{k-2} w(v_j,v_{j+1}). נחבר את שני האי-שוויונות: w(v1,vk)  ≤  ∑j=1k−2w(vj,vj+1)+w(vk−1,vk)  =  ∑j=1k−1w(vj,vj+1).■w(v_1,v_k) \;\le\; \sum_{j=1}^{k-2} w(v_j,v_{j+1}) + w(v_{k-1},v_k) \;=\; \sum_{j=1}^{k-1} w(v_j,v_{j+1}). \qquad \blacksquare

הערה טכנית: הקודקודים בסדרה אינם חייבים להיות שונים, וזה חיוני — במשפט 3 נפעיל את הטענה על סיור שחוזר לקודקודים. אם vj=vj+1v_j = v_{j+1} מפרשים w(vj,vj+1)=0w(v_j,v_{j+1})=0; זה רק מקטין את האגף הימני, כלומר מחזק את הטענה, והבסיס k=2k=2 נשאר נכון גם כאשר v1=v2v_1=v_2.

משפט 3: MST + DFS הוא אלגוריתם קירוב ביחס 2 לבעיית הסוכן הנוסע המטרית

האלגוריתם (כפי שהוא בסיכום). לכל קלט G=(V,E)G=(V,E), w:E→R+w:E \to \mathbb{R}^{+}:

  1. מצא עץ פורש מינימלי TT של GG.
  2. הרץ DFS על TT.
  3. החזר את הקודקודים לפי סדר גילוים ב-DFS.

טענת פיזביליות. DFS על עץ פורש מגלה כל קודקוד של VV בדיוק פעם אחת, ולכן רשימת הגילוי היא תמורה של VV. הגרף GG שלם, ולכן כל שתי תמורות עוקבות מחוברות בקשת, וגם האחרון מחובר לראשון. לכן הרשימה מגדירה מעגל המילטוני — פתרון אפשרי לבעיה. □\square

ניתוח זמן ריצה. שלב 1 פולינומי (Prim/Kruskal). שלב 2 הוא O(∣V∣+∣E∣)O(|V|+|E|), ולמעשה O(∣V∣)O(|V|) כי TT עץ ויש בו ∣V∣−1|V|-1 קשתות. שלב 3 דורש רק את הפלט של השלב הקודם. סך הכול פולינומי בגודל הקלט. □\square

ניתוח יחס הקירוב. יהי G=(V,E)G=(V,E) עם w:E→R+w:E \to \mathbb{R}^{+} המקיימת את אי-שוויון המשולש. נסמן ב-TT עץ פורש מינימלי של GG, וב-CoptC_{\mathrm{opt}} את המעגל ההמילטוני בעל המשקל האופטימלי (המינימלי) ב-GG.

הבחנה 1 (כלשונה בסיכום). נסמן ב-T^\hat{T} את הגרף המתקבל מ-CoptC_{\mathrm{opt}} על ידי הסרת קשת אחת כלשהי. אז w(T)  ≤  w(T^)  ≤  w(Copt).w(T) \;\le\; w(\hat{T}) \;\le\; w(C_{\mathrm{opt}}).

הוכחה. אי-השוויון הימני: T^\hat{T} מתקבל מ-CoptC_{\mathrm{opt}} בהסרת קשת, ומשקל כל קשת אי-שלילי, ולכן ההסרה רק מקטינה את המשקל. אי-השוויון השמאלי: CoptC_{\mathrm{opt}} הוא מעגל העובר בכל קודקוד; הסרת קשת ממעגל משאירה מסלול העובר בכל הקודקודים, ומסלול כזה הוא בפרט עץ פורש של GG (קשיר, פורש, ובעל ∣V∣−1|V|-1 קשתות). מכיוון ש-TT עץ פורש מינימלי, משקלו קטן או שווה למשקל של כל עץ פורש, ובפרט של T^\hat{T}. □\square

הבחנה 2. אם נרשום את הקודקודים לפי סדר הביקורים של ה-DFS על TT — כלומר את הסיור הסגור המלא, שבו כל קשת של העץ נחצית פעמיים, פעם ״ברדת״ ופעם ״בעלייה״ — נקבל סיור PP בגרף המקיים w(P)=2 w(T).w(P) = 2\,w(T).

הוכחה. DFS על עץ, המתחיל בשורש כלשהו rr ומסתיים בחזרה ל-rr, חוצה כל קשת של העץ בדיוק פעמיים: פעם אחת בכיוון מהאב אל הבן ברגע גילוי הבן, ופעם אחת בכיוון ההפוך ברגע שהתת-עץ של הבן הסתיים. מכיוון שאלה כל צעדי הסיור, המשקל הכולל הוא ∑e∈T2w(e)=2w(T)\sum_{e \in T} 2w(e) = 2w(T). □\square

הערה: הסיכום כותב את שלב 3 של האלגוריתם כ״סדר הגילוי״ ואת הבחנה 2 כ״סדר הביקורים״. אלה שני עצמים שונים ואסור לבלבל ביניהם: סדר הביקורים הוא הסיור PP באורך 2(∣V∣−1)2(|V|-1) צעדים, שבו קודקוד יכול להופיע כמה פעמים; סדר הגילוי (preorder) הוא רשימת ההופעות הראשונות בלבד, שבה כל קודקוד מופיע בדיוק פעם אחת. PP אינו פתרון אפשרי לבעיה (הוא חוזר לקודקודים) — הוא רק גודל עזר.

הבחנה 3 (קיצורי הדרך). נסמן ב-CC את המעגל המתקבל מרשימת הקודקודים לפי סדר הגילוי — כלומר, מוחקים מ-PP את כל ההופעות החוזרות ומשאירים רק את ההופעה הראשונה של כל קודקוד. אז w(C)  ≤  w(P).w(C) \;\le\; w(P).

הוכחה. נסמן את סדר הגילוי u1=r,u2,…,unu_1=r, u_2, \dots, u_n, ואת הסיור PP כרשימת קודקודים p0=r,p1,…,p2(n−1)=rp_0=r, p_1, \dots, p_{2(n-1)}=r. לכל tt, נסמן ב-π(t)\pi(t) את המיקום ב-PP שבו utu_t מופיע לראשונה. לפי הגדרת סדר הגילוי, π(1)<π(2)<⋯<π(n)\pi(1) < \pi(2) < \dots < \pi(n).

המעגל CC מורכב מ-nn קשתות: u1u2,u2u3,…,un−1unu_1u_2, u_2u_3, \dots, u_{n-1}u_n, ולבסוף unu1u_nu_1. לכל 1≤t≤n−11 \le t \le n-1, הקטע של PP בין המיקום π(t)\pi(t) למיקום π(t+1)\pi(t+1) הוא סדרת קודקודים המתחילה ב-utu_t ומסתיימת ב-ut+1u_{t+1}; לפי משפט 2, w(ut,ut+1)  ≤  ∑s=π(t)π(t+1)−1w(ps,ps+1).w(u_t, u_{t+1}) \;\le\; \sum_{s=\pi(t)}^{\pi(t+1)-1} w(p_s, p_{s+1}). באופן דומה, עבור הקשת הסוגרת unu1u_nu_1: הקטע של PP מהמיקום π(n)\pi(n) ועד סוף הסיור מתחיל ב-unu_n ומסתיים ב-p2(n−1)=r=u1p_{2(n-1)}=r=u_1, ולכן w(un,u1)  ≤  ∑s=π(n)2(n−1)−1w(ps,ps+1).w(u_n, u_1) \;\le\; \sum_{s=\pi(n)}^{2(n-1)-1} w(p_s, p_{s+1}). הקטעים [π(1),π(2)],[π(2),π(3)],…,[π(n),2(n−1)][\pi(1),\pi(2)], [\pi(2),\pi(3)], \dots, [\pi(n), 2(n-1)] הם רצופים, זרים בצעדיהם, ומכסים את כל הסיור מהמיקום π(1)=0\pi(1)=0 ועד סופו. לכן סכום האגפים הימניים הוא בדיוק w(P)w(P), וסכום האגפים השמאליים הוא בדיוק w(C)w(C). □\square

הערה: בסיכום הבחנה 3 מקוצרת ל״אז מאי-שוויון המשולש w(C)≤w(P)w(C) \le w(P)״. הפירוט שלמעלה הוא מה שהקיצור הזה מייצג. הנקודה הלא-טריוויאלית היא שהקטעים זרים ומכסים — בלי זה היינו סופרים צעדים של PP יותר מפעם אחת ומקבלים חסם חלש יותר.

סיום ההוכחה. נשרשר את שלוש ההבחנות: w(C)  ≤(3)  w(P)  =(2)  2 w(T)  ≤(1)  2 w(Copt).w(C) \;\overset{(3)}{\le}\; w(P) \;\overset{(2)}{=}\; 2\,w(T) \;\overset{(1)}{\le}\; 2\,w(C_{\mathrm{opt}}). CC הוא בדיוק הפלט של האלגוריתם, והוא פתרון אפשרי; לכן האלגוריתם הוא אלגוריתם קירוב ביחס 22 לבעיית הסוכן הנוסע כשהמשקלים מקיימים את אי-שוויון המשולש. ■\blacksquare

הערה: אי-שוויון המשולש נחוץ רק בהבחנה 3. הבחנות 1 ו-2 נכונות בכל גרף ממושקל אי-שלילי. זו הסיבה שהאלגוריתם עצמו ניתן להרצה על כל מופע TSP\mathrm{TSP} — אבל אין לו שום ערובת יחס בלי ההנחה, ולפי שיעור 13 גם לא יכולה להיות לו כזו אלא אם P=NP\mathrm{P}=\mathrm{NP}.

משפט 4: First-Fit הוא אלגוריתם קירוב ביחס 2 לבעיית האריזה למכלים

האלגוריתם (כפי שהוא בסיכום). לכל קלט a1,…,ana_1,\dots,a_n:

  1. לכל 1≤j≤n1 \le j \le n:
    1. הכנס את aja_j לקבוצה הראשונה שניתן להכניס אליה את aja_j; אם אין כזו — פתח קבוצה חדשה.
  2. החזר את החלוקה.

טענת פיזביליות. האלגוריתם מכניס כל aja_j לקבוצה אחת בדיוק, ולכן הפלט הוא חלוקה של {a1,…,an}\{a_1,\dots,a_n\} לקבוצות זרות. פריט מוכנס לקבוצה קיימת רק אם הסכום שלה נשאר ≤1\le 1, ואם נפתחת קבוצה חדשה — סכומה הוא aj≤1a_j \le 1 (כאן נדרש התנאי aj∈(0,1]a_j \in (0,1] מהגדרה 4). לכן כל הקבוצות חוקיות והפלט הוא פתרון אפשרי. □\square

ניתוח זמן ריצה. באיטרציה jj יש לכל היותר j−1≤nj-1 \le n קבוצות פתוחות, וסריקתן לפי הסדר עולה O(n)O(n) (החזקת הסכום הנוכחי של כל קבוצה מאפשרת בדיקה ב-O(1)O(1) לקבוצה). לכן זמן הריצה הוא O(n2)O(n^2), פולינומי בגודל הקלט. □\square

ניתוח יחס הקירוב. יהיו a1,…,an∈(0,1]a_1,\dots,a_n \in (0,1]. נסמן ב-mm את מספר הקבוצות שהחזיר האלגוריתם וב-f:[n]→[m]f:[n] \to [m] את החלוקה שהוא מחזיר. נסמן ב-moptm_{\mathrm{opt}} את מספר הקבוצות המינימלי האפשרי לקלט הזה, וב-fopt:[n]→[mopt]f_{\mathrm{opt}}:[n] \to [m_{\mathrm{opt}}] חלוקה אופטימלית.

למה 4.1 (חסם תחתון על האופטימום). ∑i=1nai  ≤  mopt\displaystyle \sum_{i=1}^{n} a_i \;\le\; m_{\mathrm{opt}}.

הוכחה. נחלק את הסכום לפי הקבוצות של החלוקה האופטימלית — זו חלוקה של קבוצת האינדקסים, ולכן החלוקה חוקית: ∑i=1nai  =  ∑j=1mopt  ∑i: fopt(i)=jai  ≤  ∑j=1mopt1  =  mopt,\sum_{i=1}^{n} a_i \;=\; \sum_{j=1}^{m_{\mathrm{opt}}} \; \sum_{i:\, f_{\mathrm{opt}}(i)=j} a_i \;\le\; \sum_{j=1}^{m_{\mathrm{opt}}} 1 \;=\; m_{\mathrm{opt}}, כאשר אי-השוויון האמצעי הוא בדיוק אילוץ הפיזביליות: הסכום הפנימי הוא סכום האיברים שנכנסו לקבוצה jj בחלוקה האופטימלית, והוא חסום על ידי 11. □\square

זהו גודל העזר של המשפט: ∑ai\sum a_i הוא מספר שהאלגוריתם ״רואה״ ישירות, והוא חוסם את OPT\mathrm{OPT} מלמטה — כנדרש בבעיית מינימיזציה.

למה 4.2 (ההבחנה המרכזית). בחלוקה שמחזיר האלגוריתם יש לכל היותר קבוצה אחת שסכום האיברים בה הוא ≤12\le \tfrac12.

הוכחה. נניח בשלילה שקיימים 1≤ℓ<j≤m1 \le \ell < j \le m כך שגם בקבוצה ה-ℓ\ell וגם בקבוצה ה-jj סכום האיברים (בסוף הריצה) אינו יותר מ-12\tfrac12.

הקבוצה ה-jj נפתחה בשלב כלשהו של הריצה; נסמן ב-i0i_0 את האינדקס של הפריט שבעטיו היא נפתחה, כלומר ai0a_{i_0} הוא הפריט הראשון שהוכנס אליה. מכיוון שסכום כל איברי הקבוצה ה-jj בסוף הריצה הוא ≤12\le \tfrac12, וכל האיברים חיוביים, בפרט ai0  ≤  12.a_{i_0} \;\le\; \tfrac12.

כעת נתבונן ברגע שבו האלגוריתם טיפל ב-ai0a_{i_0}, ונסמן ב-SℓS_\ell את סכום האיברים שהיו בקבוצה ה-ℓ\ell באותו רגע. מכיוון ש-ℓ<j\ell < j, הקבוצה ה-ℓ\ell כבר הייתה פתוחה (הקבוצות נפתחות לפי הסדר), והאלגוריתם בדק אותה לפני שפתח קבוצה חדשה. מכיוון שהאלגוריתם לעולם אינו מוציא איבר מקבוצה, SℓS_\ell קטן או שווה לסכום הסופי של אותה קבוצה, כלומר Sℓ≤12S_\ell \le \tfrac12. לכן Sℓ+ai0  ≤  12+12  =  1,S_\ell + a_{i_0} \;\le\; \tfrac12 + \tfrac12 \;=\; 1, כלומר ai0a_{i_0} כן היה נכנס לקבוצה ה-ℓ\ell, והאלגוריתם היה מכניס אותו אליה במקום לפתוח קבוצה חדשה — בסתירה להנחה ש-ai0a_{i_0} פתח את הקבוצה ה-jj. □\square

הערה: בעמוד 4 בסיכום שורת ״סכום האיברים בקבוצה ה-ℓ\ell באותו הרגע״ נקראת בקושי וסימן אי-השוויון אינו חד-משמעי. הכיוון היחיד שנותן סתירה הוא ≤12\le \tfrac12 (כלומר: הקבוצה ה-ℓ\ell הייתה ריקה מספיק כדי לקלוט את ai0a_{i_0}), וכך נכתב כאן. הכיוון ההפוך היה סותר את הנחת השלילה עצמה ומייתר את הטיעון.

סיום ההוכחה. לפי למה 4.2, לפחות m−1m-1 מהקבוצות שהחזיר האלגוריתם הן בעלות סכום גדול ממש מ-12\tfrac12. לכן, בשילוב עם למה 4.1: mopt  ≥  ∑i=1nai  =  ∑j=1m  ∑i: f(i)=jai  >  12(m−1).m_{\mathrm{opt}} \;\ge\; \sum_{i=1}^{n} a_i \;=\; \sum_{j=1}^{m} \; \sum_{i:\, f(i)=j} a_i \;>\; \frac12 (m-1). (אי-השוויון האחרון חזק ממש: לפחות m−1m-1 מהמחוברים גדולים ממש מ-12\tfrac12, והנותר אי-שלילי. גם במקרה m=1m=1 הוא נכון, כי ∑ai>0=12⋅0\sum a_i > 0 = \tfrac12 \cdot 0.)

מכאן 2mopt>m−12m_{\mathrm{opt}} > m-1, כלומר m  <  2mopt+1.m \;<\; 2m_{\mathrm{opt}} + 1. וכיוון שמדובר במספרים שלמים, נקבל m  ≤  2mopt.m \;\le\; 2m_{\mathrm{opt}}. לכן First-Fit הוא אלגוריתם קירוב ביחס 22 לבעיית האריזה למכלים. ■\blacksquare

הערה: הצעד האחרון הוא הצעד היחיד בשיעור שמשתמש בשלמות. בלעדיו היינו נשארים עם החסם החלש יותר m≤2mopt+1m \le 2m_{\mathrm{opt}}+1, שהוא ״קירוב ביחס 2 עד כדי תוספת קבועה״ ולא קירוב ביחס 2. שווה לזכור את התרגיל הזה — הוא חוזר.

הערה (מחוץ לסיכום): ההוכחה מראה שהיחס של First-Fit הוא לכל היותר 22; היא אינה טוענת שהחסם הדוק. ידוע שהניתוח האסימפטוטי המדויק של First-Fit טוב יותר, וגם ידוע שלבעיית האריזה אין אלגוריתם קירוב ביחס טוב מ-32\tfrac32 אלא אם P=NP\mathrm{P}=\mathrm{NP} (רדוקציה מ-PARTITION\mathrm{PARTITION}: קירוב טוב מ-32\tfrac32 היה מבחין בין mopt=2m_{\mathrm{opt}}=2 ל-mopt=3m_{\mathrm{opt}}=3). שני הדברים האלה אינם בסיכום ואינם נדרשים למבחן; הם מובאים כאן רק כדי שלא תסיקו מהמשפט שהאלגוריתם ״גרוע פי 2״ בפועל.


דוגמאות ותרגילים מהשיעור

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

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

דוגמה 1: האלגוריתם החמדני ל-MAXCUT על מעגל באורך 5

יהי C5C_5 עם V={v1,…,v5}V=\{v_1,\dots,v_5\} וקשתות v1v2,  v2v3,  v3v4,  v4v5,  v5v1v_1v_2,\; v_2v_3,\; v_3v_4,\; v_4v_5,\; v_5v_1. הפירוק לפי האינדקס הגבוה: E1=∅,E2={v1v2},E3={v2v3},E4={v3v4},E5={v4v5,  v5v1}.E_1=\emptyset,\quad E_2=\{v_1v_2\},\quad E_3=\{v_2v_3\},\quad E_4=\{v_3v_4\},\quad E_5=\{v_4v_5,\;v_5v_1\}.

מעקב אחר הריצה (pp = שכנים ב-UU, qq = שכנים ב-Uˉ\bar{U}, בזמן הטיפול):

iiשכנים שכבר הוצבוppqqp>qp>q?היעדUUUˉ\bar{U}
1—00לאUU{v1}\{v_1\}∅\emptyset
2v1∈Uv_1 \in U10כןUˉ\bar{U}{v1}\{v_1\}{v2}\{v_2\}
3v2∈Uˉv_2 \in \bar{U}01לאUU{v1,v3}\{v_1,v_3\}{v2}\{v_2\}
4v3∈Uv_3 \in U10כןUˉ\bar{U}{v1,v3}\{v_1,v_3\}{v2,v4}\{v_2,v_4\}
5v4∈Uˉ,  v1∈Uv_4 \in \bar{U},\; v_1 \in U11לאUU{v1,v3,v5}\{v_1,v_3,v_5\}{v2,v4}\{v_2,v_4\}

הפלט: U={v1,v3,v5}U=\{v_1,v_3,v_5\}. החתך המושרה הוא F={v1v2,  v2v3,  v3v4,  v4v5}F=\{v_1v_2,\;v_2v_3,\;v_3v_4,\;v_4v_5\}, כלומר ∣F∣=4|F|=4 (הקשת v5v1v_5v_1 אינה בחתך, כי שני קצותיה ב-UU).

בדיקת הלמות: ∣E∣=∑j∣Ej∣=0+1+1+1+2=5|E| = \sum_j |E_j| = 0+1+1+1+2 = 5 ✓. לכל jj: ∣F∩E2∣=1≥12|F \cap E_2|=1 \ge \tfrac12, ∣F∩E3∣=1≥12|F \cap E_3|=1 \ge \tfrac12, ∣F∩E4∣=1≥12|F \cap E_4|=1 \ge \tfrac12, ו-∣F∩E5∣=1≥12⋅2=1|F \cap E_5|=1 \ge \tfrac12 \cdot 2 = 1 ✓ — כאן הלמה הדוקה, וזה בדיוק המקרה p=qp=q בצעד 5. סך הכול ∣F∣=4≥12⋅5=2.5|F|=4 \ge \tfrac12 \cdot 5 = 2.5 ✓.

מהו האופטימום? ב-C5C_5 (מעגל אי-זוגי) אי אפשר לחתוך את כל 55 הקשתות, כי חתך של גרף לא-דו-צדדי אינו יכול להכיל את כל הקשתות; לכן OPT=4\mathrm{OPT}=4, והאלגוריתם החזיר את האופטימום.

תרגיל. הריצו את אותו אלגוריתם על K3K_3 עם הסדר v1,v2,v3v_1,v_2,v_3. פתרון. v1→Uv_1 \to U; v2v_2: p=1,q=0⇒Uˉp=1,q=0 \Rightarrow \bar{U}; v3v_3: p=1p=1 (בגלל v1v_1), q=1q=1 (בגלל v2v_2), לא p>qp>q, ולכן v3→Uv_3 \to U. מתקבל U={v1,v3}U=\{v_1,v_3\}, F={v1v2,v2v3}F=\{v_1v_2,v_2v_3\}, ∣F∣=2|F|=2. גם כאן OPT=2\mathrm{OPT}=2 והבטחת הקירוב 2≥12⋅32 \ge \tfrac12 \cdot 3 מתקיימת בהפרש גדול.

דוגמה 2: MST + DFS על מלבן

V={a,b,c,d}V=\{a,b,c,d\} בנקודות a=(0,0)a=(0,0), b=(0,3)b=(0,3), c=(4,0)c=(4,0), d=(4,3)d=(4,3) עם מרחקים אוקלידיים — ולכן המשקלים מטריים: w(ab)=3,w(cd)=3,w(ac)=4,w(bd)=4,w(ad)=5,w(bc)=5.w(ab)=3,\quad w(cd)=3,\quad w(ac)=4,\quad w(bd)=4,\quad w(ad)=5,\quad w(bc)=5.

שלב 1 — עץ פורש מינימלי. Kruskal לפי סדר עולה: ab (3)ab\,(3) ✓, cd (3)cd\,(3) ✓, ac (4)ac\,(4) ✓ (מחבר את שני הרכיבים), ואז עוצרים עם 33 קשתות. לכן T={ab, cd, ac}T=\{ab,\,cd,\,ac\} ו-w(T)=10w(T)=10.

שלב 2 — DFS. נתחיל ב-aa; שכניו ב-TT הם bb ו-cc. נניח שמבקרים ב-bb ראשון. סדר הביקורים המלא (הסיור PP): a→b→a→c→d→c→a,a \to b \to a \to c \to d \to c \to a, ומשקלו 3+3+4+3+3+4=20=2⋅10=2w(T)3+3+4+3+3+4 = 20 = 2 \cdot 10 = 2w(T) ✓ (הבחנה 2).

שלב 3 — סדר הגילוי. ההופעות הראשונות: a, b, c, da,\,b,\,c,\,d. המעגל המוחזר: C=a→b→c→d→a,w(C)=3+5+3+5=16.C = a \to b \to c \to d \to a, \qquad w(C) = 3+5+3+5 = 16. בדיקה: w(C)=16≤w(P)=20w(C)=16 \le w(P)=20 ✓ (קיצור הדרך b→cb \to c החליף את הקטע b→a→cb \to a \to c שמשקלו 3+4=73+4=7, במחיר 55).

האופטימום. המעגל a→b→d→c→aa \to b \to d \to c \to a במשקל 3+4+3+4=143+4+3+4=14 הוא המינימלי. אכן 16≤2⋅14=2816 \le 2 \cdot 14 = 28 ✓, ובפועל היחס הוא 16/14≈1.1416/14 \approx 1.14 — הרבה יותר טוב מהערובה.

בדיקת הבחנה 1: הסרת הקשת caca מ-CoptC_{\mathrm{opt}} נותנת את המסלול a−b−d−ca-b-d-c במשקל 1010, ואכן w(T)=10≤w(T^)=10≤w(Copt)=14w(T)=10 \le w(\hat{T})=10 \le w(C_{\mathrm{opt}})=14 ✓.

תרגיל: כמה חשוב סדר ה-DFS? הריצו שוב עם ביקור ב-cc לפני bb. פתרון. סדר הגילוי הוא a,c,d,ba,c,d,b, והמעגל המוחזר הוא a→c→d→b→aa \to c \to d \to b \to a במשקל 4+3+4+3=144+3+4+3=14 — בדיוק האופטימום. מסקנה: האלגוריתם אינו דטרמיניסטי ביחס לסדר הסריקה, וההוכחה מבטיחה את היחס 22 עבור כל סדר. אין צורך לבחור סדר ״נכון״.

דוגמה 3: First-Fit על ארבעה פריטים

יהי הקלט a=(0.4,  0.7,  0.3,  0.6)a = (0.4,\; 0.7,\; 0.3,\; 0.6).

jjaja_jקבוצות פתוחות (סכומים)ההחלטהאחרי
10.40.4—אין קבוצה, פותח קבוצה 1(0.4)(0.4)
20.70.7(0.4)(0.4)0.4+0.7=1.1>10.4+0.7=1.1>1, פותח קבוצה 2(0.4), (0.7)(0.4),\,(0.7)
30.30.3(0.4),(0.7)(0.4),(0.7)0.4+0.3=0.7≤10.4+0.3=0.7 \le 1 ✓ לקבוצה 1(0.7), (0.7)(0.7),\,(0.7)
40.60.6(0.7),(0.7)(0.7),(0.7)0.7+0.6>10.7+0.6>1 בשתיהן, פותח קבוצה 3(0.7),(0.7),(0.6)(0.7),(0.7),(0.6)

הפלט: m=3m=3 קבוצות — {0.4,0.3},  {0.7},  {0.6}\{0.4,0.3\},\;\{0.7\},\;\{0.6\}.

האופטימום. {0.4,0.6}\{0.4,0.6\} (סכום 1.01.0) ו-{0.7,0.3}\{0.7,0.3\} (סכום 1.01.0) — לכן mopt=2m_{\mathrm{opt}}=2, וזהו מינימום כי ∑ai=2.0>1\sum a_i = 2.0 > 1 מחייב לפחות שתי קבוצות.

בדיקת ההוכחה על הדוגמה. סכומי הקבוצות של האלגוריתם הם 0.7, 0.7, 0.60.7,\,0.7,\,0.6 — כולם >12> \tfrac12, ולכן ההבחנה של למה 4.2 (״לכל היותר קבוצה אחת עם סכום ≤12\le \tfrac12״) מתקיימת בשופי. השרשרת: mopt=2  ≥  ∑ai=2.0  >  12(m−1)=12⋅2=1    ✓,m_{\mathrm{opt}} = 2 \;\ge\; \sum a_i = 2.0 \;>\; \tfrac12(m-1) = \tfrac12 \cdot 2 = 1 \;\;✓, ומכאן m=3<2⋅2+1=5m=3 < 2 \cdot 2 + 1 = 5, כלומר m≤4m \le 4 — נכון, אם כי כאן רופף. היחס בפועל הוא 3/23/2.

תרגיל: מתי בכל זאת נוצרת קבוצה ״קלה״? פתרון. קחו a=(0.6, 0.7, 0.4)a=(0.6,\,0.7,\,0.4). First-Fit מחזיר {0.6},{0.7},{0.4}\{0.6\},\{0.7\},\{0.4\}, והקבוצה השלישית בעלת סכום 0.4≤120.4 \le \tfrac12 — והיא היחידה כזו, וגם האחרונה שנפתחה. זה לא במקרה: הטיעון של למה 4.2 מראה שקבוצה ״קלה״ אינה יכולה להיפתח כאשר כבר קיימת קבוצה ״קלה״ לפניה.


הערות מהשיעור

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

  • ההערה הכחולה בעמוד 1: ליד הגדרת EjE_j רשום ״EjE_j קבוצת הקשתות ש-vjv_j יקבע את גורלן״. זו לא הערת נוי — היא ההסבר למה הפירוק חייב להיות לפי האינדקס הגבוה. אם היינו מפרקים לפי האינדקס הנמוך, כשהאלגוריתם היה מטפל ב-vjv_j עוד לא היה ידוע לאן ילכו הקצוות השניים, ואי אפשר היה להסיק דבר.
  • ההערה הכחולה בעמוד 2: ליד הגדרת בעיית הסוכן הנוסע רשום במפורש ״לכל x,y,z∈Vx,y,z \in V: w(xz)≤w(xy)+w(yz)w(xz) \le w(xy)+w(yz)״ — כלומר, אי-שוויון המשולש הוא חלק מהגדרת הקלט, לא הנחה נוספת שנוסיף בניתוח. מופע שאינו מקיים אותו אינו קלט חוקי לבעיה הזו.
  • ההערות הכחולות בעמוד 3: מתחת לשרשרת w(T)≤w(T^)≤w(Copt)w(T) \le w(\hat{T}) \le w(C_{\mathrm{opt}}) רשומות שתי ההצדקות בנפרד — ״כי TT מינימלי״ ו״כי ww אי-שלילי״. זכרו ששניהם נדרשים; רבים כותבים במבחן רק את הראשון.
  • ההערה הכחולה בעמוד 3, בבעיית האריזה: מתחת לסכום הפנימי רשום ״סכום האיברים שנכנסו לקבוצה jj״ עם החסם 11 — כלומר הפיזביליות של האופטימום היא שנותנת את למה 4.1.
  • הצלבה עם שיעור 13 — הנקודה שהכי כדאי להבין מהשיעור: בשיעור 13 הוכח שקירוב ביחס קבוע ל-TSP\mathrm{TSP} הכללית שקול ל-P=NP\mathrm{P}=\mathrm{NP}, וכאן מתקבל קירוב ביחס 22. אלה אינם סותרים, כי המופעים שהרדוקציה של שיעור 13 בונה (משקל 11 לקשתות המקוריות ו-α∣V∣+1\alpha|V|+1 לשאר) מפרים את אי-שוויון המשולש בגסות. הנחת המטריות אינה קוסמטית — היא בדיוק מה שמפרק את בניית הקושי.
  • הצלבה עם שיעור 13 — שני קירובים ½ ל-MAXCUT\mathrm{MAXCUT}: חיפוש מקומי (שיעור 13) ואלגוריתם חמדני חד-מעברי (כאן). שניהם נותנים ∣F∣≥12∣E∣|F| \ge \tfrac12|E|, אבל בדרכים שונות: החיפוש המקומי משתמש בתנאי אופטימליות מקומית וספירה כפולה על הקודקודים, והחמדן משתמש בפירוק ל-EjE_j וספירה על הקשתות. במבחן שאלה יכולה לבקש כל אחד מהם בשמו; שימו לב מה בדיוק נשאלתם.

פערים בין הסיכום להקלטה

לשיעור הזה אין הקלטה בקורפוס — זו העובדה החשובה ביותר בקובץ הזה, והיא נבדקה ולא הונחה.

  • מקור: תמלול 19 (המפגש הקודם). הפער: התמלול נגמר ב-[01:26:00][01{:}26{:}00] בדיוק בסוף עמוד 5 של הסיכום של שיעור 13 — על שקילות TSP\mathrm{TSP} ל-P=NP\mathrm{P}=\mathrm{NP} — וחותם ב״שאלות?״. הוא אינו גולש אל החומר של שיעור 14. ההכרעה: אינו נרשם כמקור.
  • מקור: תמלול 20 (המפגש הבא). הפער: התמלול הוא כולו אלגוריתמים אקראיים — בעיית המזכיר ואימות כפל מטריצות — ואינו נוגע באלגוריתמי קירוב מלבד אמירה צופה פני עתיד ב-[00:34:34][00{:}34{:}34] (״נשלב אלגוריתמים אקראיים עם אלגוריתמי קירוב״). ההכרעה: אינו נרשם כמקור.
  • מקור: הקורפוס בכללותו. הפער: קיים פער אמיתי בהקלטות בין שני המפגשים הללו, כלומר המפגש שהסיכום הזה מתעד מעולם לא הוקלט. ההכרעה: sources.transcripts נשאר רשימה ריקה, confidence נקבע ל-medium, וכל תוכן הקובץ נשען על ארבעת עמודי הסיכום בתוספת השלמה מתמטית סטנדרטית — המסומנת לאורך כל הקובץ ב-> **הערה:**.

מה בדיוק מגיע מהסיכום, ומה הושלם כאן.

  • מקור: עמודים 1–4 בסיכום. הפער: — . ההכרעה: מהסיכום, מילה במילה מבחינת התוכן: שלושת האלגוריתמים (החמדני ל-MAXCUT\mathrm{MAXCUT}, MST+DFS, First-Fit) על כל שלביהם; הגדרת EjE_j וההערה הכחולה עליה; טענות ⋃Ej=E\bigcup E_j = E, הזרות, ו-∣E∣=∑∣Ej∣|E|=\sum|E_j|; אי-השוויון ∣F∩Ej∣≥12∣Ej∣|F \cap E_j| \ge \tfrac12|E_j| והמסקנה ∣F∣≥12∣E∣|F| \ge \tfrac12|E|; ניתוח זמן הריצה O(∣V∣⋅∣E∣)O(|V|\cdot|E|); ניסוח אי-שוויון המשולש והצורה המוכללת שלו; הבחנה 1 עם שתי ההצדקות; w(P)=2w(T)w(P)=2w(T); w(C)≤w(P)=2w(T)≤2w(Copt)w(C) \le w(P) = 2w(T) \le 2w(C_{\mathrm{opt}}); הגדרת בעיית האריזה; למה 4.1 על שרשרת הסכומים; למה 4.2 והוכחתה בשלילה; והמעבר m<2mopt+1⇒m≤2moptm<2m_{\mathrm{opt}}+1 \Rightarrow m \le 2m_{\mathrm{opt}}.
  • מקור: הסיכום מציג את אי-השוויון המוכלל כ״תזכורת״ בלי הוכחה. הפער: אין הוכחה. ההכרעה: נוספה הוכחה באינדוקציה (משפט 2) המסומנת כהשלמה, כולל הטיפול במקרה vj=vj+1v_j=v_{j+1} הנדרש לשימוש בסיור.
  • מקור: הסיכום כותב ״אז מאי-שוויון המשולש w(C)≤w(P)w(C) \le w(P)״. הפער: המעבר מקוצר ואינו מסביר למה קטעי הסיור זרים ומכסים. ההכרעה: הבחנה 3 כתובה כאן במלואה עם מיפוי ההופעות הראשונות π(t)\pi(t) וטיעון הכיסוי; מסומן כהשלמה.
  • מקור: עמוד 4 בסיכום, בשורה על סכום הקבוצה ה-ℓ\ell ״באותו הרגע״. הפער: סימן אי-השוויון אינו קריא באופן חד-משמעי. ההכרעה: נכתב ≤12\le \tfrac12, שכן זהו הכיוון היחיד שמייצר את הסתירה; צוין ב-open_questions.
  • מקור: הסיכום, ניתוח זמן הריצה של האלגוריתם החמדני. הפער: O(∣V∣⋅∣E∣)O(|V| \cdot |E|) הוא חסם נכון אך רופף. ההכרעה: נשמר כלשונו כניתוח ״של השיעור״, ונוסף חסם הדוק O(∣V∣+∣E∣)O(|V|+|E|) בהערה מסומנת — בלי לתקן את הסיכום, כי הוא אינו שגוי.
  • מקור: הסיכום אינו מגדיר מחדש ״יחס קירוב״ לבעיית מקסימום. הפער: ההגדרה ניתנה בשיעור 13 לבעיית מינימיזציה בלבד. ההכרעה: ההגדרה למקסימיזציה (α≤1\alpha \le 1, v(A(I))≥α OPTv(A(I)) \ge \alpha\,\mathrm{OPT}) שוחזרה בסעיף הרקע והותאמה לניסוח ״ביחס קירוב 12\tfrac12״ שבעמוד 2.
  • מקור: הסיכום. הפער: אין בסיכום אף דוגמה מספרית, אף מופע מפורט ואף תרגיל. ההכרעה: סעיף הדוגמאות כולו נבנה כאן ומסומן ככזה בראשו; כל מופע נבחר כדי לבדוק נקודה ספציפית בהוכחה (הידוק למה 1.2, השפעת סדר ה-DFS, ומקרה שבו First-Fit מפסיד לאופטימום).
  • מקור: מחוץ לשני המקורות. הפער: אין בסיכום דיון בהידוק היחס. ההכרעה: נוספה הערה קצרה ומסומנת שמציינת שהיחס 22 אינו נטען כהדוק ושידועה גם תוצאת אי-קירוב 32\tfrac32 לבעיית האריזה; מודגש שם שזה מחוץ לחומר.
  • מקור: קונבנציות הכתיבה של הסדרה. הפער: — . ההכרעה: שמות בעיות ומחלקות נכתבים ב-\mathrm{} (MAXCUT\mathrm{MAXCUT}, TSP\mathrm{TSP}, P\mathrm{P}, NP\mathrm{NP}), ואילו שמות המשתנים והאינדקסים (U,Uˉ,Ej,F,T,T^,P,C,Copt,m,mopt,f,fopt,aiU,\bar{U},E_j,F,T,\hat{T},P,C,C_{\mathrm{opt}},m,m_{\mathrm{opt}},f,f_{\mathrm{opt}},a_i) נשמרו בדיוק כפי שהם בסיכום.

סיכום ונקודות למבחן

שלוש התוצאות שיש לזכור.

בעיהסוגאלגוריתםיחסגודל העזר
MAXCUT\mathrm{MAXCUT}מקסימוםחמדני חד-מעברי: כל קודקוד לצד עם פחות שכנים שהוצבו12\tfrac12∥E∥≥OPT\|E\| \ge \mathrm{OPT}
TSP\mathrm{TSP} מטרימינימוםMST, ואז DFS, ואז סדר הגילוי22w(T)≤w(Copt)w(T) \le w(C_{\mathrm{opt}})
אריזה למכליםמינימוםFirst-Fit22∑ai≤mopt\sum a_i \le m_{\mathrm{opt}}

המבנה הקבוע של תשובה מלאה. לכל שאלה מהסוג הזה, כתבו שלושה סעיפים נפרדים ומסומנים: (1) פיזביליות — למה הפלט הוא פתרון חוקי לבעיה; (2) זמן ריצה — למה פולינומי, עם ספירה; (3) יחס — הצד הטריוויאלי, ואז החסם האמיתי דרך גודל העזר. ניתוח שמדלג על (1) אינו שלם גם אם (3) מושלם.

מלכודות סטנדרטיות.

  1. כיוון האי-שוויון. בבעיית מקסימום α≤1\alpha \le 1 ומוכיחים ALG≥α⋅OPT\mathrm{ALG} \ge \alpha \cdot \mathrm{OPT}; בבעיית מינימום α≥1\alpha \ge 1 ומוכיחים ALG≤α⋅OPT\mathrm{ALG} \le \alpha \cdot \mathrm{OPT}. חצי מהשגיאות בשאלות קירוב הן היפוך הכיוון.
  2. חסימת OPT\mathrm{OPT} מהצד הלא נכון. בבעיית מקסימום צריך חסם עליון על OPT\mathrm{OPT} (כאן ∣E∣|E|); בבעיית מינימום חסם תחתון (כאן w(T)w(T) ו-∑ai\sum a_i).
  3. סדר הגילוי מול סדר הביקורים. PP (הסיור, כל קשת פעמיים) הוא גודל עזר בלבד ואינו פתרון אפשרי; CC (סדר הגילוי) הוא הפלט. אל תחזירו את PP.
  4. שכחת אי-שוויון המשולש. בלעדיו אין שום ערובה על w(C)w(C) מול w(P)w(P), ולפי שיעור 13 גם לא יכולה להיות. אם בשאלה לא נאמר שהמשקלים מטריים — אל תשתמשו במשפט 3.
  5. הפירוק לפי האינדקס הגבוה. לפי הנמוך ההוכחה נשברת. אם התבקשתם להוכיח את למה 1.2, אמרו במפורש למה שני הקצוות של קשת ב-EjE_j סופיים ברגע ההצבה של vjv_j.
  6. שלמות ואי-שוויון חזק ממש. m<2mopt+1m < 2m_{\mathrm{opt}}+1 גורר m≤2moptm \le 2m_{\mathrm{opt}} רק כי mm שלם — אמרו את זה. ובאותה נשימה: אם תכתבו ∑ai≥12(m−1)\sum a_i \ge \tfrac12(m-1) במקום >>, תקבלו רק m≤2mopt+1m \le 2m_{\mathrm{opt}}+1 ותפסידו את המשפט.

צ׳ק-ליסט אחרי השיעור. אחרי השיעור הזה צריך לדעת: לרוץ ידנית על שלושת האלגוריתמים על מופע קטן; להוכיח את שלוש הלמות המרכזיות (הפירוק ל-EjE_j; w(T)≤w(Copt)w(T) \le w(C_{\mathrm{opt}}); ״לכל היותר תא אחד עם סכום ≤12\le \tfrac12״); להסביר במשפט אחד למה משפט 3 אינו סותר את תוצאת האי-קירוב של שיעור 13; ולזהות, בשאלה חדשה, מהו גודל העזר שיחסום את OPT\mathrm{OPT} מהצד הנכון.

שאלות שנשארו פתוחות

  • לשיעור הזה אין הקלטה בקורפוס: תמלול 19 נגמר בסוף עמוד 5 של הסיכום של שיעור 13, ותמלול 20 הוא כולו אלגוריתמים אקראיים. כל הקובץ נשען על ארבעת עמודי הסיכום בלבד.
  • אין חותמות זמן בשום מקום בקובץ, ולכן אי אפשר לצטט הערות מרצה, שאלות סטודנטים או מוטיבציה שנאמרה בעל פה.
  • הסיכום אינו מגדיר במפורש את יחס הקירוב לבעיית מקסימום; ההגדרה כאן שוחזרה משיעור 13 והותאמה לניסוח "ביחס קירוב ½" שבעמוד 2.
  • עמוד 4 בסיכום: בשורת "סך האיברים בתא ה-ℓ באותו הרגע" סימן אי-השוויון נקרא בקושי; ההקשר מחייב ≤ ½ (אחרת אין סתירה), וכך נכתב כאן.
  • עמוד 2 בסיכום: ניסוח המטרה של בעיית הסוכן הנוסע נקרא כ"מעגל המילטוני במשקל מינימלי"; מילת התואר המדויקת בכתב היד אינה חד-משמעית.
  • הסיכום כותב את ניתוח זמן הריצה של האלגוריתם החמדני כ-O(|V|·|E|); זהו חסם נכון אך רופף, והחסם ההדוק O(|V|+|E|) נוסף כאן כהערה.