10
Design of Algorithms – Assignment 4 2016 sem B שאלה1 סעיף א ממיר הקלט1 . בונה = { | ∈ } , = { | ∈ } ו- = . 2 . בונה 1 = {( , ) | ∈ } , 2 = {( , ) | (, ) ∈ } ו- = 1 2 . 3 . מגדיר: = ( , ) . 4 . מגדיר: () = { () , = ( , )∈ 1 () ,∈ 2 , לכל . ממיר הפלט1 . מחזיר[ ] על כל ה- בתור השדה 1 [] )שם לשדה( . אורֵ ת האלגוריתם מבוסס הרדוקציה1 . בנה ו- כבממיר הקלט. 2 . הרץ את אלגוריתם בלמן- פורד על , , . 3 . הרץ את ממיר הפלט. הוכחת נכונות טענת עזר: קיים = { ,…, } מסלול במשקל תחת בגרף קיים = {, … , } מסלול במשקל לפי( בגרף) אפשרות הסכימה הראשונה . הוכחה: יהא = { ,…, } מסלול במשקל תחת בגרף . נוכיח באינדוקציה כי = {, … , } מסלול במשקל בגרף)לפי אפשרות הסכימה הראשונה( . במקרה הבסיס, מ דובר על מסלול הכולל שני קדקודים: ו- . מאופן בניית 1 נובע ש- הוא קדקוד, ולכן{} הוא מסלול באורך אפס, ומשקלו הינו 1 ({}) = ({ , }) . נניח שהטענה נכונה לכל מסלול באורך. נוכיח על מסלול באורך+1 . נתבונן בו: = { ,…,,, } . מאופן הגדרת , נובע בהכרח כי= . לכן המסלול נראה כמו: = { ,…,, , } . מאותה הסיבה קיים ש כך- = ש לבנשים( יתכן= .) נסמן: = { ,…, } . לכן: = ∘ {( , ), ( , )} . מ הנחת ה אינדוקציה קיים מסלול = {, … , } בגרף כך ש- ( )= 1 () . כמו- כן, מהגדרת כי נובע(, ) ∈ . לב נשים כי ( )= ( ) + ( , ) + ( , )= 1 () + (, ) + () = 1 () , כנדרש. יהא = {, … , } מסלול במשקל בגרף . נוכיח באינדוקציה כי = { ,…, } מסלול במשקל תחת בגרף . נוכיח זאת בא ופן דומה ב אינדוקציה על אורך המסלול. במקרה הבסיס, מדובר על מסלול הכולל רק קדקוד אחד{} ואז מהגדרת 1 גם{ , } מסלול ב- באות המשקל ו באורך מסלול לכל נכונה שהטענה נניח. על נוכיח. מסלול באורך+1 בו: נתבונן. = {, … , , } . הגדרת מאופן נובע, ש- ( , ), ( , )∈ . נסמן: = {, … , } הרישא של . לכן: = ∘ {(, )} . מהנחת האינדוקציה קיים מסלול = { ,…, } בגרף כך ש- ( )= 1 () . כמו- כן, מהגדרת נובע כי ( )= ( ) + ( , ) + ( , )= 1 () + (, ) + () = 1 () , כנדרש. טענ ה ראשית: האלגוריתם מבוסס הרדוקציה מחזיר לכל קדקוד את 1 (, ) . הוכחה: יהא 1 [] הערך שהוחזר על- ידי האלגוריתם. נסמן: 1 [] = . כלומר,[ ]= . מנכונות הקופסא השחורה קיים מסלול = { ,…, } ב- במשקל , וזהו המסלול הקל ביותר שם. מטענת העזר קיים מסלול = {, … , } מסלול במשקל 1 () = בגרף . נניח בשלילה שקיים מסלול = {, … , } במשקל 1 () = < . אזי מטענת העזר קיים מסלול = { ,…, } בגרף במשקל . כמו- כן,< , בסתירה לכך ש- המסלול הקל ביותר. לכן לא קיים כזה, כלומר הוא מסלול קל ביותר ומשקלו 1 [] , כנדרש.

Assignment 4 6 sem B - BGUDesign of Algorithms – Assignment 4 2016 sem B 2. , run ℎ ( 1 ,… , ℎ)and update the results in the field תונוכנ רבסה

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • Design of Algorithms – Assignment 4 2016 sem B

    1שאלה סעיף א

    ממיר הקלט

    𝑉𝑜𝑢𝑡בונה .1 = {𝑣𝑜𝑢𝑡 | 𝑣 ∈ 𝑉} , 𝑉𝑖𝑛 = {𝑣𝑖𝑛 | 𝑣 ∈ 𝑉} ו-�̃� = 𝑉𝑖𝑛 ∪ 𝑉𝑜𝑢𝑡.

    𝐸1בונה .2 = {(𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡) | 𝑣 ∈ 𝑉} ,𝐸2 = {(𝑢𝑜𝑢𝑡 , 𝑣𝑖𝑛) | (𝑢, 𝑣) ∈ 𝐸} ו-�̃� = 𝐸1 ∪ 𝐸2.

    �̃�מגדיר: .3 = (�̃�, �̃�) .

    (�̃�(𝑒מגדיר: .4 = {𝑤(𝑣) , 𝑒 = (𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡) ∈ 𝐸1𝑤(𝑒) , 𝑒 ∈ 𝐸2

    𝑒, לכל ∈ �̃�.

    ממיר הפלט

    𝑣-על כל ה [𝑑[𝑣𝑜𝑢𝑡מחזיר .1 ∈ 𝑉 בתור השדה𝑑1[𝑣] )שם לשדה( .

    מבוסס הרדוקציה האלגוריתםֵתאור

    . כבממיר הקלט �̃�-ו �̃�בנה .1

    ,�̃�פורד על -הרץ את אלגוריתם בלמן .2 𝑠𝑖𝑛 , �̃�.

    הרץ את ממיר הפלט. .3

    הוכחת נכונות

    �̃�קיים טענת עזר: = {𝑠𝑖𝑛 , … , 𝑣𝑜𝑢𝑡} מסלול במשקל𝑘 תחת�̃� בגרף�̃� ⇔ קיים 𝑃 = {𝑠, … , 𝑣} מסלול במשקל

    𝑘 אפשרות הסכימה הראשונה( בגרף )לפי𝐺.

    :הוכחה

    �̃�יהא = {𝑠𝑖𝑛 , … , 𝑣𝑜𝑢𝑡} מסלול במשקל𝑘 תחת�̃� בגרף�̃� . נוכיח באינדוקציה כי𝑃 = {𝑠, … , 𝑣}

    דובר על מסלול במקרה הבסיס, מ .𝐺)לפי אפשרות הסכימה הראשונה( בגרף 𝑘מסלול במשקל

    הוא מסלול באורך {𝑠}הוא קדקוד, ולכן 𝑠-נובע ש 𝐸1. מאופן בניית 𝑠𝑜𝑢𝑡-ו 𝑠𝑖𝑛הכולל שני קדקודים:

    ({𝑤1({𝑠אפס, ומשקלו הינו = 𝑤({𝑠𝑖𝑛 , 𝑠𝑜𝑢𝑡}) נניח שהטענה נכונה לכל מסלול באורך .𝑚 ≥ .

    𝑚באורך �̃�נוכיח על מסלול + �̃�. נתבונן בו: 1 = {𝑠𝑖𝑛 , … , 𝑥, 𝑦, 𝑣𝑜𝑢𝑡} מאופן הגדרת .�̃� נובע ,

    𝑦בהכרח כי = 𝑣𝑖𝑛כמו: . לכן המסלול נראה�̃� = {𝑠𝑖𝑛 , … , 𝑥, 𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡} מאותה הסיבה קיים .𝑢 ∈ 𝑉

    𝑥-כך ש = 𝑢𝑜𝑢𝑡 יתכן )נשים לב ש𝑢 = 𝑠.) :נסמן�̃� = {𝑠𝑖𝑛 , … , 𝑢𝑜𝑢𝑡}.

    �̃�לכן: = �̃� ∘ {(𝑢𝑜𝑢𝑡 , 𝑣𝑖𝑛), (𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡)}. מסלול אינדוקציה קייםה הנחתמ 𝑄 = {𝑠, … , 𝑢} בגרף 𝐺

    (�̃�(�̃�-ש כך = 𝑤1(𝑄). מהגדרת כן,-כמו �̃� נובע כי (𝑢, 𝑣) ∈ 𝐸. נשים לב

    (�̃�(�̃�כי = �̃�(�̃�) + 𝑤(𝑢𝑜𝑢𝑡 , 𝑣𝑖𝑛) + 𝑤(𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡) = 𝑤1(𝑄) + 𝑤(𝑢, 𝑣) + 𝑤(𝑣) = 𝑤1(𝑃) ,

    כנדרש.

    𝑃 יהא = {𝑠, … , 𝑣} מסלול במשקל𝑘 בגרף𝐺 נוכיח באינדוקציה כי . �̃� = {𝑠𝑖𝑛 , … , 𝑣𝑜𝑢𝑡} מסלול

    במקרה הבסיס, אינדוקציה על אורך המסלול. ב –ופן דומה . נוכיח זאת בא�̃�בגרף �̃�תחת 𝑘במשקל

    𝑠𝑖𝑛}גם 𝐸1ואז מהגדרת {𝑠} מדובר על מסלול הכולל רק קדקוד אחד , 𝑠𝑜𝑢𝑡} מסלול

    𝑚. נניח שהטענה נכונה לכל מסלול באורך ו המשקלבאות �̃�-ב . נוכיח על ≤

    𝑚באורך 𝑃מסלול + 𝑃. נתבונן בו: 1 = {𝑠, … , 𝑢, 𝑣}. מאופן הגדרת�̃�ש , נובע-

    (𝑢𝑜𝑢𝑡 , 𝑣𝑖𝑛), (𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡) ∈ �̃�. :נסמן𝑄 = {𝑠, … , 𝑢} הרישא של𝑃 :לכן .𝑃 = 𝑄 ∘ {(𝑢, 𝑣)}. מהנחת

    �̃� מסלול האינדוקציה קיים = {𝑠𝑖𝑛 , … , 𝑢𝑜𝑢𝑡} בגרף �̃� ש כך-�̃�(�̃�) = 𝑤1(𝑄). מהגדרת כן,-כמו �̃� נובע

    (�̃�(�̃� כי = �̃�(�̃�) + 𝑤(𝑢𝑜𝑢𝑡 , 𝑣𝑖𝑛) + 𝑤(𝑣𝑖𝑛 , 𝑣𝑜𝑢𝑡) = 𝑤1(𝑄) + 𝑤(𝑢, 𝑣) + 𝑤(𝑣) =

    𝑤1(𝑃).כנדרש ,

    𝑣מחזיר לכל קדקוד מבוסס הרדוקציה האלגוריתם :ה ראשיתטענ ∈ 𝑉 את𝛿1(𝑠, 𝑣).

    :הוכחה

    [𝑑1[𝑣נסמן: ידי האלגוריתם.-הערך שהוחזר על [𝑑1[𝑣יהא = 𝑘. ,כלומר𝑑[𝑣𝑜𝑢𝑡] = 𝑘. מנכונות

    �̃�הקופסא השחורה קיים מסלול = {𝑠𝑖𝑛 , … , 𝑣𝑜𝑢𝑡} ב-�̃� במשקל𝑘 .וזהו המסלול הקל ביותר שם ,

    𝑃מטענת העזר קיים מסלול = {𝑠, … , 𝑣} מסלול במשקל𝑤1(𝑃) = 𝑘 בגרף𝐺 . נניח בשלילה שקיים

    𝑄מסלול = {𝑠, … , 𝑣} במשקל𝑤1(𝑄) = 𝑟 < 𝑘 אזי מטענת העזר קיים מסלול .�̃� = {𝑠𝑖𝑛 , … , 𝑣𝑜𝑢𝑡}

    𝑟כן, -. כמו𝑟במשקל �̃�בגרף < 𝑘 בסתירה לכך ש ,-�̃� .לכן לא קיים המסלול הקל ביותר𝑄 ,כזה

    , כנדרש.[𝑑1[𝑣הוא מסלול קל ביותר ומשקלו 𝑃 –כלומר

  • Design of Algorithms – Assignment 4 2016 sem B

    יתוח זמן ריצהנ

    ,�̃�נשים לב כי �̃� ∈ 𝑂(|𝑉| + |𝐸|) .הרחבת הגדרת פונקצית המשקל לוקחת וכך גם זמן בנייתם𝑂(|𝑉| + |𝐸|)

    |𝑂(|�̃�פורד לוקחת -הרצת בלמןגם כן. ⋅ |�̃�|) = 𝑂(|𝑉| ⋅ |𝐸|) וממיר הפלט לוקח ,𝑂(|𝑉|) כלומר, סך זמן .

    |𝑂(|𝑉הריצה הינו ⋅ |𝐸|).

    בסעיף

    𝑅𝑒𝑙𝑎𝑥1(𝑢, 𝑣, 𝑤)

    1. 𝑖𝑓 (𝑑[𝑣] > 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑣))

    1.1. 𝑑[𝑣] ← 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑣)

    1.2. 𝜋[𝑣] ← 𝑢

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

    [𝑠 :𝑑[𝑠ידי עדכון מחדש רק של משקל המסלול של -ישתנה, עלהאתחול .(𝑤(𝑣נוסיף גם את ← 𝑤(𝑠) .

    𝑅𝑒𝑙𝑎𝑥2(𝑢, 𝑣, 𝑤)

    1. 𝑖𝑓 (𝑑[𝑣] > 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑢) − 𝑤(𝑣))

    1.1. 𝑑[𝑣] ← 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑢) − 𝑤(𝑣)

    1.2. 𝜋[𝑣] ← 𝑢

    ונחסיר , [𝑑[𝑢-בכל פעם נוסיף את משקל הקדקוד האחרון כדי לצמצם אותו מ האתחול עצמו יישאר ללא שינוי.

    , (𝑤(𝑠והוספנו את [𝑑[𝑣-מ (𝑤(𝑣אנו מחסירים בסוף את 𝑣את משקל הקדקוד האחרון. כך נגיע למצב שלכל

    𝑃-לדוגמא, נניח ש שלא הצטמצם. = {𝑠, 𝑥, 𝑦, 𝑣} מסלול קל ביותר מ-𝑠 ל-𝑣 ידי האלגוריתם -אשר נבחר על

    אז: שלנו.

    𝑑[𝑣] = 𝑑[𝑦] + 𝑤(𝑦, 𝑣) + 𝑤(𝑦) − 𝑤(𝑣) = 𝑑[𝑥] + 𝑤(𝑥, 𝑦) + 𝑤(𝑥) − 𝑤(𝑦) + 𝑤(𝑦, 𝑣) + 𝑤(𝑦) − 𝑤(𝑣)

    = 𝑑[𝑠] + 𝑤(𝑠, 𝑥) + 𝑤(𝑠) − 𝑤(𝑥) + 𝑤(𝑥, 𝑦) + 𝑤(𝑥) − 𝑤(𝑦) + 𝑤(𝑦, 𝑣) + 𝑤(𝑦) − 𝑤(𝑣)

    = 0 + 𝑤(𝑠, 𝑥) + 𝑤(𝑥, 𝑦) + 𝑤(𝑦, 𝑣) + 𝑤(𝑠) − 𝑤(𝑥) + 𝑤(𝑥) − 𝑤(𝑦) + 𝑤(𝑦) − 𝑤(𝑣)

    = 𝑤(𝑠, 𝑥) + 𝑤(𝑥, 𝑦) + 𝑤(𝑦, 𝑣) + 𝑤(𝑠) − 𝑤(𝑣) = 𝑤1(𝑃)

    כפי שרצינו.

    𝑅𝑒𝑙𝑎𝑥3(𝑢, 𝑣, 𝑤)

    1. 𝑖𝑓 ((𝑢 = 𝑠) ∧ (𝑑[𝑣] > 𝑑[𝑢] + 𝑤(𝑢, 𝑣)))

    1.1. 𝑑[𝑣] ← 𝑑[𝑢] + 𝑤(𝑢, 𝑣)

    1.2. 𝜋[𝑣] ← 𝑢

    2. 𝑒𝑙𝑠𝑒 𝑖𝑓 (𝑑[𝑣] > 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑢))

    2.1. 𝑑[𝑣] ← 𝑑[𝑢] + 𝑤(𝑢, 𝑣) + 𝑤(𝑢)

    2.2. 𝜋[𝑣] ← 𝑢

    במידה ולא מדובר בקדקוד ההתחלתי, אנו מוסיפים את משקל הקדקוד. במידה וזה הקדקוד ההתחלתי, רק את

    בנוסף, האתחול לא ישתנה.משקל הצלע.

    גסעיף

    ,𝑤∗(𝑢נגדיר את הפונקציה: 𝑣) = 𝑤(𝑢, 𝑣) + 𝑤(𝑢) − 𝑤(𝑣) יהא .𝑃 = {𝑠, 𝑥1, … , 𝑥𝑘 , 𝑣} מסלול כך

    (𝑤2(𝑃-ש = 𝛿2(𝑠, 𝑣). :אזי

    𝑤∗(𝑃) = 𝑤∗(𝑠, 𝑥1) + 𝑤∗(𝑥1, 𝑥2)+. . . +𝑤

    ∗(𝑥𝑘 , 𝑣)

    = 𝑤(𝑠, 𝑥1) + 𝑤(𝑠) − 𝑤(𝑥1) + 𝑤(𝑥1, 𝑥2) + 𝑤(𝑥1) − 𝑤(𝑥2)+. . . +𝑤(𝑥𝑘 , 𝑣) + 𝑤(𝑥𝑘)

    − 𝑤(𝑣)

    = 𝑤(𝑠, 𝑥1) + 𝑤(𝑥1, 𝑥2)+. . . +𝑤(𝑥𝑘 , 𝑣) + 𝑤(𝑠) − 𝑤(𝑥1) + 𝑤(𝑥1)

    − 𝑤(𝑥2)+. . . +𝑤(𝑥𝑘) − 𝑤(𝑣)

    = 𝑤(𝑠, 𝑥1) + 𝑤(𝑥1, 𝑥2)+. . . +𝑤(𝑥𝑘 , 𝑣) + 𝑤(𝑠) − 𝑤(𝑣) = 𝑤2(𝑃) = 𝛿2(𝑠, 𝑣)

    (𝑃 :𝑤∗(𝑃כלומר הראנו שלכל מסלול = 𝑤2(𝑃) אילו נניח בשלילה שקיים מסלול .𝑄 = {𝑠, … , 𝑣} כך

    = (𝑤∗(𝑄ש < 𝑤∗(𝑃) :אז הרי שלאותו המסלול𝑤2(𝑄) < 𝑤2(𝑃) = 𝛿2(𝑠, 𝑣) בסתירה. לכן ,𝑃 קל ביותר גם

    (𝑤∗(𝑃. כלומר, ∗𝑤תחת = 𝛿∗(𝑠, 𝑣).כנדרש ,

  • Design of Algorithms – Assignment 4 2016 sem B

    2שאלה סעיף א

    ֵתאור האלגוריתם

    𝐸𝑎𝑠𝑦𝑃𝑎𝑡ℎ𝐴(𝐺, 𝑠, 𝑤)

    1. for each 𝑢 ∈ 𝑉:

    1.1. 𝐷[𝑣] ← ∞

    2. 𝐷[𝑠] ← 0

    3. run 𝐷𝐹𝑆(𝐺) and save f[𝑣] values for each 𝑣 ∈ 𝑉

    4. reverse 𝐺, denote it by 𝐺𝑅

    5. for each 𝑣 ∈ 𝑉:

    5.1. 𝑐𝑜𝑙[𝑣] ← 𝑤ℎ𝑖𝑡𝑒

    6. 𝑖 ← 0

    7. for each 𝑢 ∈ 𝑉, in decreasing order by f values:

    7.1. if 𝑐𝑜𝑙[𝑢] = 𝑤ℎ𝑖𝑡𝑒

    7.1.1. 𝑖 ← 𝑖 + 1

    7.1.2. 𝐶𝑖 ← ∅

    7.1.3. 𝑉𝑖𝑠𝑖𝑡𝑉𝑒𝑟𝐴(𝐺𝑅 , 𝑢)

    7.1.4. 𝑈𝑝𝑑𝑎𝑡𝑒(𝐺, 𝑢)

    𝑉𝑖𝑠𝑖𝑡𝑉𝑒𝑟𝐴(𝐺𝑅 , 𝑢)

    1. 𝑐𝑜𝑙[𝑢] ← 𝑔𝑟𝑎𝑦

    2. 𝐶𝑖 ← 𝐶𝑖 ∪ {𝑢}

    3. for each out-neighbour 𝑣 of u in 𝐺𝑅 (i.e. an in-neighbour in 𝐺):

    3.1. if 𝑐𝑜𝑙[𝑣] = 𝑤ℎ𝑖𝑡𝑒

    3.1.1. 𝑉𝑖𝑠𝑖𝑡𝑉𝑒𝑟𝐴(𝐺𝑅 , 𝑣)

    3.2. else (i.e. 𝑣 has already been visited)

    3.2.1. 𝑅𝑒𝑙𝑎𝑥(𝑣, 𝑢, 𝑤)

    4. 𝑐𝑜𝑙[𝑢] ← 𝑏𝑙𝑎𝑐𝑘

    𝑈𝑝𝑑𝑎𝑡𝑒(𝐺, 𝑢)

    1. 𝑣𝑎𝑙 ← min {𝐷[𝑣]}𝑣∈𝐶𝑖

    2. for each 𝑣 ∈ 𝐶𝑖:

    2.1. 𝐷[𝑣] ← 𝑣𝑎𝑙 הסבר נכונות

    קשת שייכת לרכיב קשירות היטב אם ורק אם היא שייכת למעגל –תחילה, עלינו לשים לב לדבר מהותי ביותר

    (𝑤(𝑒 אז מכוון במעגל משתתפת 𝑒 אם. כלומר, הדרישה כי "מכוון = " שקולה לכך שבכל רכיב קשירות היטב, 0

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

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

    )אם כי יתכן שחלקן בעלות משקל אפס, אך אין שומה שפני הדברים ייראו כך( הינן הקשתות החוצות בין רכיבי

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

    רכיבים בין חוצות קשתות על עוברים ואנחנו(, מעגלים חסר גרף לע דינאמי בתכנון כמו) בחשבון נלקח 𝐺-ב

    של לרכיב שנכנסות קשתות עם רכיבים עבור הנכונים שהערכים אחרי רק בהתאם [𝐷[𝑣 השדה את ומעדכנים

    𝑣 לאחר שסיימנו לעדכן את עודכנו כבר .𝐷[𝑣] עבור כל הקדקודים ברכיב קשירות היטב מסוים, עלינו לעדכן את

  • Design of Algorithms – Assignment 4 2016 sem B

    משקל המסלול הקל ביותר עבור כל אחד ואחד מן הקדקודים ברכיב הקשירות היטב הנ"ל להיות המינימום מבין

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

    שמשקל מסלול קל ביותר זהה בין כל –וזאת בהתאם לאבחנתו מלעיל של ערך זה לכל אחד מן הקדקודים,

    הקדקודים של אותו רכיב קשירות היטב.

    ניתוח זמן ריצה

    𝐷𝐹𝑆-נשים לב שהשינוי שביצענו ב − 𝑣𝑖𝑠𝑖𝑡 שריר. בנוסף, -'וגהשני לא הוסיף לזמן הריצה הרגיל של קוסאר

    . נשים לב שהיא מתבצעת פעם אחת על כל רכיב, כלומר 𝑈𝑝𝑑𝑎𝑡𝑒-השינוי האחר שלנו הוא ביצוע פעולת ה

    |𝑂(|𝑉זמן ריצת האלגוריתם הינו -הכל זמן לינארי גם כן, ולכן סך-לוקחת בסך + |𝐸|).כנדרש ,

    בסעיף

    ֵתאור האלגוריתם

    ההבדל היחיד הינו באופן האתחול של אלגוריתם דייקסטרה:

    𝑀𝑢𝑐ℎ𝑜𝑃𝑎𝑡ℎ𝑒𝑠𝐵(𝐺, 𝑠1, … , 𝑠𝑘 , 𝑤, ℎ)

    1. for each 𝑣 ∈ 𝑉:

    1.1. 𝑑[𝑣] ← ∞

    1.2. 𝜋[𝑣] ← 𝑁𝑢𝑙𝑙

    2. for 1 ≤ 𝑖 ≤ 𝑘:

    2.1. 𝑑[𝑠𝑖] ← ℎ(𝑠𝑖)

    3. run the rest as in 𝐷𝑖𝑗𝑘𝑠𝑡𝑟𝑎 (i.e. find 𝑣 ∈ 𝑉 with minimal 𝑑[𝑣] and etc.)

    הוכחת נכונות

    𝑣לכל :1 טענת עזר ∈ 𝑉 :בכל שלב באלגוריתם מתקים𝑑[𝑣] ≥ 𝛿(𝑣).

    : ההוכח

    .𝑅𝑒𝑙𝑎𝑥-באינדוקציה על סדר פעולות ה

    בסיס:

    ,𝑠1לכל קדקוד שאינו מבין הקבוצה לאחר האתחול … , 𝑠𝑘 :מתקים𝑑[𝑣] = ∞ ≥ 𝛿(𝑣)עבור .

    ,𝑠1 מבין 𝑠𝑗כל … , 𝑠𝑘:

    𝑑(𝑠𝑗) = ℎ(𝑠𝑗) = 𝛿(𝑠𝑗 , 𝑠𝑗) + ℎ(𝑠𝑗) ≥

    𝑘

    min (𝛿(𝑠𝑖 , 𝑠𝑗) + ℎ(𝑠𝑖))

    𝑖=1

    = 𝛿(𝑠𝑗)

    כנדרש.

    :הנחה

    ,𝑅𝑒𝑙𝑎𝑥(𝑢נניח שטרם ביצוע פעולת 𝑣, 𝑤) מסוימת מתקים לכל𝑥 ∈ 𝑉 :𝑑[𝑥] ≥ 𝛿(𝑥).

    :הוכחה

    ,𝑅𝑒𝑙𝑎𝑥(𝑢-לאחר ביצוע פעולת ה 𝑣, 𝑤) נתבונן בצלע –הנ"ל(𝑢, 𝑣). אם ביצוע הפעולה לא

    . כלומר, [𝑑[𝑣הוא שינה רק את , אז הטענה עדיין מתקיימת. אחרת, [𝑑[𝑣שינה את הערך

    𝑥לכל קדקוד אחר ∈ 𝑉 − {𝑣} השדה𝑑[𝑥] :לא השתנה, ולכן מהנחת האינדוקציה

    𝑑[𝑥] ≥ 𝛿(𝑥) . :לאחר ביצוע הפעולה𝑑[𝑣] = 𝑑[𝑢] + 𝑤(𝑢, 𝑣) ≥ 𝛿(𝑢) + 𝑤(𝑢, 𝑣) נקבל .

    כי:

  • Design of Algorithms – Assignment 4 2016 sem B

    𝛿(𝑣) =𝑘

    min (𝛿(𝑠𝑖 , 𝑣) + ℎ(𝑠𝑖))𝑖=1

    ≤𝑘

    min (𝛿(𝑠𝑖 , 𝑢) + 𝑤(𝑢, 𝑣) + ℎ(𝑠𝑖))𝑖=1

    = 𝑤(𝑢, 𝑣) +𝑘

    min (𝛿(𝑠𝑖 , 𝑢) + ℎ(𝑠𝑖))𝑖=1

    ≤ 𝑤(𝑢, 𝑣) + 𝛿(𝑢)

    ≤ 𝑑[𝑣]

    כנדרש.

    נותר ללא שינוי. [𝑑[𝑣הערך בשדה 𝑆-ל 𝑣מרגע הכנסת קדקוד אבחנה:

    𝑆לאורך כל פעולת האלגוריתם :2אבחנה ⊆ 𝑉 .

    𝑣לכל :2 טענת עזר ∈ 𝑉 ברגע הכנסת הקדקוד𝑣 ל-𝑆 מתקים :𝑑[𝑣] = 𝛿(𝑣).

    : ההוכח

    .𝑆-הכנסת הקדקודים ל באינדוקציה על סדר

    בסיס:

    𝑠𝑖 (𝑖-כל מסלול ממינימלי. (ℎ(𝑠𝑗בעל 𝑠𝑗הקדקוד שיוכנס הינו בהתחלה, ≠ 𝑗 ל )-𝑠𝑗 מתחיל

    (ℎ(𝑠𝑖עם ≥ ℎ(𝑠𝑗) שלילי, ולכן לא יתכן שיהיה קל יותר -ויעבור בקשתות בעלות משקל אי

    [𝑑[𝑠𝑗לכן: לעצמו. 𝑠𝑗-מאשר המסלול הריק מ = 𝛿(𝑠𝑗).

    :הנחה

    𝑣שעד הצעד הנוכחי לכל נניח ∈ 𝑉 ברגע הכנסת הקדקוד𝑣 ל-𝑆 :מתקים𝑑[𝑣] = 𝛿(𝑣).

    :הוכחה

    ,𝑠1קדקוד מבין 𝑠𝑗יהא הקדקוד הנבחר בשלב זה. 𝑣יהא … , 𝑠𝑘 כך שהמסלול 𝑃 מ-𝑠𝑗 ל-𝑣

    (𝛿(𝑣כלומר, .ים האחרים-𝑠𝑖-כל אחד מן המסלולים מה לפחות כמוקל = 𝛿(𝑠𝑗 , 𝑣) + ℎ(𝑠𝑗) .

    נחלק לשני מקרים: אם כן,

    o אם 𝑠𝑗 ∈ 𝑆ניזכר כי . 𝑣 בדיוק עומד להיות מוכנס ל-𝑆 ולכן בתחילת השלב ,𝑣 ∉ 𝑆 .

    ,𝑥)כלומר, ישנה צלע חוצה 𝑦) ∈ 𝐸 במסלול𝑃 כך ש-𝑥 ∈ 𝑆 וגם𝑦 ∉ 𝑆 .:נסמן

    𝑃 = 𝑃1 ∘ {(𝑥, 𝑦)} ∘ 𝑃2 באשר𝑃1 = {𝑠𝑗 , … , 𝑥} ו-𝑃2 = {𝑦, … , 𝑣} . נשים לב ש-𝑃1

    נקבל כי:הוא רישא של מסלול קל ביותר, ולכן בעצמו מסלול קל ביותר.

    𝛿(𝑣) = 𝛿(𝑠𝑗 , 𝑣) + ℎ(𝑠𝑗) = 𝑤(𝑃) + ℎ(𝑠𝑗) = 𝑤(𝑃1) + 𝑤(𝑥, 𝑦) + 𝑤(𝑃2) + ℎ(𝑠𝑗)

    = 𝛿(𝑠𝑗 , 𝑥) + 𝑤(𝑥, 𝑦) + 𝑤(𝑃2) + ℎ(𝑠𝑗)

    = (𝛿(𝑠𝑗 , 𝑥) + ℎ(𝑠𝑗)) + 𝑤(𝑥, 𝑦) + 𝑤(𝑃2)

    ≥ 𝑑[𝑥] + 𝑤(𝑥, 𝑦) + 𝑤(𝑃2)

    ניזכר . 𝑥השויון האחרון נובע מהנחת האינדוקציה מופעלת על הקדקוד -כאשר אי

    (𝑤(𝑃2שליליים ולכן: -שהמשקלים על הקשתות הם אי ≥ . כלומר:0

    ≥ 𝑑[𝑥] + 𝑤(𝑥, 𝑦)

    ,𝑅𝑒𝑙𝑎𝑥(𝑥-קראנו גם ל 𝑆-ל 𝑥כן, כאשר הכנסנו את -כמו 𝑦, 𝑤) ואז התקים

    𝑑[𝑦] ≤ 𝑑[𝑥] + 𝑤(𝑥, 𝑦)והחל משלב זה והלאה , 𝑑[𝑥] לא השתנה, בעוד ש-𝑑[𝑦]

    : יכול רק לקטון. כלומר, נקבל ש

    = 𝑑[𝑥] + 𝑤(𝑥, 𝑦) ≥ 𝑑[𝑦]

  • Design of Algorithms – Assignment 4 2016 sem B

    , וזה היה 𝑑ניזכר שבאלגוריתם בחרנו את הקדקוד בעל הערך המינימלי בשדה

    . כלומר:𝑣הקדקוד

    ≥ 𝑑[𝑣]

    o אם –אחרת𝑠𝑗 ∉ 𝑆 .שליליים והיות ובחרנו את -היות ומשקלי הקשתות הם אי𝑣

    𝑠𝑗)ולכן במקרה זה שבו ∉ 𝑆 וגם בחרנו את𝑣 ולא את𝑠𝑗 אז𝑑[𝑣] ≤ 𝑑[𝑠𝑗] נקבל )

    : ש

    𝛿(𝑣) = ℎ(𝑠𝑗) + 𝑤(𝑃) ≥ ℎ(𝑠𝑗) ≥ 𝑑[𝑠𝑗] ≥ 𝑑[𝑣]

    (𝛿(𝑣-קיבלנו ש בשני המקרים אז ≥ 𝑑[𝑣] ראינו ש 1. בטענת עזר-𝛿(𝑣) ≤ 𝑑[𝑣] יחד נסיק .

    (𝛿(𝑣שויון = 𝑑[𝑣] ,.כנדרש

    𝑣בסיום ריצת האלגוריתם לכל : טענה ראשית ∈ 𝑉 :מתקים𝑑[𝑣] = 𝛿(𝑣).

    :ההוכח

    2מטענת עזר שלבים, ולכן האלגוריתם עוצר. |𝑉|, יתכנו 2חנה באגדל באחד. מ |𝑆|בכל שלב

    𝑣נובע שבסיום האלגוריתם לכל 1ומאבחנה ∈ 𝑉 :יתקים𝑑[𝑣] = 𝛿(𝑣) .

    ניתוח זמן ריצה

    (𝑂(𝑘ביחס לאלגוריתם דייקסטרה, ביצענו עוד ⊆ 𝑂(|𝑉|) זמן הריצה נותר -פעולות, ולכן סך

    𝑂(|𝐸| + |𝑉| ⋅ log|𝑉|).

    גסעיף

    ֵתאור האלגוריתם

    השינוי יהיה רק בפעולת ביצוע העדכון )ובשם של הפעולה אליה אנו קוראים בפעולה , סעיף אביחס ל

    הראשית(:

    𝐸𝑎𝑠𝑦𝑃𝑎𝑡ℎ𝐶(𝐺, 𝑠, 𝑤)

    1. for each 𝑢 ∈ 𝑉:

    1.1. 𝐷[𝑣] ← ∞

    2. 𝐷[𝑠] ← 0

    3. run 𝐷𝐹𝑆(𝐺, 𝑠) and save f[𝑣] values for each 𝑣 ∈ 𝑉

    4. reverse 𝐺, denote it by 𝐺𝑅

    5. for each 𝑣 ∈ 𝑉:

    5.1. 𝑐𝑜𝑙[𝑣] ← 𝑤ℎ𝑖𝑡𝑒

    6. 𝑖 ← 0

    7. for each 𝑢 ∈ 𝑉, in decreasing order by f values:

    7.1. if 𝑐𝑜𝑙[𝑢] = 𝑤ℎ𝑖𝑡𝑒

    7.1.1. 𝑖 ← 𝑖 + 1

    7.1.2. 𝐶𝑖 ← ∅

    7.1.3. 𝑉𝑖𝑠𝑖𝑡𝑉𝑒𝑟𝐴(𝐺𝑅 , 𝑢)

    7.1.4. 𝑈𝑝𝑑𝑎𝑡𝑒𝑉𝑒𝑟𝐶(𝐺, 𝑢)

    𝑈𝑝𝑑𝑎𝑡𝑒𝑉𝑒𝑟𝐶(𝐺, 𝑢)

    1. for each 𝑣 ∈ 𝐶𝑖:

    1.1. ℎ(𝑣) ← min {𝐷[𝑦] + 𝑤(𝑦, 𝑣)}

    (𝑦,𝑣)∈𝐸𝑦∈𝑉

  • Design of Algorithms – Assignment 4 2016 sem B

    2. run 𝑀𝑢𝑐ℎ𝑜𝑃𝑎𝑡ℎ𝑒𝑠𝐵(𝐶𝑖 , 𝑥1, … , 𝑥𝑘 , 𝑤, ℎ ) and update the results in the field 𝐷 הסבר נכונות

    אז מכוון במעגל משתתפת 𝑒 אם" הפעם, הדרישה השתנתה להיות בדומה לקודם, נתבונן ברכיבי קשירות היטב.

    𝑤(𝑒) ≥ . כלומר, כבר לא ניתן לעדכן למינימום בכל רכיב קשירות היטב, שכן הקשתות הפנימיות אינן "0

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

    .סעיף אשאר האלגוריתם זהה להלה של

    ניתוח זמן ריצה

    |𝑂(|𝑉למעט שינוי זה, זמן הריצה הינו . , לוקח יותר זמן𝑈𝑝𝑑𝑎𝑡𝑒-ת ה עולפ ב ,השינוי האחר שלנו הפעם +

    |𝐸|) . סך זמן הריצה של שינוי זה, בעבור כל רכיבי הקשירות היטב של הגרף, יקח

    𝑛

    ∑ 𝑂(|𝐸𝐶𝑖| + |𝑉𝐶𝑖| ⋅ log |𝑉𝐶𝑖|)𝑖=1

    |𝑂(|𝐸. כלומר, זמן הריצה הינו + |𝑉| ⋅ log |𝑉|) כנדרש.הכל-בסך ,

  • Design of Algorithms – Assignment 4 2016 sem B

    3שאלה אסעיף

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

    האלגוריתם מתעלם מעובדה זו.

    נתבונן בדוגמא הנגדית:

    ,𝑠)הצלע 𝑢) אם נמחק אותה נקבל את הגרף:, כי מיותרת בפני עצמה

    ,𝛿(𝑠שבו המשקלים הקלים ביותר נותרו: 𝑢) = 𝑤(𝑠, 𝑣) + 𝑤(𝑣, 𝑢) = 3 − 1 = 2 ,𝛿(𝑠, 𝑣) = 3 ,𝛿(𝑢, 𝑣) = 1

    ,𝛿(𝑣-ו 𝑢) = )והשאר היו ונשארו אינסוף(. 1−

    ,𝑠)באופן דומה גם הצלע 𝑣) :מיותרת בפני עצמה

    אך אם נחסיר את שתיהן ניוותר עם הגרף:

  • Design of Algorithms – Assignment 4 2016 sem B

    ( הוא אינסוף. 𝑣-)וגם ל 𝑢-ל 𝑠-מ ואז המרחק

    בסעיף

    𝑠נניח כי ∉ 𝑈 .

    0s-קיים מסלול מ ⇔ Lובעל משקל צמתים שמחות 2 בלפחותהעובר 𝑣-ל s-מ G-קיים מסלול ב טענת עזר:

    .Lבמשקל �̃�-ב 𝑣2-ל

    : ההוכח

    נשים לב כי:ההוכחה היא באמצעות בנייה.

    𝑃 = {𝑠, 𝑥1, … , 𝑥𝑘 , 𝑢𝑎, 𝑦1 , … , 𝑦𝑟 , 𝑢𝑏 , 𝑧1, … , 𝑧𝑙 , 𝑣} במשקל מסלול𝐿 העובר בלפחות שתי צמתים

    ,𝑢𝑎שמחות 𝑢𝑏 ∈ 𝑈

    𝑃כל הקשתות העוקבות מסדרת הקדקודים = {𝑠, 𝑥1, … , 𝑥𝑘 , 𝑢𝑎, 𝑦1 , … , 𝑦𝑟 , 𝑢𝑏 , 𝑧1, … , 𝑧𝑙 , 𝑣} שייכות

    ,𝐸, 𝑢𝑎-ל 𝑢𝑏 ∈ 𝑈 וגם סכום משקלי הקשתות הוא𝐿

    , כל הקשתות מסדרת הקדקודים �̃�מאופן בניית

    �̃� = {𝑠0, 𝑥1𝑖𝑥1 , … , 𝑥𝑘

    𝑖𝑥𝑘 , 𝑢𝑎𝑖𝑢𝑎 , 𝑦1

    𝑖𝑦1 , … , 𝑦𝑟𝑖𝑦𝑟 , 𝑢𝑏

    𝑖𝑢𝑏 , 𝑧1𝑖𝑧1 , … , 𝑧𝑙

    𝑖𝑧𝑙 , 𝑣𝑖𝑣} שייכות ל-�̃� ,

    𝑥𝑘)הקשתות 𝑖𝑥𝑘 , 𝑢𝑎

    𝑖𝑎) , (𝑦𝑟𝑖𝑦𝑟 , 𝑢𝑏

    𝑖𝑢𝑏 ) ∈ 𝐸2, וגם מתקים כי

    0 ≤ 𝑖𝑥1 ≤. . . ≤ 𝑖𝑥𝑘 ≤ 𝑖𝑢𝑎 ≤ 𝑖𝑦1 ≤. . . ≤ 𝑖𝑦𝑟 ≤ 𝑖𝑢𝑏 ≤ 𝑖𝑧1 ≤. . . ≤ 𝑖𝑧𝑙 ≤ 𝑖𝑣 ≤ �̃�-)כי הקשתות ב 2

    𝑖𝑢𝑎, עולות רמות או נשארות באותה הרמה( ≥ 1 ,𝑖𝑢𝑏 ≥ )כי 𝐿וגם סכום משקלי הקשתות הוא 2

    סמכה היא נבנתה(-זהה למשקל הקשת המקורית על �̃�-משקל כל קשת מ

    �̃� = {𝑠0, 𝑥1𝑖𝑥1 , … , 𝑥

    𝑘

    𝑖𝑥𝑘 , 𝑢𝑎𝑖𝑢𝑎 , 𝑦1

    𝑖𝑦1 , … , 𝑦𝑟𝑖𝑦𝑟 , 𝑢𝑏

    2, 𝑧12, … , 𝑧𝑙

    2, 𝑣2} במשקל מסלול𝐿 0-מs ל-𝑣2

    שני קודקודים לפחותמבין אלה שעוברים ב t-ל s-מ G-הוא המסלול הזול ביותר ב P: המסלולטענה ראשית

    .𝑡2-ל s0-מ �̃�-הוא המסלול הזול ביותר ב 𝑈 ⇔ �̃�-מ

    :ההוכח

  • Design of Algorithms – Assignment 4 2016 sem B

    . נניח L משקלוו �̃� -ב �̃�שמתקבל בסוף שלב תרגום הפלט ממסלול מתאים G-מסלול ב 𝑃יהי

    LL, שאורכוP*רמזורים( 2 בלפחות)העובר G-קיים מסלול בש בשלילה *. טענת העזר נקבל מ

    , בסתירה לאופטימאליות הקופסא השחורה )האלגוריתם של L*בעל אורך �̃�-כי קיים מסלול ב

    Dijkstra.)

    . מט.ע. קיים 𝑈-קודקודים משני לפחותשעובר ב 𝐺 -ב 𝑡 -ל 𝑠 -מ 𝐿ביותר באורך למסלול ק 𝑃יהי

    ∗𝐿באורך 𝑡2-ל 𝑠0-מ ∗�̃�מסלול �̃�-. נניח בשלילה כי קיים ב𝐿באורך 𝑡2-ל 𝑠0-מ �̃�-ב �̃�מסלול מתאים

    ∗𝐿-ש כך < 𝐿 קיים בש. מט.ע. נובע-𝐺 מסלול מתאים𝑃∗ באורך𝐿∗ מ-𝑠 ל-𝑡, בסתירה למינימאליות𝑃.

    גסעיף

    נתבונן בגרף הבא:

    :𝑉0-ל ֹּונ ָשי כו 𝑠-הביקור ב נתחיל את

    ונקבל: 𝑐ואל 𝑏, אל 𝑎נמשיך אל

    , אך בעת 𝑐הוא שכן של 𝑎מתבצעת רק עבור השכנים בצבע שחור. אמנם ③נשים לב שהבדיקה בשורה

    , והוא אכן שייך𝑠הקדקוד אז מי כן ייבדק? בצבע אפור, ולכן הבדיקה תדלג עליו. 𝑎הקדקוד 𝑐בדיקת

    𝑉(3+1) mod 4-ל = 𝑉0 כפי שהאלגוריתם החליט בהתחלה. כלומר, הבדיקה תעבור בהצלחה, והאלגוריתם יחזיר ,

    𝑡𝑟𝑢𝑒 ואת החלוקה לקבוצות𝑉0, 𝑉1, 𝑉2, 𝑉3 הקשת הנ"ל, בעוד(𝑐, 𝑎) כלומר, האלגוריתם .סותרת את החלוקה

    אילו הבדיקה לא היתה מתבצעת רק עבור השכנים .𝑓𝑎𝑙𝑠𝑒כאשר התשובה האמיתית הינה 𝑡𝑟𝑢𝑒מחזיר

    השחורים, אלא גם עבור השכנים האפורים, האלגוריתם היה נכון.