רכיבי 2 נחפש קשת במשקל מינימלי שמחברת בכל שלב : כללי . דף נוסחאות

‫אלגוריתמים – דף נוסחאות‪ .‬כללי‬
‫‪1‬‬
‫טענה‪ :‬כל ‪ 2‬מ התכונות הבאות גוררת את השלישית‪:‬‬
‫קשתות‪.‬‬
‫(‪ )1‬גרף קשיר (‪ )2‬חסר מעגלים (‪ )3‬בעל‬
‫(*) בעץ בין כל זוג צמתים קיים מסלול אחד ויחיד‪.‬‬
‫(*) בגרף עם מעגל אוילר אין גשר‪.‬‬
‫מסלול אוילר –מסלול בגרף אשר עובר על כל קשת בדיוק פעם אחת‪.‬‬
‫(‪ )1‬גרף לא מכוון וקשיר מכיל מסלול אוילר ⟺ בגרף ‪ 2‬צמתים מדרגה‬
‫אי‪-‬זוגית והיתר מדרגה זוגית‪ )2( .‬גרף מכוון וקשיר מכיל מסלול אוילר‬
‫כך ש‪, -‬‬
‫⟺ קיימים ‪ 2‬צמתים‬
‫מתקיים‬
‫ולכל שאר הצמתים‬
‫‪.‬‬
‫מעגל אוליר ‪ )1( -‬גרף לא מכוון וקשיר מכיל מעגל אוילר ⟺ כל הדרגות‬
‫‪:‬‬
‫זוגיות‪ )2( .‬גרף מכוון וקשיר מכיל מעגל אוילר ⟺ לכל‬
‫‪.‬‬
‫(*) בגרף לא מכוון‪ ,‬אם נוסיף לגרף עם מסלול אויילר קשת בין ‪2‬‬
‫הצמתים מדרגה אי‪-‬זוגית אז נקבל מעגל אויילר‪.‬‬
‫גשרים – גשר הוא קשת שהסרתה תהפוך את הגרף ללא קשיר‪)1( .‬‬
‫בגרף בעל גשר אין מעגל אויילר‪ )2( .‬קשת אינה גשר ⟺ היא נמצאת‬
‫על מעגל פשוט בגרף‪ .‬גרף לא מכוון וקשיר ניתן לכיוון לגרף קשיר‬
‫בחוזקה ⟺ אין בו גשרים‪.‬‬
‫אפשר לחלק את ל‪ 2-‬קב'‬
‫גרף דו"צ – גרף לא מכוון נקרא דו"צ‬
‫‪.‬‬
‫המקיימים‬
‫כך שאין‬
‫זרות‬
‫רשימת שכנויות – לכל צומת מצביע לרשימת השכנים שלו‪.‬‬
‫יתרון‪ :‬חסכוני במקום‪ .‬חיסרון‪ :‬הרבה זמן להגיע לקשת ספציפית‪.‬‬
‫‪.‬‬
‫מטריצ שכנויות –‬
‫יתרון‪ :‬קצת זמן להגיע לקשת ספציפית‪ .‬חיסרון‪ :‬מבזבז הרבה מקום‪.‬‬
‫‪2‬‬
‫‪ – BFS‬חיפוש לרוחב‪ .‬סיבוכיות‪:‬‬
‫‪ :Kruskal‬בכל שלב נחפש קשת במשקל מינימלי שמחברת ‪ 2‬רכיבי‬
‫קשירות שונים של ‪ ,‬נחבר אותם ונוסיף את הקשת ל‪ . -‬הקשתות‬
‫‪.‬‬
‫ממוינות ע"פ משקל בסדר עולה‪ .‬סיבוכיות‪:‬‬
‫(*) הפלט של קרוסקל תלוי אך ורק בסדר הממוין של הקשתות ויכול‬
‫לחשב כל עפ"מ‪ .‬מסקנה‪ :‬אם כל המשקלים שונים‪ ,‬אז יש עפ"מ יחיד‪.‬‬
‫‪ ,‬אז ניתן לבצע מיון בזמן‬
‫(*) אם פונ' המשקל היא‬
‫( ‪ -‬פונ' אקרמן ההפוכה‪,‬‬
‫לינארי‪ ,‬ונקבל‬
‫)‪.‬‬
‫פונקציה עולה ממש‪ ,‬אם נגדיר משקל חדש‬
‫טענה‪ :‬תהי‬
‫אז‪ T :‬עפ"מ לפי ⟺ ‪ T‬עפ"מ לפי ‪.‬‬
‫עפ"מים באותו גרף עם אותה פונ' ‪ ,‬אז אם נסדר את‬
‫טענה‪:‬‬
‫‪.‬‬
‫משקלי הקשתות בצורה ממוינת נקבל‪:‬‬
‫קב' הקשתות של שמשקלן‬
‫טענה‪ :‬עבור ‪ 2‬עפ"מים ו‪ , -‬תהי‬
‫ו‪-‬‬
‫מוגדרת באותה דרך‪ ,‬אז הגרפים‬
‫לכל היותר ‪ ,‬והקב'‬
‫מחזיקים בדיוק באותם רכיבי קשירות‬
‫טענה‪ :‬אם נוסיף קשת לעץ פורש היא תסגור מעגל יחיד‪.‬‬
‫‪ - Single Source Shortest Paths‬מק"בים מ‪-‬‬
‫‪5‬‬
‫מסלול קצר ביותר מצומת לכל צומת אחרת בגרף (בהתחשב במשקל‬
‫על הקשתות)‪ .‬מניחים שאין מעגלים שליליים‪.‬‬
‫תכונות מק"בים‪ )1( :‬תת מסלול של מק"ב הוא מק"ב‪ )2( .‬א"ש‬
‫‪ .‬אם‬
‫אז‬
‫המשולש‪ :‬אם‬
‫צומת אחד לפני על מק"ב מ‪ -‬ל‪ v-‬אז יש שיוויון‪ )3( .‬אם כל‬
‫‪.‬‬
‫המשקולות הן ‪ ,1‬אז משקל מסלול=מס' הקשתות ונפתור עם‬
‫‪ .‬נבצע‬
‫פעולת ‪ – Relax‬מבוצע על קשת‬
‫‪.‬‬
‫השתנה אז‬
‫‪ .‬אם‬
‫‪ :Dijkstra‬לא עובד עם משקלים שליליים‪ .‬משתמשים בתור עדיפות‬
‫ובקב' שהיא קב' הצמתים שהוצאנו‬
‫שמנוהל ע"י המפתח‬
‫מבקר ב‪( . -‬הוכחה באינדוקציה)‪.‬‬
‫טענה‪ :‬אם ‪ u‬נגיש מ‪, -‬‬
‫מהתור ‪ .‬אחרי שמוציאים מ‪ -‬את הצומת המינימלי מבצעים‬
‫טענה‪ :‬בכל רגע בתור נמצאים צמתים עם לכל היותר ‪ 2‬ערכי‬
‫‪ ,‬אין לו השפעה‪)2( .‬‬
‫לא צריך‬
‫על כל שכניו ‪)1( :‬‬
‫עוקבים בסדר עולה‪( .‬הוכחה באינדוקציה)‪.‬‬
‫‪ .‬סיבוכיות‪ :‬ערימה רגילה ‪-‬‬
‫יגרור פעולת‬
‫‪ .‬הוכחה‪ :‬צמתים עם ערך אינסוף‬
‫משפט‪ :‬לכל צומת ‪,‬‬
‫‪ .‬ובאופן‬
‫‪ .‬בערימת פיבונאצ'י –‬
‫נוכיח כמעט ישירות ושאר הצמתים באינדוקציה‪.‬‬
‫‪.‬‬
‫כללי –‬
‫לא השתמש בה לבניית ‪ ,‬מחברת‬
‫(*) בגרף מכוון‪ ,‬כל קשת שה‪-‬‬
‫‪ ,‬אז ניתן להשתמש במערך‬
‫(*) אם פונ' המשקל היא‬
‫‪ .‬בגרף לא מכוון כל‬
‫צומת בשכבה כלשהי לצומת בשכבה‬
‫במקום ערימה ולשמור מצביע לתא המינימלי שלא ריק במערך‪ ,‬ונקבל‬
‫קשת מחברת צמתים באותה שכבה או בשכבות סמוכות‪.‬‬
‫זה המסלול הכי ארוך שיכול‬
‫(‬
‫סיבוכיות של‬
‫להיות כל הצמתים בשכבות‬
‫(*) כדי לחלק את הגרף לקבוצות‪ ,‬נגדיר‬
‫להיות לנו ולכן זה גודל המערך‪ .‬כל תא במערך מתאים לאורך מק"ב)‪.‬‬
‫הזוגיות ו‪ -‬בשכבות האי זוגיות‪.‬‬
‫‪ :Bellman–Ford‬עובד גם עם משקלים שליליים‪ .‬מאתחל‬
‫מתקיים בסיום האלגוריתם‪:‬‬
‫טענה‪ :‬לכל קשת‬
‫על כל הקשתות בגרף‬
‫‪ .‬מבצע‬
‫ולכל שאר הצמתים‬
‫במק"ב מ‪ -‬ל‪ -‬יש שיוויון)‪.‬‬
‫(אם‬
‫משפר אז יש‬
‫פעמים‪ .‬אם לאחר מכן יש לקשת כלשהי‬
‫צבעים‪ :‬לבן‪-‬עדיין לא ביקרנו בו‪ .‬אפור‪-‬נכנס לתור‪ .‬שחור‪-‬יצא מהתור‪.‬‬
‫‪.‬‬
‫מעגל שלילי בגרף ונחזיר שגיאה‪ .‬סיבוכיות‪:‬‬
‫‪ – DFS‬חיפוש לעומק‪ .‬סיבוכיות‪:‬‬
‫‪3‬‬
‫אז מצאנו את כל המק"בים‬
‫ים באלג'‬‫טענה‪ :‬לאחר ביצוע‬
‫ הזמן בו סיימנו את‬‫ הזמן בו נתקלנו ב‪ u-‬לראשונה‪.‬‬‫‪.‬‬
‫מ‪ -‬שאורכם‬
‫ הצומת הקודם שגילה את ‪.‬‬‫הטיפול ב‪. -‬‬
‫טופולוגי‪ :‬בגרף מכוון א‪-‬ציקלי ניתן לבצע מיון טופולוגי ולרוץ על הצמתים‬
‫עקרון הקינון ‪ -‬לכל צומת מתאים מרווח זמן חי‬
‫על כל הקשתות שיוצאות‬
‫‪ .‬אם ל‪ 2-‬אחד אחד לפי הסדר‪ ,‬ומכל צומת נבצע‬
‫צמתים יש מרווחים מקוננים אז הצומת עם הרווח הקטן צאצא של‬
‫‪.‬‬
‫ממנו‪ .‬סיבוכיות‪:‬‬
‫האחר‪ .‬ואם יש להם מרווחים זרים אז אין קשר של צאצא בינהם‪.‬‬
‫‪ – All-Pairs Shortest Paths‬מק"ב בין כל‬
‫‪6‬‬
‫ונניח‬
‫עקרון המסלול הלבן – נניח ב‪ -‬יש מסלול‬
‫‪.‬‬
‫‪ ,‬ואחרת‬
‫אז‬
‫חיקוי ‪ :Bellman–Ford‬אם‬
‫מגלה הוא ‪ .‬אזי כל שאר‬
‫שהקודקוד הראשון במסלול שה‪-‬‬
‫(הוכחה באינדוקציה)‪.‬‬
‫ב‪-‬‬
‫הצמתים יהיו צאצאים של‬
‫ המשקל המינימלי מבין כל המסלולים מ‪ -‬ל‪ -‬שמכיל לכל היותר‬‫‪ ,‬כל‬
‫שימושים‪ )1( :‬מציאת רכיב קשירות בגרף לא מכוון ‪ -‬נריץ‬
‫נבצע‪:‬‬
‫‪ .‬עבור כל‬
‫קשתות‪ .‬נסמן‬
‫נמצאים‬
‫עץ בפלט שלו הוא רכיב קשירות‪ )2( .‬האם ‪ 2‬צמתים‬
‫‪ .‬וזה שקול‬
‫אז כן‪ .‬נבדוק ע"י‬
‫באותו רכיב קשירות? אם הם באותו עץ אחרי ה‪-‬‬
‫הליכה אחורה עם מצביעי ובדיקה שיש אותו אב‪ )3( .‬האם גרף נתון‬
‫‪.‬‬
‫כאשר‪:‬‬
‫להכפלת מט'‪:‬‬
‫קיימת קשת אחורית‪ )4( .‬מיון טופולוגי של‬
‫מכיל מעגל? קיים מעגל‬
‫זה משקל המק"ב מ‪ -‬ל‪. -‬‬
‫איטרציות כאלה‪.‬‬
‫נבצע‬
‫כך‬
‫גרף מכוון א‪-‬ציקלי (‪ – )DAG‬מסדר את הצמתים בסדר‬
‫פעמים‬
‫‪ ,‬אבל את הכפלת המט' ניתן לבצע‬
‫‪ .‬נריץ ‪ DFS‬וסדר הצמתים יהיה הפוך סיבוכיות‪:‬‬
‫מתקיים‬
‫שלכל קשת‬
‫נכפיל‬
‫במקום [במקום‬
‫( עם ערך מקסימלי)‪ )5( .‬מציאת גשרים‪ ,‬קודקודים‬
‫לערכי‬
‫‪.‬‬
‫] ונקבל‬
‫מנתקים ורכיבי קשירות – גרף לא מכוון וקשיר ניתן לכוון לגרף קשיר‬
‫מצביע לצומת הקודם ל‪ -‬במק"ב שהתגלה עד כה מ‪ . -‬נעדכן‪:‬‬
‫(*)‬
‫בחוזקה ⟺ אין בו גשרים‪ )6( .‬מציאת רכיבי קשירות חזקה (רק"ח)‬
‫‪.‬‬
‫אז נבצע‬
‫נתן לנו את הערך המינימלי החדש ל‪-‬‬
‫אם‬
‫על ונסדר את הצמתים לפי סדר‬
‫בגרף מכוון ‪ )1( -‬נריץ‬
‫אז יש מעגל שלילי בגרף‪.‬‬
‫(*) אם קיים כך ש‪-‬‬
‫יורד ונקרא לרשימה ‪ )2( .‬נבנה את הגרף ההפוך ‪ )3( .‬נריץ ‪DFS‬‬
‫‪ :Floyd-Warshall‬נמספר את הצמתים‪" .‬גובה" המק"ב=האינדקס‬
‫על ‪ ,‬כאשר הפרוצ' הראשית משתמשת ב‪ -‬בתור רשימת הצמתים‪.‬‬
‫המקסימלי של צמתי המק"ב‪ .‬נבנה מק"ב לפי גובה עולה – לכל‬
‫‪.‬‬
‫השני הוא רק"ח‪ )*( .‬גרף העל הוא‬
‫(‪ )4‬כל עץ ב‪-‬‬
‫מ‪ -‬על ועל ‪.‬‬
‫(*) כדי לבדוק אם גרף הוא קשיר חזק‪ ,‬נריץ‬
‫)‪,‬‬
‫נחשב את אורך המק"ב מ‪ -‬ל‪ -‬בגובה לכל היותר (נסמנו ב‪-‬‬
‫אם בשני המקרים קיבלנו עץ יחיד‪ ,‬קשיר חזק‪.‬‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫ונחשב כך‪:‬‬
‫סיווג קשתות ‪ -‬לקשתות המשמשות להגדרת‬
‫‪ :Johnson‬נהפוך את המשקולות לאי‪-‬שליליים ונריץ את דייקסטרה‬
‫נקרא קשתות עץ‪ .‬האחרות מתחלקות ל‪ )1( :‬קשת‬
‫‪.‬‬
‫פעמים עם פונ' המשקלים ‪ .‬סיבוכיות‪:‬‬
‫קדמית‪ -‬מחברת אב קדמון לצאצא‪ )2( .‬קשת‬
‫פונ' על הצמתים ונגדיר משקולות חדשים‬
‫למה‪ :‬תהא‬
‫אחורית‪ -‬מצאצא לאב קדמון‪ )3( .‬קשת חוצה‪-‬‬
‫לכל קשת‪ ,‬אז מק"ב תחת ⟺‬
‫)‬
‫מחברת ‪ 2‬צמתים שאינם צאצא‪/‬אב קדמון‪.‬‬
‫מק"ב תחת ‪.‬‬
‫עובר על כל קשתות הגרף‪ ,‬בחלק מהן הוא משתמש‬
‫(*) ה‪-‬‬
‫‪ :‬נוסיף לגרף צומת חדש וקשתות מ‪ -‬לכל‬
‫בניית פונ' כך ש‪-‬‬
‫‪ ,‬ובשאר לא‪.‬‬
‫להגדרת ‪ ,‬לבניית עץ ה‪-‬‬
‫‪.‬‬
‫שאר הצמתים עם משקל ‪ .0‬נריץ בלמן‪-‬פורד מ‪ -‬ונקח‬
‫ברגע ש‪ -‬בודק אותה‪)1( :‬‬
‫(*) בגרף מכוון‪ ,‬מסתכלים על קשת‬
‫לבן קשת עץ‪ )2( .‬אפור אחורית‪ )3( .‬שחור אם‬
‫‪ - Network Flow‬זרימה ברשתות‬
‫‪7‬‬
‫אז חוצה‪.‬‬
‫אז קדמית‪ ,‬אם‬
‫‪ )2( .‬אנטי‬
‫תכונות זרימה חוקית‪ )1( :‬אילוצי קיבול‬
‫(*) בגרף לא מכוון יש רק ‪ 2‬סוגי קשתות – עץ ואחורית‪.‬‬
‫‪ )3( .‬שימור זרימה‪ :‬לכל צומת‬
‫סימטריה‬
‫צבעים‪ :‬לבן‪-‬עדיין לא ביקרנו בו‪ .‬אפור‪-‬נתקלנו בצומת אך טרם סיימנו‪.‬‬
‫‪.‬‬
‫‪)4( .‬‬
‫מתקיים‬
‫שחור‪-‬סיימנו את הביקור בצומת‪.‬‬
‫ערך זרימה – סה"כ הזרימה הנכנסת ל‪ = -‬סה"כ הזרימה היוצאת מ‪: -‬‬
‫‪ - MST‬עץ פורש מינימאלי (עפ"מ)‬
‫‪4‬‬
‫‪.‬‬
‫‪ )*( .‬נרצה למצוא‪:‬‬
‫‪.‬‬
‫רשת שיורית ‪ : -‬עותק של שבו‬
‫קשתות מ‪. -‬‬
‫עץ פורש‪ :‬מכיל את כל הצמתים ו‪-‬‬
‫לכל צומת בקב'‬
‫קלט‪ :‬גרף לא מכוון עם פונ' משקלים‪ .‬תכונות‪ )1( :‬פורש את הגרף‪ )2( .‬זרימה בין קבוצות ‪ -‬הזרימה מכל צומת בקב'‬
‫סכום המשקולות של הקשתות בעץ הוא המינימאלי מבין הפורשים‪.‬‬
‫‪ .‬תכונות‪)1( :‬‬
‫‪.‬‬
‫גישה כללית – תת‪-‬קב' של נקראת קב' מבטיחה אם קיים עפ"מ‬
‫קב' זרות אז‬
‫‪ )3( .‬אם‬
‫‪)2( .‬‬
‫אז נקרא ל‪ -‬קשת בטוחה‬
‫המכיל את ‪ .‬אם קב' מבטיחה ו‪-‬‬
‫‪.‬‬
‫וכנ"ל עבור‬
‫‪ .‬כל עוד‬
‫עדיין קב' מבטיחה‪ .‬אלגו'‪:‬‬
‫עבור אם‬
‫‪ :Ford-Fulkerson‬כל עוד קיים מסלול משפר‪ ,‬נגדיל את ע"י הזרמה‬
‫‪ .‬בסוף‬
‫‪ ,‬מצא קשת בטוחה עבור ובצע‬
‫נוספת לאורך המסלול‪ .‬מסלול משפר הוא מסלול מ‪ -‬ל‪ -‬ב‪( -‬קשתות‬
‫נחזיר את ‪.‬‬
‫הוא הקיבול המינימאלי מבין‬
‫עם קיבול ‪ 0‬לא יופיעו ב‪.) -‬‬
‫חתך שמכבד את (אין ב‪-‬‬
‫טענה‪ :‬אם קב' מבטיחה ו‪-‬‬
‫הקשתות במסלול משפר ‪ .‬נגדיר זרימה חדשה‪:‬‬
‫קשת חוצה)‪ ,‬ו‪ -‬קשת חוצה קלה של החתך (משקלה מינימלי מבין‬
‫הקשתות החוצות) אז קשת בטוחה עבור ‪.‬‬
‫ו‪ -‬מתקיים‪:‬‬
‫‪ :Prim‬יש רכיב קשירות אחד ‪ ,‬ומוסיפים אליו בכל פעם צומת היושב‬
‫על הקשת הקלה ביותר המחברת אותו ל‪ . -‬משתמשים בתור עדיפות‬
‫‪ .‬סיבוכיות‪ :‬תלוי בקיבולים‪ .‬כאשר הזרימה היא‬
‫‪ ,‬שלכל צומת מפתח המייצג את משקל הקשת הקלה ביותר‬
‫בשלמים‪ ,‬יקח לכל היותר צעדים השווים לזרימה המקסימלית‪ .‬מחפשים‬
‫‪ .‬במערך‬
‫המחברת אותו ל‪ . -‬סיבוכיות‪ :‬בערימה רגילה ‪-‬‬
‫‪.‬‬
‫מסלול משפר קצר ביותר (מס' הקשתות) על הרשת השיורית ע"י‬
‫‪.‬‬
‫‪ .‬בערימת פיבונאצ'י ‪-‬‬
‫לא ממוין ‪-‬‬
‫‪ .‬מס' האיטרציות הוא‬
‫הסיבוכיות תהיה מס' האיטרציות כפול עלות‬
‫‪.‬‬
‫‪ ,‬ובסה"כ‬
‫היא‬
‫והגרף קשיר לכן עלות‬
‫‪.‬‬
‫(*) אם מחפשים לדעת האם ערך זרימה גדול מ‪ -‬אז נקבל‪:‬‬
‫‪ :MinCut-MaxFlow‬נגדיר חתך – חלוקה של ל‪ 2-‬קב' זרות‬
‫‪ .‬הזרימה המקסימאלית שווה לקיבול החתך‬
‫כך ש‪-‬‬
‫המינימאלי‪ .‬ע"פ המשפט‪ ,‬התנאים הבאים שקולים‪ )1( :‬זרימה‬
‫לא מכילה מסלול מ‪ -‬אל ‪)3( .‬‬
‫מקסימאלית‪ )2( .‬הרשת השיורית‬
‫‪.‬‬
‫לאיזשהו חתך‬
‫‪.‬‬
‫מתקיים‬
‫טענה‪ :‬לכל זרימה ולכל חתך‬
‫‪.‬‬
‫‪):‬‬
‫טענה‪ :‬לכל זרימה ולכל חתך‬
‫‪ :Edmonds-Karp‬נאתחל את הזרימה לזרימת אפס‪ .‬נבנה רשת‬
‫על הרשת ונחפש מסלול קצר בין ל‪ . -‬נשפר את‬
‫שיורית‪ .‬נריץ‬
‫הזרימה לפי המקסימום שאפשר להזרים במסלול המשפר שמצאנו‪.‬‬
‫נחזור על התהליך (בניית רשת שיורית מחדש וכו')‪ .‬סיבוכיות‪ :‬עלות של‬
‫כי הגרף קשיר ומספר‬
‫כפול מס' האיטרציות‪ .‬עלות‬
‫‪.‬‬
‫ולסיכום העלות היא‬
‫האיטרציות חסום ע"י‬
‫)‪,‬‬
‫‪ :Dinic‬הרעיון הוא לבנות רשת שכבתית מהרשת השיורית (ע"י‬
‫לחפש בה כמה שיותר מסלולים משפרים ורק כאשר לא נגיש יותר‪,‬‬
‫לבנות רשת שיורית חדשה‪ .‬ברשת השכבתית מתעלמים מכל הקשתות‬
‫‪.‬‬
‫ההפוכות‪ .‬שיטת איתור המסלולים ברשת השכבתית דומה ל‪-‬‬
‫כאשר "מסיימים" עם צומת מוחקים אותו וכל הקשתות הנכנסות אליו‪.‬‬
‫כאשר מגיעים ל‪ -‬מזרימים זרימה מקסימאלית במסלול‪ ,‬מוחקים‬
‫קשתות רוויות וממשיכים להתקדם מהאב של הקשת הרוויה הקרובה‬
‫(בכל פאזה לכל היותר‬
‫ביותר לצומת ‪ .‬סיבוכיות‪:‬‬
‫צעדים כפול מס' פאזות המקסימליות‪ ,‬שזה נגזר ממספר השכבות‬
‫)‪.‬‬
‫המקסימלי –‬
‫רשתות ‪ :0/1‬קיבול כל קשת היא ‪( 1‬או ‪ .)0‬ברשתות כאלו כל פאזה של‬
‫(כי במחיקה כל הקשתות במסלול רוויות)‪ .‬לכן‪,‬‬
‫דיניץ' מתבצעת ב‪-‬‬
‫)‪ .‬לעיתים ניתן‬
‫(מדויק יותר‪:‬‬
‫ריצת דיניץ כולה לוקחת‬
‫למצוא חסם הדוק יותר ע"פ טיפוס‪.‬‬
‫רשת מטיפוס ‪ – 1‬רשת בה אין קשתות מקבילות (או אנטי מקבילות)‪.‬‬
‫‪.‬‬
‫סיבוכיות‪:‬‬
‫רשת מטיפוס ‪ – 2‬רשת בה לכל צומת יש דרגת כניסה ‪ 1‬או דרגת יציאה‬
‫‪.‬‬
‫‪ .1‬סיבוכיות‪:‬‬
‫(*) טיפוס הרשת (‪ 1‬או ‪ )2‬נשמר גם ברשת השיורית‪.‬‬
‫טענה‪ :‬נניח זרימה נוכחית היא ‪ 0‬וערך זרימה מקסימאלית ‪ .‬אז מספר‬
‫בטיפוס ‪.2‬‬
‫ברשת כללית ו‪-‬‬
‫השכבות הוא‬
‫‪,‬‬
‫‪,‬‬
‫זיווג מושלם‪ :‬משפט ‪ - Hall‬יהיה גרף דו"צ‬
‫את קב' השכנים של צמתים של‬
‫נסמן ב‪-‬‬
‫‪ .‬לכל‬
‫)‬
‫ב‪ . -‬אז ל‪ -‬יש זיווג מושלם (כלומר זיווג בגודל‬
‫‪.‬‬
‫מתקיים‬
‫לכל‬
‫‪ .‬מס' הקשתות המינימלי‬
‫גרף מכוון‪.‬‬
‫משפט מנגר ‪-‬‬
‫שצריך להסיר כדי לנתק את מ‪ -‬שווה למס' המקסימלי של מסלולים‬
‫זרים בקשתות מ‪ -‬ל‪( -‬והם שווים לזרימה המקסימלית)‪.‬‬
‫(*) כל הקשתות בחתך המינימלי רוויות (קיבול=‪.)0‬‬
‫(*) אם נסיר את הקשתות בחתך המינימלי ננתק את הגרף‪.‬‬
‫‪ - String Matching‬התאמת מחרוזות‬
‫‪8‬‬
‫‪.‬‬
‫‪ ,‬ומחרוזת תבנית‬
‫קלט‪ :‬מחרוזת טקסט‬
‫מטרה‪ :‬למצוא את כל המקומות ב‪ -‬בהם מופיע ‪.‬‬
‫בשיטה נאיבית נוכל לבצע השוואה מכל מקום במחרוזת ‪ .‬זה מבוצע‬
‫‪ .‬ראינו שיטת השוואות באמצעות טבלת שמבצעת את‬
‫בזמן‬
‫‪.‬‬
‫ההשוואה בזמן‬
‫‪ :KMP‬מחקה את האוטומט "ללא תלות" באות הקלט הבאה‪ - ( .‬מיקום‬
‫– לאן להזיז‬
‫‪ - ,‬כמה התאמה יש‪.‬‬
‫ב‪ -‬ועליו מתבצע לולאת ה‪-‬‬
‫אם הבדיקה נכשלה)‪ .‬קוראים את האות הבאה של‬
‫את‬
‫‪.‬‬
‫ו‪-‬‬
‫‪ )1( :‬כל עוד אין התאמה‬
‫‪ )3( .‬אם‬
‫(‪ )2‬אם יש התאמה‬
‫‪( .‬ואז נקרא את‬
‫נודיע שנמצאה התאמה ו‪-‬‬
‫אורך‬
‫)‪ )3*( .‬בפונ' של חישוב ה‪ : -‬במוקם‬
‫האות הבאה ב‪-‬‬
‫‪,‬‬
‫‪ .‬סיבוכיות‪ :‬בניית טבלת –‬
‫יהיה ובשלב ‪ 3‬יתבצע‬
‫‪.‬‬
‫‪ ,‬סה"כ‬
‫פרוצדורה ראשית ‪-‬‬
‫שהוא גם סיפא‬
‫– גודל הרישא ממש המקסימלית של‬
‫(*)‬
‫הוא סיפא‬
‫המקסימלי כך ש‪-‬‬
‫‪ ,‬כלומר‪ ,‬ה‪-‬‬
‫ממש של‬
‫‪.‬‬
‫(ובהכרח גם רישא) של‬
‫‪,‬‬
‫אז‬
‫(*) מחושבת רק מתוך ‪ .‬לדוגמא אם‬
‫)‪.‬‬
‫ואם התאמנו ‪ 4‬תווים נזוז ‪ 2‬מקומות‪( .‬גודל התזוזה שלנו הוא‬
‫שערכה הוא גודל הרישא המקסימלית‬
‫יכול לייצר גם את‬
‫(*)‬
‫)‪.‬‬
‫בסיום ה‪-‬‬
‫(‬
‫של שהיא סיפא של‬
‫( כאשר ב‪-‬‬
‫(*) מס' הקריאות המקסימלי ל‪: -‬‬
‫עבור גדול יותר)‪.‬‬
‫‪ ,‬ו‪ -‬מורכב רק מתו זה‪ ,‬ו‪-‬‬
‫רק תו אחד‪-‬‬
‫‪ - Linear Programming‬תכנות לינארי‬
‫‪9‬‬
‫של‬
‫ל‪-‬‬
‫תרגום בעיות לצורה סטנדרטית – (‪ )1‬הפיכת‬
‫המינוס‪ )2( .‬הפיכת ל‪ -‬של המינוס‪ )3( .‬הפיכת ל‪ -‬וגם ל‪. -‬‬
‫כאשר נוסיף את‬
‫(‪ )4‬הפיכת שלא חייב להיות חיובי ל‪-‬‬
‫‪.‬‬
‫התנאים‬
‫‪ ,‬יכול להיות בפונ' המטרה מס'‬
‫על צורת ה‪-‬‬
‫(*) לאחר ביצוע‬
‫‪.‬‬
‫ללא מקדם‪ ,‬כלומר‬
‫מכילה משתנים לא בסיסיים ו‪ -‬משתנים‬
‫(*) כל צורת‬
‫שקולות‪.‬‬
‫צורות‬
‫בסייסים‪ ,‬ולכן סה"כ יש‬
‫ המשתנה בצד שמאל של האילוץ (והוא‬‫משתנה בסיסי בצורת‬
‫גם לעולם לא יופיע בפונ' המטרה)‪ ,‬כל שאר המשתנים הם לא‪-‬בסיסיים‪.‬‬
‫פיתרון פיזיבילי ‪ -‬הצבה כלשהי שמקיימת את כל האילוצים הדרושים‪.‬‬
‫פיתרון בסיסי ‪ -‬הצבת ‪ 0‬בכל המשתנים הלא‪-‬בסיסיים(אלה שבצד ימין)‪.‬‬
‫‪ :Simplex‬נבדוק שהפיתרון הבסיסי הוא פיזיבילי‪ ,‬במידה ולא נמצא‬
‫שבה הפיתרון הבסיסי כן פיזיבילי‪ .‬לאחר מכן‪ ,‬בכל שלב‬
‫צורת‬
‫‪ :‬נבחר משתנה בסיסי עם מקדם חיובי מפונ' המטרה (זהו‬
‫נבצע‬
‫המשתנה הנכנס ‪ -‬למשוואות) שאותו אנחנו רוצים להגדיל‪ ,‬ונחליף אותו‬
‫מול אחד המשתנים הלא‪-‬בסיסיים (זהו המשתנה היוצא)‪ .‬לאחר ה‪-‬‬
‫ים עד שכל‬‫חדשה‪ .‬נמשיך לבצע‬
‫נקבל צורת‬
‫המקדמים של כל המשתנים בפונ' המטרה שליליים‪ ,‬ואז הפיתרון‬
‫‪ ,‬מס'‬
‫האופטימלי הוא הפיתרון הבסיסי‪ .‬סיבוכיות‪:‬‬
‫‪.‬‬
‫‪ ,‬וסה"כ נקבל‪:‬‬
‫הצעדים‬
‫בחירת המשתנה היוצא ‪ -‬הוא המשתנה הנכנס‪ .‬נבחר את המשתנה‬
‫היוצא ע"י המשוואה עם המשתנה הלא‪-‬בסיסי שהכי מגביל את הגדלת‬
‫המשתנה הנכנס‪ ,‬כלומר המשתנה היוצא יהיה בעל המשוואה עם הערך‬
‫‪.‬‬
‫החיובי הקטן ביותר של‬
‫(*) אם קיים פיתרון פיזיבילי והפיתרון האופטימלי חסום אז הפיתרון‬
‫האופטימלי=לפיתרון האופטימלי של הבעיה הדואלית‪.‬‬
‫(*) אם פיתרון לבעיה הרגילה ו‪ -‬פיתרון לבעיה הדואלית שלה‬
‫וזהו פיתרון אופטימלי‪.‬‬
‫אז‬
‫ומתקיים‬
‫(לפי משפט‬
‫וזה בגלל שתמיד מתקיים‪:‬‬
‫הדואליות החלש‪ :‬דואלית‪-‬עם מינימום רגילה‪-‬עם מקסימום)‪.‬‬
‫הבעיה הרגילה‬
‫הבעיה הדואלית‬
‫הבעיה הדואלית‬
‫הבעיה הרגילה‬
‫) – פונ' המטרה תהיה‬
‫מציאת פיתרון בסיסי פיזיבילי (בצורת‬
‫ולכל משוואה נוסיף בצידה הימני‬
‫‪ ,‬נוסיף את התנאי‬
‫‪ .‬המשתנה היוצא ה‪ 1-‬יהיה זה שבעל הערך הכי קטן בפיתרון‬
‫הבסיסי (הערך חייב להיות שלילי‪ ,‬כי אין פיתרון בסיסי פיזיבילי)‪ .‬לאחר‬
‫ים עד שנמצא פיתרון אופטימלי‪ ,‬ובסוף נחזור לתוכנית‬‫מכן נבצע‬
‫שהתחלנו איתה (זאת שללא ) ונציב בפונ'‬
‫הלינארית בצורת ה‪-‬‬
‫המטרה שלה את כל המשתנים הבסיסיים (כלומר‪ ,‬נציב את החלק הימני‬
‫של המשוואות שלהם) שקיבלנו בפיתרון האופטימלי של התוכנית‬
‫‪ .‬וכעת קיבלנו צורת‬
‫הלינארית הסופית (זאת עם ה‪ ) -‬וכן נציב‬
‫עם פיתרון בסיסי פיזיבילי‪.‬‬
‫תכנות דינאמי‬
‫‪10‬‬
‫(*) שאלה‪ A :‬מערך של ‪ n‬מספרים ממשיים‪.‬‬
‫צ"ל אלגו’ למציאת תת קבוצה של ‪ A‬שסכומה‬
‫מקסימאלי אבל אסור לבחור ‪ 2‬איברים סמוכים‬
‫מ‪ .A‬פתרון‪ :‬מטריצה ‪ M‬תכיל את הסכום‬
‫המקסימאלי עם תתי סדרות המכילות רק‬
‫איברים הקטנים שווים ל‪ .i‬מטריצה ‪ P‬תכיל זוג‬
‫סדור עם קבוצה להוסיף לתת ופוינטר לאינדקס‬
‫הבא של ‪ .P‬מאתחלים ‪ 2‬תאים ראשונים‪.‬‬
‫עוברים על המערך לפי התנאים שבקוד‪ .‬לסיום‪,‬‬
‫עוברים על המערך שוב מהסוף להתחלה ע"פ‬
‫הפוינטר בזוג הסדור כשבכל שלב מוסיפים את‬
‫האיבר שבחלק הראשון של הזוג הסדור‪.‬‬
‫(*) שאלה‪ :‬אותו דבר אבל אורך תת הסדרה הוא לכל היותר ‪ .k‬פתרון‪:‬‬
‫מריצים אלגוריתם דומה‪ ,‬אבל לכל סכום סדרה שומרים גם כמה איברים‬
‫יש עד כה ועותק ממש של כל איברי תת הסדרה‪ .‬אם הגענו לתת סדרה‬
‫הגדולה מ‪ ,k‬נסיר מהעותק שלנו את האיבר הראשון (הוא הכי קטן)‬
‫ונשים במקומו את האיבר הנוכחי (צריך גם לעדכן את הסכום להיות‬
‫‪2‬‬
‫הסכום הקודם פחות האיבר הראשון ‪ +‬האיבר הנוכחי)‪ .‬סבוכיות‪kn :‬‬
‫(*) שאלה‪ :‬נתונה סדרת מספרים ממשיים‪ ,‬רוצים תת סדרה רציפה כך‬
‫שהסכום מקס'‪ .‬פתרון‪ :‬מגדירים ‪ Si+‬ו‪ Si-‬פתרון אופטימלי עם‪/‬בלי ‪.xi‬‬
‫חישוב הערכים‪ .Si-=max{Si-1+,Si-1-} ,Si+=max{Si-1+xi, xi} :‬בסוף‬
‫}‪ .S=max{Sn+,Sn-‬סוף הסדרה= התא הראשון מהסוף כך ש‪.Si+=S-‬‬
‫תרגילים ופתרונות‬
‫‪11‬‬
‫‪if(A [i-2]+A[i]>A[i‬‬‫)]‪1‬‬
‫‪M[i]←A[i‬‬‫;]‪2]+A[i‬‬
‫>‪P[i]←<{i},i-2‬‬
‫‪else M[i]←A[i‬‬‫>‪1]; P[i]←< ,i-1‬‬
‫(*) מציאת מעגל אויילר בגרף לא מכוון ‪ -‬נתחיל מסלול מצומת כלשהו‬
‫עד שנחזור אליו ונסיר את כל הקשתות שעברנו עליהם‪ .‬אם במסלול יש‬
‫את כל הקשתות שב‪ -‬אז סיימנו‪ ,‬אחרת נתחיל מסלול מאחד הצמתים‬
‫שעברנו עליהם שדרגתו חיובית עד שנחזור אליו בחזרה‪ ,‬ואז נאחד בין ‪2‬‬
‫המסלולים‪ .‬נחזור על התהליך‪.‬‬
‫(*) מציאת מסלול אויילר בגרף לא מכוון – נוסיף קשת בין ‪ 2‬הצמתים‬
‫שדרגתם אי‪-‬זוגית ואז נריץ את האלג' חמציאת מעגל של אויילר‪.‬‬
‫(מק"ב ‪ -‬לפי מס' הקשתות)‬
‫מצומת כלשהו וכל הצמתים‬
‫(*) צביעת צמתים בגרף דו"צ – נריץ‬
‫‪ ,‬כאשר‬
‫(*) כפל מטריצות יעיל ‪ -‬נתונה סדרה של מט'‬
‫‪ .‬רוצים למצוא סדר הכפלה עם מס' מינימלי של פעולות‪ .‬במרחק אי‪-‬זוגי יהיו אדומים וכל הצמתים במרחק זוגי יהיו כחולים‪.‬‬
‫בגודל‬
‫ואם אין ‪ 2‬צמתים באותה שכבה‬
‫(*) האם הגרף הוא דו"צ – נריץ‬
‫= המחיר‬
‫‪ .‬נסמן‬
‫הוא‬
‫במט'‬
‫למשל כפל מט'‬
‫שיש בינהם קשת אז גם אין מעגל באורך אי‪-‬זוגי ולכן הגרף הוא דו"צ‪.‬‬
‫ו‪-‬‬
‫‪ .‬נגדיר‬
‫המינימלי של כפל המט'‬
‫כאשר‬
‫(*) גרף המק"בים מ‪ -‬בגרף לא מכוון ‪ -‬זהו גרף‬
‫‪ .‬נחשב את‬
‫‪ .‬אלג' ה‪-‬‬
‫יהיה‬
‫‪ .‬ובסוף‬
‫) כאשר‬
‫לפי סדר עולה של (‬
‫זורק ‪ 2‬סוגי קשתות בגרף לא מכוון‪ )1( :‬בין צמתים מאותה רמה‪ )2( .‬בין‬
‫‪.‬‬
‫המחיר האופטימלי‪ .‬סיבוכיות‪:‬‬
‫כך שנזרוק רק קשתות‬
‫צמתים מרמות עוקבות‪ .‬נשנה את האלג' ה‪-‬‬
‫(*) חישוב תת‪-‬סידרה משותפת מקסימלית – מקבלים ‪ 2‬מחרוזות‬
‫בין צמתים מאותה רמה ונקבל ש‪ -‬מייצג את גרף המק"בים מ‪. -‬‬
‫(‬
‫כאשר‬
‫) ורוצים למצוא סדרה המופיעה באותו סדר אך (*) גרף המק"בים מ‪ -‬ל‪ -‬בגרף מכוון – זהו גרף‬
‫את‬
‫לא בהכרח באותו רצף ב‪ 2-‬המחרוזות באורך מקסימלי‪ .‬נסמן ב‪-‬‬
‫‪ .‬אלג' ה‪-‬‬
‫הרישא של האיברים הראשונים של ‪ ,X‬וב‪ -‬את האיבר ה‪ -‬של ‪.‬‬
‫זורק ‪ 3‬סוגי קשתות בגרף מכוון‪ )1( :‬בין צמתים מאותה רמה‪)2( .‬‬
‫‪ )3( .‬בין צומת מרמה לצומת‬
‫בין צומת מרמה לצומת ברמה‬
‫כך שלא נזרוק קשתות מסוג (‪,)2‬‬
‫‪ .‬נשנה את אלג' ה‪-‬‬
‫ברמה‬
‫החדש מ‪ , -‬נהפוך את הקשתות של הגרף שקיבלנו‬
‫ואז נריץ את ה‪-‬‬
‫החדש מ‪ , -‬נהפוך שוב את הקשתות וסיימנו‪.‬‬
‫ונריץ את ה‪-‬‬
‫בטבלה נחשב את הביטוי לפי סדר שורות עולה‪ ,‬וכל שורה לפי סדר‬
‫(*) מס' המק"בים מ‪ -‬לכל צומת – נשמור לכל צומת את‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫עולה של טורים‪ .‬נחזיר את‬
‫את מס' המסלולים מ‪ -‬ל‪ -‬שייצג כמה מק"בים מצאנו עד כה מ‪ -‬ל‪ . -‬נעדכן את ה‪ :BFS-‬נניח‬
‫(*) מס' המסלולים מ‪ -‬ל‪ – -‬נסמן ב‪-‬‬
‫אז‬
‫או ש‪-‬‬
‫ועבור כל שהגענו ל‪ -‬מהצומת ‪ .‬אם‬
‫אז‬
‫‪ .‬אם‬
‫על‬
‫‪ .‬נריץ‬
‫‪.‬‬
‫‪.‬‬
‫ונחזיר בסוף את נבצע‬
‫הצמתים האחרים נחשב‪:‬‬
‫נמצאת על מעגל בגרף לא מכוון ‪ -‬נסיר את‬
‫(*) האם הקשת‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫‪.‬‬
‫הקשת מהגרף ונבדוק אם יש מסלול מ‪ -‬ל‪ -‬ע"י‬
‫(*) רמת כיפיות מקס' במסיבה – עובד אינו כיפי שהבוס שלו נמצא‪.‬‬
‫ הכיפיות המקס'‬‫ הכיפיות המקס' כש‪ -‬מוזמן‪.‬‬‫נגדיר‪:‬‬
‫נבנה‬
‫(*) מסלול שעובר בכל צמתי הקב' בגרף מכוון – בעזרת‬
‫‪ .‬אם לא‬
‫ו‪-‬‬
‫כש‪ -‬לא מוזמן‪ .‬אם עלה‪:‬‬
‫גרף על ונבצע מיון טופולוגי עליו‪ .‬נחפש בגרף זה מסלול שעובר בכל‬
‫ו‪-‬‬
‫– קב' הבנים של ‪.‬‬
‫עלה‪:‬‬
‫הרק"חים שיש בהם לפחות צומת אחד מהקב' ‪ .‬נעשה זאת ע"י‬
‫‪ .‬נחזיר‬
‫בין כל ‪ 2‬רק"חים כאלה לפי הסדר הטופולוגי‪.‬‬
‫‪.‬‬
‫כאשר זה השורש‪ .‬סיבוכיות‪:‬‬
‫עפ"מים‬
‫(*) בעיית הסוכן הנוסע – צריך לבקר ב‪ -‬ערים ולעבור מרחק מינימלי‪ )*( .‬מציאת עפ"מ עם מס' מקסימלי של קשתות מהקב' (מבין‬
‫להיות המרחק‬
‫את המרחק מ‪ -‬ל‪ . -‬נגדיר‬
‫נסמן ב‪-‬‬
‫העפ"מים) – למשקל הקשתות מהקב' נוסיף ואז נמצא עפ"מ כרגיל‪.‬‬
‫‪ .‬נחשב כך‪:‬‬
‫המינימלי מ‪ -‬אל שעובר בצמתים שב‪-‬‬
‫(*) מציאת עפ"מ שכל צמתי הקב' הם עלים בעפ"מ – ניצור גרף‬
‫‪ .‬נחזיר את‬
‫ו‪-‬‬
‫ללא הצמתים שב‪ -‬וללא הקשתות שכוללות צומת מ‪ . -‬אם הגרף לא‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫קשיר אז לא קיים עפ"מ כזה‪ .‬אחרת‪ ,‬נמצא עפ"מ על גרף זה‪ ,‬ועבור‬
‫כל צומת מ‪ -‬נמצא את הקשת הקלה ביותר שמחברת בינה לבין ‪.‬‬
‫איברים‬
‫(*) סכום מקס' של תת‪-‬סידרה מונוטונית לא יורדת בת‬
‫ו‪-‬‬
‫– נסמן‬
‫להיות (*) האם קיים עפ"מ המכיל את הקשת‬
‫את‬
‫ולכל‬
‫ נגדיר לכל‬‫מ‪-‬‬
‫‪ ,‬מתקיים‬
‫‪,‬‬
‫‪ .‬אם לכל קשת חוצה‬
‫הסכום המקס' לתת‪-‬סידרה לא יורדת בת איברים שמסתיימת ב‪. -‬‬
‫‪.‬‬
‫אז קיים עפ"מ שמכיל את הקשת‬
‫‪ .‬ונחשב לפי סדר עולה של את הביטוי‪:‬‬
‫נאתחל‬
‫ו‪-‬‬
‫– נסמן‬
‫(*) האם כל עפ"מ המכיל את הקשת‬
‫‪ ,‬ונחזיר את‬
‫‪ ,‬מתקיים‬
‫‪,‬‬
‫‪ .‬אם לכל קשת חוצה‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫‪.‬‬
‫אז כל עפ"מ מכיל את הקשת‬
‫(*) שאלה‪ :‬עבור סדרת מספרים ממשיים‬
‫‪ )*( List a[1…n] ‬האם יש לגרף ‪ 2‬עפ"מים בדיוק – נמצא עפ"מ ‪ ,‬נוסיף למשקל‬
‫]‪[1…1‬‬
‫‪ x1,x2,…,xn‬לחשב עבור כל ‪ i‬את מס' תתי‪-‬‬
‫קשתותיו בגרף ‪ .‬נמצא עפ"מ ‪ .‬אם יש ‪ 0‬או ‪ 2‬קשתות ומעלה ב‪-‬‬
‫‪For j= 1 to n‬‬
‫הסדרות העולות ממש ומסתיימות ב‪( xj -‬כולל)‪.‬‬
‫בגרף ‪ ,‬נמצא עפ"מ‬
‫שלא ב‪ -‬אז אין‪ .‬אחרת‪ ,‬נוסיף למשקל קשתות‬
‫פתרון‪ :‬ניצור מערך בגודל ‪ n‬מאותחל ל‪ ,1 -‬כי כל‬
‫‪For i= 1 to j-1‬‬
‫שווה לאחד העפ"מים הקודמים אז יש בדיוק ‪ ,2‬ואחרת אין‪.‬‬
‫‪ .‬אם‬
‫‪If xi<xj then‬‬
‫סדרה יכולה לכלול רק את האיבר האחרון‪ .‬אח"כ‬
‫;]‪a[i]= a[j]+a[i‬‬
‫נסכום עבור כל ‪( xi‬כש‪ )i<j -‬שקטן מה‪ xj -‬את‬
‫(*) מק"ב שמסתיים בצומת בגרף מכוון – אין מעגלים שליליים בגרף‪.‬‬
‫תתי הסדרות שלו‪ ,‬כי פשוט ניתן להוסיף בסוף‬
‫‪ .‬נוסיף‬
‫נרצה לחשב‪:‬‬
‫עבור כל צומת‬
‫את ‪ .xj‬סיבוכיות‪.n2 :‬‬
‫צומת לגרף עם קשתות במשקל ‪ 0‬לכל הצמתים‪ ,‬ונריץ את אלג'‬
‫(*) שאלה‪ :‬נתונות ‪ 2‬סדרות ‪ S‬ו‪ .T-‬תארו אלגוריתם יעיל ככל האפשר‬
‫‪ ,‬וזה כי מתקיים‪:‬‬
‫שקובע אם ‪ S‬מופיע כתת סדרה ב‪ T‬כך שכל שני איברים עוקבים של ‪ S‬מהצומת ‪ .‬לאחר מכן יתקיים‬
‫‪.‬‬
‫מופיעים במרחק של לכל היותר ‪ 50‬זה מזה‪ .‬פתרון‪ :‬נכין טבלה ‪ M‬כך‬
‫ש)‪ M(i,j‬יהיה ‪ 1‬אם ‪ j‬האיברים הראשונים של ‪ S‬עונים על התנאים עבור (*) גרף כל המק"בים מ‪ -‬ל‪ -‬עם פונ' משקלים בגרף מכוון – נריץ את‬
‫(הקשתות הפוכות)‬
‫על הגרף מהצומת ‪ ,‬ועל הגרף‬
‫אלג'‬
‫‪ i‬האיברים הראשונים של ‪( T‬ו‪ j-‬נופל על האיבר ה‪ i-‬של ‪ .)T‬כדי לחשב‬
‫נכניס‬
‫שמקיים‬
‫מהצומת ‪ .‬עבור כל‬
‫)‪ M(i,j‬נבדוק האם ]‪ T[i]=S[j‬וגם [האם מתקיים )‪ M(i-1,j-1‬או‬
‫לגרף את כל הקשתות במק"ב מ‪ -‬ל‪ -‬ומ‪ -‬ל‪ . -‬הגרף הרצוי‪.‬‬
‫)‪ M(i-2,j-2‬או ‪ .]M(i-50,j-1) ...‬סבוכיות‪ :‬מילוי הטבלה יתקיים ב‪-‬‬
‫(*) מציאת מק"בים מ‪ -‬עם מס' קשתות זוגי בגרף מכוון – נשתמש ב‪-‬‬
‫)‪.O(mn‬‬
‫‪ 2 If 2ai≤j then‬העתקים של הגרף‪ ,‬וכל הקשתות יהיו מעותק מס' ‪ 1‬לעותק מס' ‪2‬‬
‫(*) שאלה‪ :‬נתונה קבוצה של ‪ n‬מספרים‬
‫‪.‬‬
‫‪ a[i,j]=a[i-1,j-2ai]+‬ולהפך‪ .‬המרחק של המק"ב הרצוי מ‪ -‬ל‪ -‬יהיה‬
‫שלמים ‪ 1≤a1<a2…<an<2n‬ומספר שלם נוסף‬
‫]‪ )*( a[i-1,j-ai]+ a[i-1,j‬מציאת מק"בים מ‪ -‬עם קשתות בגרף מכוון – נשתמש ב‪-‬‬
‫‪ .m‬תארו אלגוריתם יעיל המחשב את מס'‬
‫‪.‬‬
‫‪ else if ai≤j then‬העתקים של הגרף‪ ,‬וכל הקשתות יהיו מעותק מס' לעותק מס'‬
‫הפתרונות למשוואה ‪a1x1+a2x2+…+anxn=m‬‬
‫‪.‬‬
‫‪ a[i,j]=a[i-1,j-ai]+‬המרחק של המק"ב הרצוי מ‪ -‬ל‪ -‬יהיה‬
‫כאשר }‪ .xi {0,1,2‬פתרון‪ :‬נגדיר מטריצה עם‬
‫בגרף‬
‫]‪ )*( a[i-1,j‬מציאת המעגל הקל ביותר שמכיל את וכל צומת‬
‫עמודות )‪ 0…m(≤4n2‬ושורות עם ‪ .ai‬בכל תא‬
‫‪.‬‬
‫‪ else‬מכוון – נריץ אלג' למציאת מק"בים מהצומת על ועל‬
‫בטבלה נמלא את מספר הפתרונות הקיימים‬
‫]‪ )*( a[i,j]=a[i-1,j‬מציאת מעגל שלילי בגרף מכוון – נמצא את כל הרק"חים ונריץ על‬
‫כאשר עבור ‪=m‬לערך העמודה וכאשר הסדרה‬
‫‪.‬‬
‫‪ .‬סיבוכיות‪:‬‬
‫כל אחד מהם בנפרד את אלג'‬
‫מכילה את ‪ a1..ai‬בלבד‪ .‬העמודה הראשונה‬
‫עם מס' קשתות אדומות‬
‫(*) מציאת מסלול מ‪ -‬לכל צומת‬
‫תכיל ‪( 1‬כי יש פיתרון יחיד כש‪ .)m=0‬בשורה‬
‫פחות כחולות מקסימלי בגרף מכוון – לקשת אדומה ניתן משקל‬
‫הראשונה נסמן ‪ 1‬בתאים שווים ל‪ 1*a1 ,0*a1-‬ו‪-‬‬
‫מ‪. -‬‬
‫ולקשת כחולה ניתן משקל ‪ .‬נריץ‬
‫‪ 2*a1‬ובשאר ‪ .0‬נמלא את המטריצה לפי שורות‬
‫ואז עמודות (ע"פ הקוד)‪ .‬סבוכיות‪O(mn) :‬‬
‫(*) עבור כל ‪ 2‬צמתים‪ ,‬האם קיים מסלול באורך ביניהם בגרף מכוון‬
‫‪ .‬נחשב‬
‫ואחרת‬
‫אז‬
‫– נגדיר מט' שכנויות‪ :‬אם‬
‫‪.‬‬
‫מוגדר‪:‬‬
‫לפי כפל בוליאני‪-‬‬
‫את‬
‫קיימים ביניהם בגרף‬
‫(*) עבור כל ‪ 2‬צמתים‪ ,‬כמה מסלולים באורך‬
‫אך לפי כפל מט' רגיל‪-‬‬
‫מכוון – כמו מקודם‪ ,‬נחשב את‬
‫‪.‬‬
‫מוגדר‪:‬‬
‫(*) כמה מסלולים זרים בקשתות מ‪ -‬ל‪ -‬יש בגרף מכוון – ניתן קיבול‬
‫‪ 1‬לכל הקשתות בגרף ונריץ אלג' דיניץ‪ .‬הזרימה המקס' זה הערך הרצוי‪.‬‬
‫(*) כמה מסלולים זרים בצמתים מ‪ -‬ל‪ -‬יש בגרף מכוון – נפצל כל‬
‫ונריץ את האלג' הקודם‪.‬‬
‫ל‪-‬‬
‫– נבנה רשת שיורית ביחס לזרימה‬
‫(*) מציאת החתך המינימלי‬
‫ל‪-‬‬
‫מהמקור ונכניס את כל הצמתים שבעץ ה‪-‬‬
‫המקס'‪ .‬נריץ‬
‫‪.‬‬
‫ואת כל שאר הצמתים ל‪ . -‬סיבוכיות‪:‬‬
‫) – לכל‬
‫(*) הרישא המקס' של שהיא פולינדרום (‬
‫‪ ,‬ואם פולינדרום אז רישא של היא סיפא של‬
‫מתקיים‬
‫)‪.‬‬
‫(‬
‫והתבנית ‪ .‬נחזיר את‬
‫עם הטקסט‬
‫‪ .‬נריץ‬
‫ו‪ -‬מקס' – בהכרח‬
‫כך ש‪-‬‬
‫(*) מציאת חלוקה‬
‫עם התווים האחרונים של‬
‫‪ .‬נריץ‬
‫‪.‬‬
‫כטקסט ו‪ -‬התווים הראשונים של כתבנית‪ .‬נחזיר את‬
‫כך ש‪ y-‬תת‪-‬מחרוזת של ‪ – x‬אם יש‬
‫(*) מציאת חלוקה‬
‫עם התווים‬
‫‪ .‬נריץ‬
‫חלוקה כזאת אז‬
‫האחרונים של כטקסט ו‪ -‬התווים הראשונים של כתבנית‪ .‬מתקיים‬
‫ו‪ -‬יהיה כל שאר התווים שנשארו באמצע‪.‬‬
‫(*) האם סיבוב מעגלי (דחיפת האותיות ימינה) של ‪ -‬נריץ‬
‫‪.‬‬
‫אז נחזיר‬
‫כטקסט ו‪ -‬כתבנית‪ .‬אם יופיע ב‪-‬‬
‫עם‬
‫(*) בעיית שער חליפין – מטבע ו‪ -‬מציין כמה מטבעות מסוג‬
‫נקבל תמורת מטבע אחד מסוג ‪ .‬נרצה לבדוק האם קיימת סידרת‬
‫כך ש‪:‬‬
‫המרות שתביא לרווח‪ ,‬כלומר האם קיימים‬
‫משני האגפים ונכפיל ב‪-‬‬
‫‪ .‬פתרון‪ :‬נוציא‬
‫‪ .‬נבנה גרף מכוון שלם‬
‫ונקבל‪:‬‬
‫‪ .‬כעת‬
‫ניתן משקל‬
‫עם המטבעות כצמתים ולכל קשת‬
‫נחפש מעגל שלילי בגרף החדש‪.‬‬
‫(*) האם קיים מעגל בגודל ‪ 0‬בגרף מכוון‪ .‬נוסיף צומת וקשתות ממנו‬
‫וניצור את הגרף כאשר‪:‬‬
‫לכל שאר הצמתים במשקל ‪ .0‬נריץ‬
‫‪ .‬יש מעגל ב‪ -‬אם‬
‫)‪.‬‬
‫קיימת קשת אחורית (בדיקה עם‬
‫משקל מעגל ב‪ -‬הוא ‪.0‬‬
‫טענה‪ :‬קיים מעגל שנגיש מ‪ -‬ב‪-‬‬
‫(*) קשת מנתקת (גשר)‪ ,‬קודקוד מנתק‪ ,‬גרף דו קשיר‪ ,‬גרף דו"צ ‪-‬‬
‫על הגרף‪ .‬החישוב יתבצע לכל‬
‫תוך כדי הרצת‬
‫נחשב את‬
‫קודקוד ברגע שמסיימים לטפל בו (לאחר חישוב ערך שלו)‪ .‬זאת‬
‫הערות‬
‫בעזרת‪:‬‬
‫קשת אחורית בעץ‬
‫בן של בעץ‬
‫מציין כמה גבוה ניתן להגיע בעץ ה‪-‬‬
‫דרך קשת אחורית‪ .‬באיור הימני‪:‬‬
‫מ‪ -‬או מצאצא שלו‬
‫‪.‬‬
‫(*) הגדרה‪ :‬בגרף לא מכוון‪ ,‬קודקוד מנתק הוא קודקוד שהסרתו מנתקת‬
‫את רכיבי הקשירות שלו‪.‬‬
‫קיים בן של‬
‫טענה‪ :‬בגרף לא מכוון‪ ,‬צומת (שאינו שורש) מנתק‬
‫‪.‬‬
‫כך ש‪:‬‬
‫יש לו לפחות ‪2‬‬
‫טענה‪ :‬בגרף לא מכוון‪ ,‬אם‪ -‬שורש אזי מנתק‬
‫)‪.‬‬
‫בנים באותה רמה (כלומר‪ ,‬מקיימים‬
‫(*) הגדרה‪ :‬גשר בגרף לא מכוון היא קשת שהסרתה מנתקת את רכיבי‬
‫היא נמצאת על מעגל פשוט‪.‬‬
‫הקשירות שלה‪ .‬טענה‪ :‬קשת אינה גשר‬
‫‪.‬‬
‫ומתקיים‬
‫בן של ב‪-‬‬
‫גשר‬
‫טענה‪:‬‬
‫אין מעגלים באורך אי‪-‬זוגי‪.‬‬
‫טענה‪ :‬גרף לא מכוון הוא דו"צ‬
‫(*) במעגל מס' הצמתים=מס' הקשתות‪.‬‬
‫(*) (‪ )2‬גרף לא מכוון וקשיר הוא דו‪-‬קשיר בקשתות (בצמתים) אם אין לו‬
‫קשתות (צמתים) מנתקות‪ )3( .‬רכיב דו‪-‬קשירות הוא תת‪-‬גרף דו‪-‬קשיר‬
‫מקסימלי‪.‬‬
‫אין בו גשרים‪.‬‬
‫טענה‪ :‬גרף לא מכוון וקשיר ניתן לכיוון לקשיר בחוזקה‬
‫טענה‪ :‬לכל ‪ 2‬רכיבי דו‪-‬קשירות יש לכל היותר קודקוד משותף אחד‪.‬‬
‫מסקנה‪ :‬רכיבי הדו‪-‬קשירות מהווים חלוקה של קשתות הגרף‪.‬‬
‫(*) מוצאים רכיבי דו‪-‬קשירות בדומה לקודקודים מנתקים‪ .‬אלא שלכל‬
‫נפצל את‬
‫שאינו שורש בודקים את בניו‪ .‬לכל בן אשר‬
‫ועותק אחד עבור השאר‪ .‬עבור‬
‫– עותק אחד עבור הקשת‬
‫השורש נתאים עותק לכל בן‪.‬‬
‫תרגילים נוספים‬
‫‪12‬‬
‫(*) שאלה‪ n :‬בנים ו‪ n‬בנות‪ .‬כל אחד מכיר ‪ k‬מהמין השני‪ .‬להוכיח שיש‬
‫זיווג מושלם‪ .‬פתרון‪ :‬נבנה גרף דו"ץ בנים בנות‪ .‬לכל קבוצה ‪A X‬‬
‫מתקיים |‪ .|)A|<|Γ(A‬נניח בשלילה כי |‪ .|)A|>|Γ(A‬כל בן מכיר בדיוק ‪k‬‬
‫בנות ולהפך‪ ,‬ולכן‪ ,‬מכל קודקוד ב‪ A-‬יוצאים ‪ k‬קודקודים אל )‪ .Γ(A‬יש‬
‫‪ |k|A‬קשתות מ‪ A-‬אל )‪ .Γ(A‬דרגת הקודקודים ב‪ Γ(A)-‬היא ‪ .k‬לכן‪ ,‬יש‬
‫)‪ |k|Γ(A‬קודקודים ממנה אל ‪ .A‬הקשר בין הקודקודים הוא הדדי‪ ,‬ולכן‪,‬‬
‫הקשתות המחוברות אל קודקודים שב‪ A-‬מוכלות בקבוצת הקשתות‬
‫המחוברות ל)‪ .Γ(A‬נקבל כי )‪ .|k|A|<k|Γ(A‬כלומר‪ |)A|< |Γ(A| ,‬בסתירה‪.‬‬
‫מכאן ‪.Hall‬‬