Professional Documents
Culture Documents
MMN 12
MMN 12
שאלה :1
סעיף א':
נתון שכל הצלעות ב 𝑣 𝑃𝑠,שימושיות .נניח ש 𝑣 𝑃𝑠,הינו מסלול מזערי באינדוקציה על אורך המסלול .n
בדיקה כאשר 𝟎 = 𝒏 :גודל המסלול 𝑣 𝑃𝑠,הוא ,0ולכן מתקיים בהכרח 𝑣 = 𝑠 .לא קיימים קשתות במסלול
′
𝑣 𝑃𝑠,יקיים 𝑣 𝑃𝑠,ולכן .𝑤(𝑃𝑠,𝑣 ) = 0משום שלכל קשת בגרף יש משקלים חיוביים ,ברור שכל מסלול אחר
′
𝑣 ,𝑤(𝑃𝑠,𝑣 ) ≤ 𝑤(𝑃𝑠,ולכן לפי ההגדרה 𝑃𝑠,𝑣 ,מסלול מזערי. )
נניח את נכונות טענת האינדוקציה עבור מסלול בגודל nונוכיח את נכונותה עבור מסלול בגודל :n+1
מתקיים ,𝑃𝑠,𝑣 = (𝑠, … , 𝑢, 𝑣), |𝑃𝑠,𝑣 | = 𝑛 + 1וכמובן שכל הקשתות שימושיות .נסתכל על המסלול מ sל:u
𝑛 = | 𝑢 .𝑃𝑠,𝑢 = (𝑠, … , 𝑢), |𝑃𝑠,כמובן שכל הקשתות שלו נמצאות גם במסלול 𝑣 ,𝑃𝑠,ומשום שקשתות 𝑣𝑃𝑠,
הן כולן שימושיות ,גם קשתות 𝑢 𝑃𝑠,הן כולן שימושיות.
לפי הנחת האינדוקציה ,משום ש 𝑢 𝑃𝑠,הוא מסלול בגודל nשכל הקשתות שלו שימושיות ,נקבל ש 𝑢 𝑃𝑠,הוא
מסלול מזערי .כמו כן 𝑒 = (𝑢, 𝑣) ∈ 𝐸 ,היא קשת שימושית ,כלומר ,לפי הגדרה ,היא צלע אחרונה
′
𝑣( 𝑃𝑠,שהוא זהה או שונה מ 𝑣.)𝑃𝑠, באיזשהו מסלול מזערי
′
𝑣 .𝑤(𝑃𝑠,𝑣 ) > 𝑤(𝑃𝑠,בשני המסלולים הקשת האחרונה היא 𝑒 והיא מקשרת אל נניח בשלילה שמתקיים )
′
.vנוריד משני המסלולים את הקשת 𝑒 ואת הקודקוד 𝑣 ונקבל ש) 𝑢( 𝑤(𝑃𝑠,𝑢 ) > 𝑤(𝑃𝑠,החסרנו את משקל
𝑒 משני אגפי המשוואה ולכן השוויון עדיין נכון) .אך זוהי סתירה לכך ש) 𝑢 𝑤(𝑃𝑠,מסלול מזערי.
לפיכך 𝒘(𝑷𝒔,𝒗 ) ≤ 𝒘(𝑷′𝒔,𝒗 ) -ולכן 𝒗 𝑷𝒔,הוא מסלול מזערי ,לכל מסלול בגודל 𝟎 ≥ 𝒏.
סעיף ב':
נתון שבמסלול 𝑣 𝑃𝑠,קיימת לפחות קשת אחת )𝑦 𝑒 = (𝑥,שאיננה שימושית .עלינו להראות ש 𝑣 𝑃𝑠,איננו
מסלול מזערי.
𝑒 איננה שימושית ,ולכן היא לא צלע אחרונה במסלול מזערי ,ומתקבל שהמסלול )𝑦 𝑃𝑠,𝑦 = (𝑠, … , 𝑥,
′ ′
𝑦.𝑤(𝑃𝑠,𝑦 ) > 𝑤(𝑃𝑠, 𝑦 𝑃𝑠,שהוא כן מזערי .אם כן מתקיים ) איננו מזערי .לפיכך קיים מסלול אחר
′ ′
𝑦 𝑃𝑠,ו 𝑃𝑦,𝑣 -עם קשת מחברת )𝑣 .(𝑦,כעת נקבל: 𝑣 𝑃𝑠,שמורכב מחיבור המסלולים נגדיר מסלול חדש
′ ′
𝑦𝑤(𝑃𝑠,𝑣 ) = 𝑤(𝑃𝑠,𝑦 ) + 𝑤(𝑃𝑦,𝑣 ) > 𝑤(𝑃𝑠, 𝑣) + 𝑤(𝑃𝑦,𝑣 ) = 𝑤(𝑃𝑠, )
סעיף ג':
יהי 𝑣 𝑃𝑠,מסלול כמעט מזערי .נראה שקיימת בו צלע לא שימושית אחת ויחידה.
משום ש 𝑣 𝑃𝑠,כמעט מזערי ,הוא כמובן איננו מזערי ,ולכן לפי סעיף א' ,קיימות בו קשתות לא שימושיות.
עלינו להראות שיש בדיוק קשת אחת לא שימושית .נראה זאת ע"י הוכחה בשלילה:
נניח בשלילה שקיימות במסלול 2קשתות שונות לא שימושיות ) (𝑥1 , 𝑥2ו) .(𝑦1 , 𝑦2נניח בלי הגבלת
הכלליות ש) (𝑥1 , 𝑥2נמצאת לפני ) (𝑦1 , 𝑦2במסלול 𝑣 .𝑃𝑠,אז מתקיים:
𝑣 𝑃𝑠,𝑣 = 𝑠, … , 𝑥1 , 𝑥2 , … , 𝑦1 , 𝑦2 , … ,
נתבונן על המסלול החלקי 𝑣 .𝑃𝑥2 ,הוא מכיל את הקשת הלא שימושית ) (𝑦1 , 𝑦2ולכן ,לפי סעיף ב' ,הוא לא
מזערי .אם כן ,קיים מסלול אחר 𝑣 𝑃𝑥′2 ,שהוא כן מזערי ,ולכן ) 𝑣.𝑤(𝑃𝑥′2 ,𝑣 ) < 𝑤(𝑃𝑥2 ,
סעיף ד':
נתון שבמסלול הכמעט-מזערי 𝑣 𝑃𝑠,יש קשת לא שימושית בודדת ) .𝑒 = (𝑢1 , 𝑢2
כל שאר הקשתות }𝑒{\𝐸 ∈ 𝑒 ′הן קשתות שימושיות.
מסלול הרישא של 𝑣 𝑃𝑠,מ s-ל ,𝑢1 -נקרא לו ,𝑃𝑠,𝑢1מכיל רק קשתות שימושיות (שכן כל קשת בו היא
ב}𝑒{\𝐸 ) ולכן לפי סעיף א' 𝑃𝑠,𝑢1 ,מסלול מזערי.
מאותו טיעון בדיוק ,מסלול הסיפא של 𝑣 𝑃𝑠,מ 𝑢2 -ל ,𝑣 -נקרא לו 𝑣 ,𝑃𝑢2 ,הוא גם מסלול מזערי.
סעיף ה':
הרעיון המרכזי של האלגוריתם:
נשתמש ראשית באלגוריתם דייקסטרה מצומת sלכל שאר הצמתים .נקבל בחזרה עץ המסלולים
המזעריים Tהמושרש ב .s-נקבל חלוקה של קשתות Gלקשתות שנמצאות ב Tוקשתות שלא נמצאות בה.
קשתות שנמצאות ב Gוב Tגם יחד הן קשתות שימושיות ,וקשתות שנמצאות ב Gבלבד הן קשתות לא-
שימושיות.
כעת ניצור גרף חדש ∗ 𝐺 בו ניצור חלוקה ל 2חלקים ,כאשר בכל חלק יהיה העתק של הקשתות
השימושיות ב Gיחד עם העתקים של כל הצמתים שמחוברים אליהן (בסימוני תג ותגיים ע"מ שנוכל
להבדיל הצמתים של 2החלקים).
בין שני חלקי הגרף נחבר עם קשתות לא-שימושיות מ ,Gועל הגרף המשולב ∗ 𝐺 שנקבל נריץ שוב את
האלגוריתם של דייקסטרה.
נקבל בחזרה עץ מסלולים מזעריים ∗ 𝑇 ,שבו נחפש מסלול מצומת 𝑠′לצומת .𝑡′′
אם קיים כזה ,זהו המסלול שאנו מחפשים .זהו מסלול מזערי ב∗ 𝑇 ,אך הוא מכיל באופן מלאכותי בדיוק
קשת לא שימושית אחת (בחיבור מ 𝐺′ל )𝐺′′ולכן ,אם נמחק את סימוני התגים והתגיים מהמסלול
המתקבל 𝑃𝑠′ ,𝑡 ′′נקבל מסלול בעל קשת לא-שימושית בודדת ב 𝐺 ,ולכן זהו מסלול כמעט מזערי.
האלגוריתם:
נפעיל את אלגוריתם דייקסטרה (עמוד 149בספר הלימוד) על הגרף )𝐸 𝐺 = (𝑉,מצומת sלשאר
הצמתים ,ונקבל בחזרה את עץ המסלולים המזעריים .T
נגדיר:
𝑇𝐸 = – 𝐸1קבוצת הקשתות השימושיות ב 𝐸.
- 𝐸2 = 𝐸\𝐸1קבוצת הקשתות הלא-שימושיות ב 𝐸.
נגדיר גרף חדש ) ∗ 𝑉 𝐺 ∗ = (𝐸 ∗ ,בדרך הבאה:
לכל 𝑒 = (𝑢, 𝑣) ∈ 𝐸1
oניצור צמתים 𝑢′ , 𝑣 ′ , 𝑢′′ , 𝑣′′ב∗ 𝐺 (אם אינן קיימות כבר).
oניצור קשתות ) (𝑢′ , 𝑣 ′ו (𝑢′′ , 𝑣 ′′ )-ב∗ 𝐺 (אם אינן קיימות כבר).
לכל 𝑒 = (𝑢, 𝑣) ∈ 𝐸2ניצור קשתות ) (𝑢′ , 𝑣 ′′ב∗ 𝐺.
נפעיל את אלגוריתם דייקסטרה בשנית על ∗ 𝐺 מצומת 𝑠′לצומת .𝑡′′אם קיים מסלול 𝑃𝑠′ ,𝑡′′כזה ,נחזיר
אותו לאחר שנמחק ממנו את סימוני התגים והתגיים .אם לא ,נחזיר שלא קיים מסלול כזה.
ננמק את נכונות האלגוריתם לפתרון הבעיה:
נשתמש ראשית באלגוריתם דייקסטרה מצומת sלכל שאר הצמתים .נקבל עץ המסלולים המזעריים T
המושרש ב .s-לכל צומת 𝑉 ∈ 𝑣 ,המסלול היחיד מ sל v-הוא מסלול מזערי .לפי סעיף ב' נקבל שכל
הקשתות שנמצאות ב 𝑇𝐸 = 𝐸1הן למעשה שימושיות .כל שאר הקשתות ,שהכנסנו ל ,𝐸2הן קשתות לא-
שימושיות.
הגרף החדש משרה חלוקה בין 2תתי-גרף (נקרא להם 𝐺′ו )𝐺′′שמכילים כל אחד קשתות שימושיות
בלבד ,וכמו כן חיבור מ 𝐺′ל 𝐺′′בעזרת קשתות לא-שימושיות בלבד.
לפיכך ,כאשר נחפש מסלול מזערי ב∗ 𝐺 מצומת 𝑠′לצומת ,𝑡′′ולמעשה נחפש מסלול מ 𝑠′שבתת-גרף 𝐺′
המכיל קשתות שימושיות בלבד ,דרך אחת הקשתות הלא-שימושיות המחברות בין 𝐺′ל ,𝐺′′אל 𝑡′′
שנמצא בתת-גרף 𝐺′′המכיל קשתות שימושיות בלבד.
במילים אחרות ,מסלול 𝑃𝑠′ ,𝑡′′כזה ,אם קיים ,יכיל בדיוק קשת לא-שימושית אחת ,וכל שאר הקשתות יהיו
בהכרח שימושיות ,ולכן ,לפי ההגדרה 𝑃𝑠′ ,𝑡′′ ,הוא מסלול כמעט-מזערי.
נבחין שמסלול כזה לא תמיד קיים .במצב זה ,אין מסלול כמעט-מזערי מ’ sל’’.t
כעת ,בהינתן מסלול כמעט-מזערי ,𝑃𝑠′ ,𝑡′′ניתן לחשב את 𝑡 𝑃𝑠,בקלות ע"י מחיקת סימוני התג והתגיים.
כמובן שמסלול זה גם קיים בגרף 𝐺 המקורי ,שכן בנינו אותו בצורה זו.
ננתח את סיבוכיות זמן הריצה:
אנו מריצים פעמיים את אלגוריתם דייקסטרה ,בעלות של )|𝑉|( 𝜃(|𝐸| ∗ logלפי משפט 4.15בעמוד 153
בספר הלימוד).
סה"כ זמן ריצה )|𝑉|.𝑇(|𝐸|, |𝑉|) = 𝜃(|𝐸| ∗ log|𝑉|) + 𝜃(|𝐸| + |𝑉|) = 𝜃(|𝐸| ∗ log
שאלה :2
נתון עץ פורש מזערי 𝑇 של גרף לא מכוון קשיר 𝐺 .נגדיר גרפים חדשים 𝐺 ′ , 𝑇′שזהים ל𝑇 𝐺,מלבד כך
שהושמטה מהם קשת 𝑇 ∈ ∗ 𝑒 𝐺′ .קשיר .עלינו למצוא אלגוריתם שיתקן את 𝑇′כך שיהיה עץ פורש מזערי
של .𝐺′
הרעיון המרכזי של האלגוריתם:
השמטת הקשת מהעץ 𝑇 הופכת אותו לגרף בעל 2רכיבי קשירות שונים ,נגיד ,𝑇1 , 𝑇2כל אחד מהם עץ.
עלינו להוסיף קשת כלשהי מ 𝐺′ע"מ לחבר בין 2רכיבי קשירות אלה .נבחין שבהכרח יש כזאת ,כי 𝐺 ′
נשארה קשירה .קשת זו צריכה להיות בעל משקל מינימלי ,על מנת להפוך את 𝑇′לעץ פורש מזערי של
.𝐺′
נוכל לעשות זאת ע"י סריקת BFSשל כל אחד מרכיבי הקשירות ,ואז נעבור על כל הקשתות שקצה אחד
שלהן ברכיב של ,𝑇1וקצה שני שלהן ברכיב של .𝑇2מכל קשתות אלה נחפש את זה בעל המשקל
המינימלי.
את הקשת המינימלית הזו נוסיף ל 𝑇′ונקבל עץ פורש מזערי.
האלגוריתם:
בראשית נאתחל את ∞ ← .min_verticle ← NIL, min_weight
נמצא את שני רכיבי הקשירות ב ,𝑇′ע"י בחירת צומת 𝑣 ∈ 𝑇′כלשהי ,והרצת סריקת BFSממנה תוך כדי
סימון במערך .𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑒𝑑_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡[𝑣] = 𝑇1
כעת נבחר צומת 𝑣 ∈ 𝑇′אחרת ,שטרם סומנה ,ונריץ סריקת BFSממנה תוך כדי סימון במערך
.𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑒𝑑_𝑐𝑜𝑚𝑝𝑜𝑛𝑒𝑛𝑡[𝑣] = 𝑇2
לכל 𝑒 ∈ 𝑇′אשר קצה אחד שלו נמצא ב 𝑇1וקצה שני שלו נמצא ב :𝑇2
אם 𝑡:𝑐𝑒 < min_𝑤𝑒𝑖𝑔ℎ
min_weight ← 𝑐𝑒 o
min_𝑣𝑒𝑟𝑡𝑖𝑐𝑙𝑒 ← 𝑒 o
בסיום נוסיף את קשת min_verticleאל .𝑇′כעת 𝑇′הוא עץ פורש מזערי של .𝐺′
עם זאת ,לפי עמוד 94בספר הלימוד ,בכל גרף קשיר מתקיים מתקיים ,|𝐸| ≥ |𝑉| − 1וכל הגרפים
באלגוריתם הם קשירים (או כמעט קשירים ,ז"א ,תוספת של קשת אחת היתה הופכת אותם לקשירים)
ולכן מתקיים )|𝐸|(𝜃 = )|𝑉| .𝜃(|𝐸| +
האלגוריתם החמדן בוחר השמות שממקסמת את מספר הפסוקיות המסופקות החדשות .ז"א ,במקרה
שלנו ,יגדיר 𝑇 ← .𝑥1 ← 𝑥2 ← 𝑥3 ← 𝑥4באופן אוטומטי מוגדר גם 𝐹 ← .¬𝑥1 ← ¬𝑥2 ← ¬𝑥3 ← ¬𝑥4
לפיכך הנוסחה 𝜙 מקיימת:
)𝐹 ∨ 𝐹 ∨ 𝐹( ∧ )𝑇 ∨ 𝑇 ∨ 𝑇( ∧ )𝐹 ∨ 𝑇 ∨ 𝑇( ∧ )𝑇 ∨ 𝑇 ∨ 𝑇( ∧ )𝐹 ∨ 𝑇 ∨ 𝑇( ∧ )𝑇 ∨ 𝑇 ∨ 𝑇( = 𝜙
𝐹= 𝐹∧𝑇∧𝑇∧𝑇∧𝑇∧=T
וההשמה לא מספקת.
לפיכך ,האלגוריתם החמדן לא טוב דיו ,שכן קיימת נוסחת 3-CNFעליה האלגוריתם נכשל ,שכן הנוסחה
ספיקה ,אבל האלגוריתם מפיק כפלט השמה לא מספקת.
שאלה :4
נראה שלכל עץ מושרש בינרי לחלוטין 𝑇 קיימת סדרת שכיחויות 𝑓 כך שאחד מעצי הופמן של הסדרה הוא
𝑇.
יהי 𝑇 עץ בינרי לחלוטין עם 𝑛 צמתים .לכל עלה 𝑖𝑣 נגדיר שכיחות 𝑖𝑓 באופן הבא:
1
= 𝑖𝑓
)𝑖(𝑑2
נוכל להוכיח שלסדרת שכיחויות זו יש עץ הופמן שהוא Tעצמו באינדוקציה על עומק העץ .d
הנחת האינדוקציה :לכל עץ בינרי לחלוטין 𝑇 שעומקו המירבי הוא 𝑑 ,אחד מעצי הופמן של סדרת
1
השכיחויות )𝑖(𝑑 𝑓𝑖 = 2הוא 𝑇.
בדיקה כאשר 𝟎 = 𝒅 :אם העומק הוא 0סימן שב𝑇 יש עלה אחד ,וסדרת השכיחויות מכילה את האיבר
1
הבודד .𝑓1 = 0 = 1כמובן שעץ הופמן של סדרה זו הוא גם בעל עלה אחד ,ולכן הוא זהה ל𝑇.
2
נוכיח את נכונות טענת האינדוקציה עבור עץ בעומק 𝐝 ונוכיח את נכונותה עבור עץ בעומק 𝟏 :𝒅 +
יהי )𝐸 𝑇 = (𝑉,עץ בינרי לחלוטין עם עומק של .𝑑 + 1לפיכך ,קיים לפחות צומת אחד 𝑢 המקיים
.𝑑(𝑢) = 𝑑 + 1לפי עמוד 185בספר הלימוד ,משום ש Tהוא עץ בינרי לחלוטין ,ל𝑢 יש אח 𝑣 שהוא גם
עלה ,וגם הוא מקיים .𝑑(𝑣) = 𝑑 + 1
נשכפל את 𝑇 ל .𝑇′
(*) כל עוד קיים צומת 𝑢 ∈ 𝑉𝑇′כך ש :𝑑(𝑢) = 𝑑 + 1
2 1
𝑑 .2𝑑+1 = 2את העלים נמצא את אחיו ,𝑣 ∈ 𝑉𝑇′ונציב באב שלהן את סכום השכיחויות שלהם:
𝑣 𝑢,עצמם נמחק מן העץ .𝑇′
נבחין שכל האבות לשעבר (אלה שהצבנו בהם את סכום השכיחויות של הבנים בעומק )𝑑 + 1הם בעומק
1
𝑑 (שכן הם אבות של צמתים בעומק ,)𝑑 + 1והשכיחות שלהם היא 𝑑 .זה תואם את סדרת השכיחויות
2
𝑖𝑓.
כמו כן ,כבר לא קיימים צמתים בעומק ,𝑑 + 1שכן כולם אוחדו לעומק 𝑑 ,ולכן כעת עומק העץ הוא 𝑑.
1
קיבלנו ש 𝑇′כעת הוא עץ בינרי לחלוטין בעומק 𝑑 שמקיים את סדרת השכיחויות )𝑖(𝑑.𝑓𝑖 = 2