26
Additional Exercises

Additional Exercises

  • Upload
    oriel

  • View
    49

  • Download
    1

Embed Size (px)

DESCRIPTION

Additional Exercises. Q1. - PowerPoint PPT Presentation

Citation preview

Page 1: Additional Exercises

Additional Exercises

Page 2: Additional Exercises

Q1( המחברות ביניהם. כל קשת מכוונת arcs )קשתות מכוונותומ( nodes)צמתים גרף מכוון מורכב מקבוצה של

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

.i נקרא לו צומת I)אך אינם בהכרח רציפים(. לשם פשטות, כאשר נתייחס לצומת הממוספר במספר לדוגמא:

   

 

ושאר איבריה i בגרף מכוון היא רשימה אשר האיבר הראשון בה הוא i( של צומת incidence list )רשימת סמיכותהיוצאת מצומת נכנסת קשת אליהם בגרף כל הצמתים )iהם כך למשל הרשימה רשימת 4 3 2 1. היא )

. אנו נייצג גרף מכוון על ידי רשימה אשר איבריה הם רשימות הסמיכות של כל 0G בגרף 1סמיכות של צומת צמתי הגרף.

שלעיל ייוצג כך:G0כך, למשל, הגרף •( (1 2 3 4( )2 1 4( )3 1( )4 1 2( )5( )6 1 7 9( )7( )9(‘ ) ) )define G0

 

בגרף 5,7,9 אשר לא יוצאות ממנו קשתות מכוונות )כמו למשל הצמתים iשימו לב כי רשימת הסמיכות של צומת G0 מכילה את )i .בלבד

Page 3: Additional Exercises

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)

   

 

Page 4: Additional Exercises

Solution Q1.a

(define (nodes g) (map car g))

Page 5: Additional Exercises

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))()

Page 6: Additional Exercises

Q1.b

(define (arcs g)

(define (incidence-list-to-arc-list l)

______________________________________________________________________

______________________________________________________________________)

(accumulate

_______________________________________________________________________

_______________________________________________________________________

________________________________________________________________________))

Page 7: Additional Exercises

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)))

Page 8: Additional Exercises

Q1.Cמימוש הפרוצדורה את להשלים שני פרמטרים: delete-node i g)עליך ( המקבלת

כאשר מוחקים ממנו g. הפרוצדורה מחזירה את הגרף המתקבל מ-g וגרף iצומת או נכנסות אליו. לדוגמא: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 ) ))

Page 9: Additional Exercises

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)))

Page 10: Additional Exercises

Q1.Dהפרוצדורה מימוש את להשלים שני delete-list-of-nodes l g)עליך המקבלת )

. הפרוצדורה מחזירה את הגרף המתקבל g וגרף lפרמטרים: רשימת צמתים .l כאשר מוחקים ממנו את כל הצמתים ב gמ-

(define (delete-list-of-nodes l g)(accumulate

____________________________________________________________ ____________________________________________________________

__________________________________________________________))

Page 11: Additional Exercises

Q1.D SOLUTION

(define (delete-list-of-nodes l g)(accumulate delete-node g l))

Page 12: Additional Exercises

Q1.Eהפרוצדורה מימוש את להשלים עליך זה (. nodes-with-arcs-to i g)בסעיף

. הפרוצדורה מחזירה את g וגרף iהפרוצדורה מקבלת שני פרמטרים: צומת . לדוגמא:i אשר יוצאת מהן קשת אל צומת gרשימת הצמתים ב-

(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))))

Page 13: Additional Exercises

Q1.E SOLUTION

(define (nodes-with-arcs-to i g) (map car (filter (lambda (arc) (= (cdr arc) i)) (arcs g))))

Page 14: Additional Exercises

Q1.Fבגרף היא קבוצת צמתים של הגרף אשר הגרף אינו ( independent set)קבוצה בלתי תלויה

{ היא קבוצה בלתי 1,5,7,9מכיל שום קשת בין שניים מהם. לדוגמא, קבוצת הצמתים }( המקבלת כפרמטר inedpendent-set g. בסעיף זה נממש את הפרוצדורה )G0תלויה בגרף

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

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

מבצעת תהליך זה באופן רקורסיבי. עליך להשלים independent-setלגרף ריק. הפרוצדורה מימוש פרוצדורה זו.

(define (independent-set g)(if (null? g) null(cons __________________________________ (independent-set ___________________________________________________________________

___________________________________________________________________ __________________________________________________________________ __________________________________________________________________))))

Page 15: Additional Exercises

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)))))

Page 16: Additional Exercises

Q2. הפרוצדורה מחזירה את k, ומספר שלם lst( מקבלת שני פרמטרים: רשימה suffix lst k)הפרוצדורה

האיברים k למעט lst-ית של הרשימה, כלומר רשימה הכוללת את כל איברי k( ה suffix)סיפאההראשונים. הפרוצדורה

(prefix lst k מקבלת אף היא שני פרמטרים )lst ו kרישא. היא מחזירה את ה. בשני המקרים ניתן lst האיברים הראשונים של k-ית של הרשימה, כלומר רשימה הכוללת את kה

([. לדוגמא:length lst, )0 הוא מספר שלם בתחום: ]kלהניח ש-

(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)

Page 17: Additional Exercises

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

(define (prefix lst k) (if (= k 0) ____________________________________________________________ ___________________________________________________________))

Page 18: Additional Exercises

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)))))

Page 19: Additional Exercises

Q2.b k, ומספר שלם lst( מקבלת שני פרמטרים: רשימה rotate lst k)הפרוצדורה

על ידי סיבוב lst([. היא מחזירה רשימה המתקבלת מ length lst, )0בתחום ] מקומות. לדוגמא:k )שמאלה( ב lstאיברי

(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) ________________________________________________________________________ _______________________________________________________________________)

Page 20: Additional Exercises

Q2.b Solution

(define (rotate lst k) (append (suffix lst k) (prefix lst k)))

Page 21: Additional Exercises

Q2.C

שוות l2 ו l1 שתי רשימות של סימבולים. אנו נאמר כי l2 ו l1יהיו אם ניתן לקבל את הרשימה השניה על ידי סיבוב ( 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הפרדיקט ) אחרת. f אם הן שוות ציקלית, או #tסימבולים באורך שווה ומחזיר #

הפרדיקט ממומש באופן איטרטיבי על ידי קריאה לפרוצדורה פנימית. עליך להשלים את מימוש פרוצדורה פנימית זו בתבנית הקוד שלהלן.

Page 22: Additional Exercises

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))

Page 23: Additional Exercises

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))

Page 24: Additional Exercises

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

Page 25: Additional Exercises

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___________________________________________________ ________________________________________________)))) ____________________________________________________________)

Page 26: Additional Exercises

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)