1 / 26

Additional Exercises

Additional Exercises. Q1.

oriel
Télécharger la présentation

Additional Exercises

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Additional Exercises

  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) • (suffixlst 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 (cdrlst) (- k 1)))) (define (prefix lst k) (if (= k 0) null (cons (car lst) (prefix (cdrlst) (- 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)

More Related