+ All Categories
Home > Documents > Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות...

Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות...

Date post: 19-Dec-2015
Category:
View: 232 times
Download: 3 times
Share this document with a friend
Popular Tags:
26
Recitation #9
Transcript
Page 1: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Recitation #9

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Solution Q1.a

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

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

Q1.bנייצג קשת מכוונת כזוג: קשת המכוונת מצומת ב. תיוצג j לצומת iאנו

המקבלת arcs. עליך להשליך את הגדרת הפרוצדורה (i . j)על ידי הזוג . לדוגמא: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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Q1.b

(define (arcs g)

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

______________________________________________________________________

______________________________________________________________________)

(accumulate

_______________________________________________________________________

_______________________________________________________________________

________________________________________________________________________))

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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 )

))

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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

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

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

____________________________________________________________

____________________________________________________________

__________________________________________________________))

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

Q1.D SOLUTION

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

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Q1.E SOLUTION

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

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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

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

(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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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

____________________________________________________________

___________________________________________________________))

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

____________________________________________________________

___________________________________________________________))

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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

lst. היא מחזירה רשימה המתקבלת מ ([length lst, )0] בתחום kשלם מקומות. לדוגמא: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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Q2.b Solution

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

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

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

Q2.D מקבלת רשימה אחת או יותר של cyclic-equal-to-anyהפרוצדורה

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

זהה ציקלית לאחת או יותר מן הרשימות איתן lst אם t#ומחזיר . לדוגמא: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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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: Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת

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)


Recommended