מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/זרימה - הגדרות

מתוך testwiki
קפיצה לניווט קפיצה לחיפוש

תבנית:מבני נתונים ואלגוריתמים - מחברת קורס


דף זו הוא הראשון משלשה העוסק באלגוריתמים למציאת זרימת המקסימום בגרף מכוון המתאר "רשת צינורות".

תבנית:הארה

תבנית:הארה


תבנית:מבנה תבנית

הבעיה

נתונים גרף מכוון G=(V,E), טבלת קיבולים לקשתות E, צומת מקור sV כלשהו, וצומת בור tV כלשהו. בהינתן צומת vV כלשהו, רוצים לדעת מה זרימת המקסימום מs לt.



תבנית:מבנה תבנית


הגדרות מדוייקות לבעיה

רשת זרימה

תבנית:מבנה תבנית



תבנית:מבנה תבנית


זרימה חוקית

תבנית:מבנה תבנית

תבנית:הארה



תבנית:מבנה תבנית



תבנית:מבנה תבנית


גודל הזרימה

תבנית:מבנה תבנית



תבנית:מבנה תבנית


תבנית:הארה

קלט ופלט

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

הקלט

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

  1. קיבול הקשת מתבנית:קוד בשורה לתבנית:קוד בשורה, אם יש קשת כזו.
  2. 0 אם אין קשת כזו.


לשם הנוחות, בשאר החומר בנושא נגדיר cu,v= תבנית:קוד בשורה.



תבנית:מבנה תבנית


תבנית:שימו לב

הפלט

נרצה פלט שמתאר כמה זורם בכל קשת. באופן כללי יש יש יותר מדרך אחת הגיונית לעשות זאת; אנו נבחר בדרך שייתכן שתיראה שרירותית בתחילה. נניח שהפלט הוא תבנית:קוד בשורה, שהיא מטריצה שלה כניסה תבנית:קוד בשורה לכל שני צמתים (כלומר, אף פעם לא מוחזר הערך תבנית:קוד בשורה, כבטבלת ערבול). הערך תבנית:קוד בשורה מתאר כמה זורם מu לv, שהוא, עפ"י ההגדרה, מינוס מה שזורם מv לu. לשם הנוחות, בשאר החומר בנושא נגדיר fu,v= תבנית:קוד בשורה.



תבנית:מבנה תבנית


תבנית:שימו לב

תבנית:מבני נתונים ואלגוריתמים - מחברת קורס