שאלה - Algorithms

Download Report

Transcript שאלה - Algorithms

APSP - 7 ‫תרגול‬
b
c
a
d
e
1
‫שאלה ‪ – 1‬מספר זוגי של קשתות אדומות‬
‫‪ ‬תרגיל‪ :‬נתון גרף מכוון ) ‪ ,G  (V , E‬פונקציית משקל‬
‫‪ , w : E  R‬וכל קשת בגרף צבועה בכחול או באדום‪.‬‬
‫בנוסף‪ ,‬ידוע שאין מעגלים שליליים בגרף‪ .‬תארו אלג'‬
‫למציאת המק"בים בין כל זוג קודקודים בגרף‪ ,‬מבין‬
‫המסלולים שמכילים מספר זוגי של קשתות אדומות‪.‬‬
‫‪e‬‬
‫‪5‬‬
‫‪1‬‬
‫‪a‬‬
‫‪8‬‬
‫‪f‬‬
‫‪3‬‬
‫‪2‬‬
‫‪b‬‬
‫‪1‬‬
‫‪d‬‬
‫‪4‬‬
‫‪9‬‬
‫‪5‬‬
‫‪c‬‬
‫ – דוגמא‬1 ‫שאלה‬
e
1
5
1
d
4
9
a
8
f
3
5
c
b
a ~ e : a  e  f  a  e 19
b ~ a : b  a  3
e ~  b : e  f  a  e  f  c  b  24
3
‫שאלה ‪ – 1‬פתרון ‪1#‬‬
‫‪ ‬בדומה לפתרון של שבוע שעבר‪ ,‬נבנה גרף חדש‪ ,‬בו כל‬
‫קודקוד מוכפל לשניים‪ ,‬וקשתות מוכפלות גם כן‪.‬‬
‫‪ ‬על הגרף החדש נריץ‬
‫את האלגוריתם של‬
‫‪.Johnson‬‬
‫‪4‬‬
‫‪ue‬‬
‫‪uo‬‬
‫‪u‬‬
‫‪ve‬‬
‫‪vo‬‬
‫‪v‬‬
‫‪ue‬‬
‫‪uo‬‬
‫‪u‬‬
‫‪ve‬‬
‫‪vo‬‬
‫‪v‬‬
‫שאלה ‪ – 1‬פתרון ‪1#‬‬
‫‪ ‬סיבוכיות‪:‬‬
‫‪ ‬הרצת ‪ Johnson‬על גרף עם | ‪ 2 | V‬קודקודים‬
‫ו‪ 2 | E | -‬קשתות‪:‬‬
‫)| ‪O(|V | log | V |  | V || E‬‬
‫‪2‬‬
‫‪5‬‬
‫שאלה ‪ – 1‬פתרון ‪2#‬‬
‫•נשנה את האלגוריתם של ‪: Floyd-Warshall‬‬
‫‪0 ‬‬
‫‪1‬‬
‫‪n ‬‬
‫•באלג' בונים סדרה של מטריצות ‪, D , D ,...,D‬‬
‫כך שהמטריצה ‪ Dk ‬מתאימה למק"בים מבין‬
‫המסלולים שעוברים רק דרך קודקודים מהקבוצה‬
‫}‪.{1,...,k‬‬
‫‪k ‬‬
‫‪D‬‬
‫נבנה באופן הבא‪:‬‬
‫•איבר במטריצה‬
‫‪‬‬
‫‪k 1‬‬
‫‪k 1‬‬
‫‪‬‬
‫‪di , j  min di , j , di,k  dk , j‬‬
‫קיים מסלול קל יותר שעובר דרך ‪.k‬‬
‫‪6‬‬
‫‪k 1‬‬
‫‪k ‬‬
‫שימוש ב‪ k -‬אינו עוזר לנו‪.‬‬
‫שאלה ‪ – 1‬פתרון ‪2#‬‬
‫‪ ‬נשנה את האלג' של ‪ FW‬כך שיבנה שתי סדרות של‬
‫מטריצות‪:‬‬
‫◦ ‪ , E 0 , E 1 ,...,E n ‬עבור המק"בים מבין המסלולים‬
‫המכילים מספר זוגי של קשתות אדומות‪.‬‬
‫◦ ‪ , O0 , O1 ,...,On ‬עבור המק"בים מבין המסלולים‬
‫המכילים מספר אי‪-‬זוגי של קשתות אדומות‪.‬‬
‫◦ (המטריצות ‪ E k  , Ok ‬מתאימות למק"בים מבין המסלולים‬
‫שעוברים רק דרך קודקודים מהקבוצה }‪) .{1,...,k‬‬
‫‪7‬‬
2# ‫ – פתרון‬1 ‫שאלה‬
:‫ חישוב המטריצות‬
ei,kj1
 k 1 k 1
k 
ei , j  minei ,k  ek , j
 k 1
 k 1
oi ,k  ok , j
oi,kj1
 k 1 k 1
k 
oi , j  minoi ,k  ek , j
 k 1
 k 1
ei ,k  ok , j
8
‫שאלה ‪ – 1‬סיבוכיות‬
‫חישוב איבר בודד ‪O(1) -‬‬
‫חישוב מטריצה שלמה ‪O(| V |2 ) -‬‬
‫חישוב כל המטריצות ‪O(| V |3 ) -‬‬
‫‪9‬‬
?‫עצרו! מה שכחנו‬
!‫ פעמיים‬k -‫אנו מתעלמים ממסלולים שעוברים ב‬
ei,kj1
 k 1 k 1
k 
ei , j  minei ,k  ek , j
 k 1
 k 1
o

o
 i ,k
k, j
k 1
k 1
k 1

oi ,k  ok ,k  ek , j
 k 1
k 1
k 1
e

o

o

k ,k
k, j
 i ,k
10
‫וגם‬
 k 1
oi , j
 k 1 k 1
k 
oi , j  minoi ,k  ek , j
 k 1
 k 1
ei ,k  ok , j
k 1
k 1
k 1

oi ,k  ok ,k  ok , j
 k 1
k 1
k 1
e

o

e

k ,k
k, j
 i ,k
11
‫הערת ביניים (סגור טרנזיטיבי)‬
‫• ‪ Transitive closure‬של גרף הוא ייצוג של הגעתיות‬
‫)‪ .(reachability‬לרוב זה ייוצג ע"י מטריצה ‪ A‬כך ש‪:‬‬
‫קיים מסלול מ‪ i -‬ל‪ j -‬בגרף‪.‬‬
‫‪ai , j  1‬‬
‫• האלגוריתם של ‪ Stephen Warshall‬מוגדר על‬
‫גרף לא ממושקל‪ ,‬ונועד לחשב סגור טרזיטיבי‪.‬‬
‫• ‪ Robert Floyd‬שם לב שבקלות ניתן לשנות את‬
‫האלגוריתם של ‪ Warshall‬כך שיחשב מק"בים‪.‬‬
‫‪12‬‬
‫המשך הערת ביניים‬
?‫ עושה‬Warshall ‫• מה האלגוריתם של‬
‫"במקום" לחשב (על גרף ממושקל) את‬
k 

k 1
k 1
k 1
di , j  min di , j , di,k  dk , j

‫הוא מחשב (על גרף בוליאני) את‬
k 

k 1
k 1
k 1
di, j   di, j , di,k  dk , j

13
‫שאלה ‪2‬‬
‫‪ ‬תרגיל‪ :‬נתון גרף מכוון ) ‪ G  (V , E‬ומספר שלם‬
‫}‪ .m {1,2,...,V 1‬תארו אלג' אשר בודק לכל זוג‬
‫קודקודים ‪ v, u V‬האם קיים הילוך באורך ‪ m‬מ‪u -‬‬
‫ל‪( v -‬ההילוך לא חייב להיות פשוט ויכול לעבור‬
‫דרך קשת יותר מפעם אחת)‪.‬‬
‫‪ ‬מה הפתרון עבור ‪? m  1‬‬
‫‪14‬‬
‫ – דוגמא‬2 ‫שאלה‬
‫נסתכל על הילוכים‬
:‫ עבור‬b -‫ ל‬a -‫מ‬
m 1
m2
m3
m4
b
c
a
d
e
a d eb
a d c eb
15
‫שאלה ‪ – 2‬פתרון‬
‫תהי ‪ A‬מטריצת השכנויות של הגרף‪:‬‬
‫‪1, (i, j )  E‬‬
‫‪ai , j  ‬‬
‫אחרת‬
‫‪0,‬‬
‫‪0 0 1 0‬‬
‫‪‬‬
‫‪0 1 0 0‬‬
‫‪0 0 0 1‬‬
‫‪‬‬
‫‪0 1 0 1‬‬
‫‪‬‬
‫‪1 0 0 0‬‬
‫‪16‬‬
‫‪0‬‬
‫‪‬‬
‫‪1‬‬
‫‪0‬‬
‫‪‬‬
‫‪0‬‬
‫‪1‬‬
‫‪‬‬
‫‪b‬‬
‫‪c‬‬
‫‪a‬‬
‫‪e‬‬
‫‪d‬‬
‫שאלה ‪ – 2‬פתרון‬
‫נחשב את ‪ A m‬ביחס לכפל בוליאני של מטריצות‪.‬‬
‫מכפלה בוליאנית של מטריצות ‪ A  B  C‬מוגדרת כך‪:‬‬
‫‪ci , j   ai ,k  bk , j ‬‬
‫‪1‬‬
‫‪n‬‬
‫‪k 1‬‬
‫‪2‬‬
‫‪ 0 0 1  0 0 1   0 1 0 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪ 1 0 1  1 0 1    0 1 1 ‬‬
‫‪ 0 1 0  0 1 0   1 0 1 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪17‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪3‬‬
‫שאלה ‪ – 2‬הוכחת נכונות‬
‫• נוכיח שהאלגוריתם נכון באינדוקציה על ‪. m‬‬
‫•בסיס האינדוקציה‪ :‬כאשר ‪ , m  1‬נקבל ‪ . A  Am‬אכן‪,‬‬
‫קיים הילוך באורך ‪ 1‬אם"ם קיימת קשת בין שני הקודקודים‪.‬‬
‫•צעד האינדוקציה‪ :‬נניח שהאלג' נכון עבור ‪ m  1‬ונוכיח‬
‫שהוא נכון עבור ‪ . m‬נרצה להוכיח שקיים הילוך באורך ‪m‬‬
‫מקודקוד ‪ i‬לקודקוד ‪ j‬אם"ם ‪. aim, j  1‬‬
‫‪18‬‬
‫שאלה ‪ – 2‬הוכחת הכיוון הראשון‬
‫‪ ‬נניח שקיים הילוך באורך ‪ m‬מ‪ i -‬ל‪ j -‬ונוכיח‬
‫שמתקיים ‪: aim, j  1‬‬
‫◦‬
‫◦‬
‫◦‬
‫◦‬
‫נסמן את הקשת האחרונה במסלול הנ"ל כ‪ .(l , j ) -‬כלומר‪,‬‬
‫קיים הילוך באורך ‪ m  1‬מ‪ i -‬ל‪.l -‬‬
‫לפי הנחת האינדוקציה‪ ,‬מתקיים ‪.aim,l1  1‬‬
‫מקיום הקשת ) ‪ (l , j‬נובע ‪.al , j  1‬‬
‫‪m1‬‬
‫מהנקודות הקודמת‪ ,‬מתקיים ‪ , ai,l  al , j  1‬ולכן‬
‫‪.a   aim,k1  ak , j   1‬‬
‫‪n‬‬
‫‪k 1‬‬
‫‪19‬‬
‫‪m‬‬
‫‪i, j‬‬
‫שאלה ‪ – 2‬הוכחת הכיוון השני‬
‫‪ ‬נניח שמתקיים‬
‫מ‪ i -‬ל‪: j -‬‬
‫‪aim, j  1‬‬
‫ונוכיח שקיים הילוך באורך ‪m‬‬
‫◦ מההנחה‪ ,‬קיים ‪ l‬שעבורו מתקיים ‪ . aim,l1  al , j  1‬כלומר‪aim,l1  1 ,‬‬
‫וגם ‪( .al , j  1‬אחרת ‪.) aim, j  0‬‬
‫◦ מהנחת האינדוקציה‪ ,‬קיים הילוך באורך ‪ m  1‬מ‪ i -‬ל‪. l -‬‬
‫◦ מהגדרת מטריצת השכנויות‪ ,‬קיימת בגרף קשת ) ‪.(l , j‬‬
‫◦ אם נחבר את הקשת וההילוך הנ"ל‪ ,‬נקבל הילוך באורך ‪ m‬מ‪i -‬‬
‫ל‪. j -‬‬
‫‪20‬‬
‫שאלה ‪ – 2‬זמן ריצה‬
‫‪ ‬מחשבים ‪ m  1‬מטריצות‪ ,‬כל אחת עם ‪ V‬תאים‪.‬‬
‫חישוב של תא לוקח ‪ OV ‬זמן‪.‬‬
‫‪3‬‬
‫‪ ‬סך הכל‪ ,‬סיבוכיות זמן הריצה של האלג' הינה ‪.O V  m ‬‬
‫‪2‬‬
‫‪21‬‬
‫שאלה ‪– 2‬שיפור זמן ריצה‬
‫‪ ‬בדומה למה שראינו בשיעור‪ ,‬במקום שבכל שלב נכפיל‬
‫את המטריצה הנוכחית ב‪ , A -‬נכפיל אותה בעצמה‪.‬‬
‫‪ ‬נחשב את הסידרה ‪ , A, A2 , A4 ,..., Ak  Am‬ולאחר מכן נוכל‬
‫להשתמש בה לחישוב ‪. A m‬‬
‫‪ ‬לדוגמא – ‪. A43  A  A2  A8  A32‬‬
‫‪ ‬אחרי השיפור‪ ,‬מבצעים )‪ O(logm‬פעולות כפל‪.‬‬
‫‪3‬‬
‫‪ ‬זמן הריצה יורד ל‪.O V  log m  -‬‬
‫‪22‬‬
‫שאלה ‪ – 2.1‬כפל לא בוליאני‬
‫מה יקרה אם נשתמש באלגוריתם מהשאלה הקודמת‪ ,‬אך‬
‫‪1‬‬
‫עם כפל סטנדרטי של מטריצות?‬
‫דהיינו‬
‫‪ci , j   ai ,k  bk , j ‬‬
‫‪n‬‬
‫‪2‬‬
‫‪k 1‬‬
‫‪ 0 0 1  0 0 1   0 1 0 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪ 1 1 1  1 1 1    1 2 2 ‬‬
‫‪ 0 1 0  0 1 0   1 1 1 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪23‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪3‬‬
‫שאלה ‪ – 2.1‬פתרון‬
‫‪m‬‬
‫‪m‬‬
‫‪A‬‬
‫‪a‬‬
‫שאלה‪ :‬מה משמעות הערך בתא ‪ i , j‬של המטריצה ?‬
‫‪1‬‬
‫טענה‪ :‬זהו מספר ההילוכים באורך ‪ m‬מ‪ i -‬ל‪. j -‬‬
‫‪2‬‬
‫‪ 0 0 1  0 0 1   0 1 0 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪ 1 1 1  1 1 1    1 2 2 ‬‬
‫‪ 0 1 0  0 1 0   1 1 1 ‬‬
‫‪‬‬
‫‪‬‬
‫‪ ‬‬
‫‪‬‬
‫‪24‬‬
‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫‪3‬‬
‫שאלה ‪ – 2.1‬הוכחה‬
‫‪ ‬נוכיח את הטענה באינדוקציה על ‪: m‬‬
‫◦ בסיס האינדוקציה‪ :‬במקרה של ‪ m  1‬בין כל זוג קודקודים יש לכל היותר‬
‫הילוך אחד‪ ,‬והוא קיים אם ורק אם קיימת קשת מתאימה‪ .‬לכן‪ ,‬הטענה‬
‫מתקיימת‪.‬‬
‫◦ נניח שהטענה נכונה עבור ‪ m  1‬ונוכיח אותה עבור ‪ .m‬נבחן איבר של‬
‫המטריצה‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪n‬‬
‫‪aim, j   aim,k1  ak , j‬‬
‫‪k 1‬‬
‫◦ מהנחת האינדוקציה‪ aim,k1 ,‬הינו מספר ההילוכים באורך ‪ m  1‬מ‪ i -‬ל‪.k -‬‬
‫כלומר‪ ,‬האיבר ה‪- k -‬י בסכום הינו מספר ההילוכים באורך ‪ m‬מ‪ i -‬ל‪j -‬‬
‫שהצומת הלפני‪-‬אחרון בהם הינו ‪.k‬‬
‫‪25‬‬
‫חידת הכנה (‪ )2‬לתכנות דינאמי‬
‫עידו עומד מול בניין בן ‪ 100‬קומות‪ .‬יש לו ‪ 2‬מנורות‬
‫זהות שמכילות ג'יני כל אחת‪ .‬אם הוא זורק מנורה‬
‫מהקומה הנכונה‪ ,‬היא נפתחת‪ ,‬הג'יני יוצא לחופשי‪,‬‬
‫והוא יכול להביע משאלה‪.‬‬
‫אם הוא זורק מנורה מקומה נמוכה מדי‪ ,‬לא קורה לה‬
‫כלום‪ ,‬והוא יכול לזרוק אותה שוב‪ .‬אם הוא זורק מנורה‬
‫מקומה גבוהה מדי‪ ,‬המנורה נשברת (ואי אפשר‬
‫להשתמש בה שוב)‪ ,‬והג'יני מתעצבן ולא מקיים‬
‫משאלות‪.‬‬
‫לכמה זריקות זקוק עידו לפני שיוכל לבקש משאלה?‬
‫‪27‬‬