Presentation is loading. Please wait.

Presentation is loading. Please wait.

Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים.

Similar presentations


Presentation on theme: "Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים."— Presentation transcript:

1 Recitation #9

2 Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים בהם נעסוק בשאלה זו אין לולאות עצמיות, כלומר אין קשת היוצאת ונכנסת אל אותו צומת ). אנו נניח כי צמתי הגרף ממוספרים במספרים טבעיים השונים זה מזה ( אך אינם בהכרח רציפים ). לשם פשטות, כאשר נתייחס לצומת הממוספר במספר I נקרא לו צומת i. לדוגמא : רשימת סמיכות (incidence list) של צומת i בגרף מכוון היא רשימה אשר האיבר הראשון בה הוא i ושאר איבריה הם כל הצמתים בגרף אליהם נכנסת קשת היוצאת מצומת i. כך למשל הרשימה (1 2 3 4) היא רשימת סמיכות של צומת 1 בגרף 0G. אנו נייצג גרף מכוון על ידי רשימה אשר איבריה הם רשימות הסמיכות של כל צמתי הגרף. כך, למשל, הגרף G0 שלעיל ייוצג כך : ( (1 2 3 4) (2 1 4) (3 1) (4 1 2) (5) (6 1 7 9) (7) (9) ) ) ‘(define G0 שימו לב כי רשימת הסמיכות של צומת i אשר לא יוצאות ממנו קשתות מכוונות ( כמו למשל הצמתים 5,7,9 בגרף G0) מכילה את i בלבד.

3 Q1.a א. ( עליך להשלים את הגדרת הפרוצדורה (nodes g) המקבלת כפרמטר גרף ביצוג שהגדרנו ומחזירה את רשימת הצמתים שלו. למשל : לדוגמא : ( (1 2 3 4) (2 1 4) (3 1) (4 1 2) (5) (6 1 7 9) (7) (9) ) ) ‘(define G0 > (nodes G0) (1 2 3 4 5 6 7 9)

4 Solution Q1.a (define (nodes g) (map car g))

5 Q1.b ב. אנו נייצג קשת מכוונת כזוג : קשת המכוונת מצומת i לצומת j תיוצג על ידי הזוג (i. j). עליך להשליך את הגדרת הפרוצדורה arcs המקבלת כפרמטר את הגרף g ומחזירה את רשימת כל הקשתות של g. לדוגמא :  (arcs G0) ( (1.2) (1.3) (1.4) (2.1) (2.4) (3.1) (4.1) (4.2) (6.1) (6.7) (6.9) ) הפרוצדורה משתמשת בפרוצדורת העזר הפנימית incidence-list-to-arcs- list. פרוצדורה פנימית זו מקבלת כפרמטר יחיד רשימת סמיכות l של צומת כלשהוא i בגרף. היא מחזירה רשימה הכוללת את כל הקשתות המכוונות מ -i לצמתים בגרף. לדוגמא :  (incidence-list-to-arcs-list '(1 2 3 4)) ( (1.2) (1.3) (1.4))  (incidence-list-to-arcs-list '(5)) ()

6 Q1.b (define (arcs g) (define (incidence-list-to-arc-list l) ______________________________________________________________________ ______________________________________________________________________) (accumulate _______________________________________________________________________ ________________________________________________________________________))

7 Q1.b solution (define (arcs g) (define (incidence-list-to-arc-list l) (map (lambda (x) (cons (car l) x)) (cdr l))) (accumulate append null (map incidence-list-to-arc-list g)))

8 Q1.C עליך להשלים את מימוש הפרוצדורה (delete-node i g) המקבלת שני פרמטרים : צומת i וגרף g. הפרוצדורה מחזירה את הגרף המתקבל מ -g כאשר מוחקים ממנו את הצומת i ואת כל הקשתות היוצאות מ i או נכנסות אליו. לדוגמא :  (delete-node 1 G0) ( (2 4) (3) (4 2) (5) (6 7 9) (7) (9)) (define (delete-node i g) (map (lambda (lst) ____________________________________________ ____________________________________________________________) (filter_____________________________________________________ g ) )

9 Q1.C SOLUTION (define (delete-node i g) (map (lambda (lst) (filter (lambda (x) (not (= x i))) lst)) (filter (lambda (lst) (not (= (car lst) i))) g)))

10 Q1.D עליך להשלים את מימוש הפרוצדורה (delete-list-of-nodes l g) המקבלת שני פרמטרים : רשימת צמתים l וגרף g. הפרוצדורה מחזירה את הגרף המתקבל מ -g כאשר מוחקים ממנו את כל הצמתים ב l. (define (delete-list-of-nodes l g) (accumulate ____________________________________________________________ ____________________________________________________________ __________________________________________________________))

11 Q1.D SOLUTION (define (delete-list-of-nodes l g) (accumulate delete-node g l))

12 Q1.E בסעיף זה עליך להשלים את מימוש הפרוצדורה (nodes-with-arcs-to i g). הפרוצדורה מקבלת שני פרמטרים : צומת i וגרף g. הפרוצדורה מחזירה את רשימת הצמתים ב -g אשר יוצאת מהן קשת אל צומת i. לדוגמא :  (nodes-with-arcs-to 1 G0) (2 3 4 6)  (nodes-with-arcs-to 6 G0) () (define (nodes-with-arcs-to i g) (map _______________________________________________________ (filter__________________________________________________ (arcs g))))

13 Q1.E SOLUTION (define (nodes-with-arcs-to i g) (map car (filter (lambda (arc) (= (cdr arc) i)) (arcs g))))

14 Q1.F קבוצה בלתי תלויה (independent set) בגרף היא קבוצת צמתים של הגרף אשר הגרף אינו מכיל שום קשת בין שניים מהם. לדוגמא, קבוצת הצמתים {1,5,7,9} היא קבוצה בלתי תלויה בגרף G0. בסעיף זה נממש את הפרוצדורה (inedpendent-set g) המקבלת כפרמטר גרף g ומחזירה רשימה של צמתים המהוים קבוצה בלתי תלויה של g. המימוש מבוסס על הרעיון הבא. בכל שלב אנו בוחרים צומת כלשהוא מצמתי הגרף, i, מוסיפים אותו לקבוצה הבלתי תלויה שאנו בונים, ומוחקים אותו ואת כל הצמתים המחוברים אליו בקשת מן הגרף ( בין אם הקשת יוצאת מ i ובין אם היא נכנסת אליו ). כך אנו ממשיכים, עד שאנו מגיעים לגרף ריק. הפרוצדורה independent-set מבצעת תהליך זה באופן רקורסיבי. עליך להשלים מימוש פרוצדורה זו. (define (independent-set g) (if (null? g) null (cons __________________________________ (independent-set ___________________________________________________________________ __________________________________________________________________ __________________________________________________________________))))

15 Q1.F SOLUTION (define (independent-set g) (if (null? g) null (cons (caar g) (independent-set (delete-list-of-nodes (append (car g) (nodes-with-arcs-to (caar g) g)) g)))))

16 Q2 הפרוצדורה (suffix lst k) מקבלת שני פרמטרים : רשימה lst, ומספר שלם k. הפרוצדורה מחזירה את הסיפא (suffix) ה k- ית של הרשימה, כלומר רשימה הכוללת את כל איברי lst למעט k האיברים הראשונים. הפרוצדורה (prefix lst k) מקבלת אף היא שני פרמטרים lst ו k. היא מחזירה את הרישא ה k- ית של הרשימה, כלומר רשימה הכוללת את k האיברים הראשונים של lst. בשני המקרים ניתן להניח ש -k הוא מספר שלם בתחום : [0, (length lst)]. לדוגמא :  (define lst '(a b c d e f g h))  (suffix lst 3) (d e f g h)  (suffix lst 1) (b c d e f g h)  (suffix lst 0) (a b c d e f g h)  (prefix lst 0) ()  (prefix lst 4) (a b c d)

17 Q2.a (define (suffix lst k) (if (= k 0) ____________________________________________________________ ___________________________________________________________)) (define (prefix lst k) (if (= k 0) ____________________________________________________________ ___________________________________________________________))

18 Q2.a solution (define (suffix lst k) (if (= k 0) lst (suffix (cdr lst) (- k 1)))) (define (prefix lst k) (if (= k 0) null (cons (car lst) (prefix (cdr lst) (- k 1)))))

19 Q2.b הפרוצדורה (rotate lst k) מקבלת שני פרמטרים : רשימה lst, ומספר שלם k בתחום [0, (length lst)]. היא מחזירה רשימה המתקבלת מ lst על ידי סיבוב איברי lst ( שמאלה ) ב k מקומות. לדוגמא :  (define lst '(a b c d e f g h))  (rotate lst 1) (b c d e f g h a)  (rotate lst 4) (e f g h a b c d)  (rotate lst 0) (a b c d e f g h) (define (rotate lst k) ________________________________________________________________________ _______________________________________________________________________)

20 Q2.b Solution (define (rotate lst k) (append (suffix lst k) (prefix lst k)))

21 Q2.C יהיו l1 ו l2 שתי רשימות של סימבולים. אנו נאמר כי l1 ו l2 שוות ציקלית cyclic-equal) אם ניתן לקבל את הרשימה השניה על ידי סיבוב של הרשימה השניה ( או להיפך ). לדוגמא : > (is-cyclic-equal? '(a b c d) '(c d a b)) #t > (is-cyclic-equal? '(a b c d) '(d a b c)) #t > (is-cyclic-equal? '(a b c d) '(c a b d)) #f הפרדיקט (is-cyclic-equal? l1 l2) מקבל כקלט שתי רשימות של סימבולים באורך שווה ומחזיר #t אם הן שוות ציקלית, או #f אחרת. הפרדיקט ממומש באופן איטרטיבי על ידי קריאה לפרוצדורה פנימית. עליך להשלים את מימוש פרוצדורה פנימית זו בתבנית הקוד שלהלן.

22 Q2.C (define (is-cyclic-equal? l1 l2) (define (iter-helper lst k) (cond ( (= k (length lst)) _________) (_____________________________________ #t) (else (iter-helper ________________________ _______________________________________)))) (iter-helper l2 0))

23 Q2.C Solution (define (is-cyclic-equal? l1 l2) (define (iter-helper lst k) (cond ( (= k (length lst)) #f) ( (equal? l1 lst) #t) (else (iter-helper (rotate lst 1) (+ k 1))))) (iter-helper l2 0))

24 Q2.D הפרוצדורה cyclic-equal-to-any מקבלת רשימה אחת או יותר של סימבולים ( ניתן להניח כי כל הרשימות הן באותו אורך ). הפרוצדורה מחזירה פרדיקט, המצפה לרשימת סימבולים lst ( מאותו אורך ) ומחזיר #t אם lst זהה ציקלית לאחת או יותר מן הרשימות איתן קראנו ל cyclic-equal-to- any. לדוגמא :  (define proc (cyclic-equal-to-any '(one two three) '(alpha beta gamma)))  (proc '(two three one)) #t  (proc '(gamma alpha beta)) #t  (proc '(I like Mike)) #f

25 Q2.D (define (cyclic-equal-to-any lst1. other-lists) (define (compare-with-all-lists lst) (let ((all-lists (cons lst1 other-lists))) (accumulate ______________________________________________________ _______________________________________________________ (map___________________________________________________ ________________________________________________)))) ____________________________________________________________)

26 Q2.D Solution (define (cyclic-equal-to-any lst1. other-lists) (define (compare-with-all-lists lst) (let ((all-lists (cons lst1 other-lists))) (accumulate (lambda (x y) (or x y)) #f (map (lambda (l) (is-cyclic-equal? lst l)) all-lists)))) compare-with-all-lists)


Download ppt "Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים."

Similar presentations


Ads by Google