אלגוריתמים – דף נוסחאות .כללי 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
© Copyright 2024