additional exercises

Post on 24-Jan-2016

49 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Additional Exercises. Q1. - PowerPoint PPT Presentation

TRANSCRIPT

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 .בלבד

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)

   

 

Solution Q1.a

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

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

Q1.b

(define (arcs g)

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

______________________________________________________________________

______________________________________________________________________)

(accumulate

_______________________________________________________________________

_______________________________________________________________________

________________________________________________________________________))

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

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

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

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

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

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

____________________________________________________________ ____________________________________________________________

__________________________________________________________))

Q1.D SOLUTION

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

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

Q1.E SOLUTION

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

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 ___________________________________________________________________

___________________________________________________________________ __________________________________________________________________ __________________________________________________________________))))

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

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)

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

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

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

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

Q2.b Solution

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

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סימבולים באורך שווה ומחזיר #

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

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

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

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

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

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)

top related