דחוימ דעומ - bguintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע...

12
עמוד1 מתוך12 מועד מיוחד ראו היטב את הההוראות שלהלן:ִ אנא ק עליכם לוודא שיש בידיכם דפי תשובות , מחברת טיוטה ו חומר עזר. במבחן זה4 שאלות. ענו על כל השאלות. בשאלות ש בהן לא מצוין אחרת, ניתן לכתוב פתרון רקורסיבי או פתרון שאינו רקורסיבי, לבחירתכם. שמו את תשובותיכםִ ר בדפי התשובות בלבד . המחברת שקיבלתם היא מחברת טיוטה, והיא לא תימסר כלל לבדיקה. בסיום הבחינה נשמור אך ורק את דף התשובות . כל שאר החומר יועבר לגריסה. שימו לב: החשיבות העליונה היא לנכונות הקוד. מאידך, יעילות ,סגנון וכתיבה ברורה חשובים גם הם, ולכן תשובה נכונה.)הזחה או הזזת שורות( יעילה ומסוגננת תזכה בציון גבוה יותר. הקפידו על אינדנטציה אתם נבחנים על כתיבת הקוד עצמו. אינכם חייבים לרשום הערות. אתם רשאים לרשום הערות, אך אלו לא ישפיעו על הציון. בכל מקרה אין לחרוג מהמקום הנתון לתשובה בדף התשובות. הקפידו על כתב יד ברור. תשובות מסורבלות או ארוכות מדי לא יזכו בניקוד מלא. מומלץ לכתוב פתרון לשאלה קודם כל במחברת הטיוטה, ורק לאחר מכן להעתיק פתרון נקי לדף התשובות. אין להוסיף פ ונקציות עזר אלא אם רשום במפורש שמותר. בשאלה רבת סעיפים, מומלץ לקרוא את כל ה סעיפים ב שאלה לפני שניגשים לפתרונה. אם יש סעיף בשאלה המסתמך על סעיף אחר, מותר להשתמש בו גם אם לא פתרתם את הסעיף האחר. הקפידו לרשום בכל דפי התשובות את מספר הנבחן ואת מספר החדר שבו אתם נבחנים. אם אינכם יודעים את התשובה לסעיף שלם ותזכו ב)במקום תשובה( " כלשהו, רשמו "לא יודע/ת- 20% מניקוד הסעיף. אם רשום "לא יודע/ת", ההתייחסו)מעוגל מטה( ת היא לכל הסעיף. יש להשתמש באופרטורים&&, || רק אם השימוש בהם ימנע שגיאה. ב כל מקרה אחר יש להשתמש באופרטורים& ו- .| תאריך הבחינה:25.5.2017 ש ם המרצ ה: מר מיכאל פרנק פרופ' מיכאל קודיש דר' חן קיסר גב' מיכל שמש שם הקורס: מבוא למדעי המחשב מספר הקורס:202-1-1011 שנה:2017 סמסטר: א מועד:' מיוחד משך הבחינה: שלוש שעות חומר עזר: יחולק על ידי הבוחנים

Upload: others

Post on 12-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 1עמוד

מועד מיוחד

אנא ִקראו היטב את הההוראות שלהלן:

עזר.חומר , מחברת טיוטה ועליכם לוודא שיש בידיכם דפי תשובות

שאינו פתרון או רקורסיבי פתרון לכתוב ניתן, אחרת מצוין לא בהןש בשאלות. שאלות. ענו על כל השאלות 4זה במבחן

.לבחירתכם, רקורסיבי

טיוטה, והיא לא תימסר כלל לבדיקה. היא מחברת . המחברת שקיבלתםבדפי התשובות בלבדִרשמו את תשובותיכם

. כל שאר החומר יועבר לגריסה.את דף התשובות בסיום הבחינה נשמור אך ורק

:חשובים גם הם, ולכן תשובה ,סגנון וכתיבה ברורה יעילותהקוד. מאידך, לנכונותהחשיבות העליונה היא שימו לב

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

אך אלו לא ישפיעו על ,אתם רשאים לרשום הערות .אתם נבחנים על כתיבת הקוד עצמו. אינכם חייבים לרשום הערות

.הנתון לתשובה בדף התשובות הציון. בכל מקרה אין לחרוג מהמקום

מומלץ לכתוב פתרון לשאלה קודם מסורבלות או ארוכות מדי לא יזכו בניקוד מלא. הקפידו על כתב יד ברור. תשובות

כל במחברת הטיוטה, ורק לאחר מכן להעתיק פתרון נקי לדף התשובות.

ונקציות עזר אלא אם רשום במפורש שמותר.אין להוסיף פ

,לפתרונה. אם יש סעיף בשאלה המסתמך על שאלה לפני שניגשים סעיפים במומלץ לקרוא את כל הבשאלה רבת סעיפים

סעיף אחר, מותר להשתמש בו גם אם לא פתרתם את הסעיף האחר.

נבחנים. הקפידו לרשום בכל דפי התשובות את מספר הנבחן ואת מספר החדר שבו אתם

מניקוד הסעיף 20%-כלשהו, רשמו "לא יודע/ת" )במקום תשובה( ותזכו ב שלםאם אינכם יודעים את התשובה לסעיף

היא לכל הסעיף. ת)מעוגל מטה(. אם רשום "לא יודע/ת", ההתייחסו

כל מקרה אחר יש להשתמש ב רק אם השימוש בהם ימנע שגיאה. || ,&&יש להשתמש באופרטורים

|. -ו &באופרטורים

25.5.2017תאריך הבחינה:

מר מיכאל פרנק : ההמרצ םש פרופ' מיכאל קודיש דר' חן קיסר גב' מיכל שמש

מבוא למדעי המחשבשם הקורס:

202-1-1011 מספר הקורס:

מיוחד' מועד: אסמסטר: 2017שנה:

שלוש שעות משך הבחינה:

יחולק על ידי הבוחניםחומר עזר:

Page 2: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 2עמוד

נקודות( 25) 1 מספר שאלה

מרחיבה את המחלקה המייצגת קבוצה של מספרים שלמים. מחלקה זו IntegerSet בשם מחלקהבשאלה זו נשלים

. Setהנתונה להלן ומממשת את הממשק AbstractIntegerSetהאבסטרקטית

, ()Set :iteratorמהשיטות של הממשק מממשת שלוש AbstractIntegerSet המחלקה

add(Object)ו ,- remove(Object) השיטה שיטות אלו אינו ידוע לנו. ידוע כי . אופן המימוש שלadd זורקת

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

ממשת את שלוש השיטות האחרות של הממשק המ IntegerSetהמחלקה את הגדרת עליכם להשלים בהמשך השאלה Set :size() ,isEmpty() ו- contains(object) .

. זוהיsubset(IntegerSet other) בשם מממשת שיטה נוספת IntegerSet לשיטות אלו המחלקה בנוסףקבוצה המפעילה את שייכים ל otherאם ורק אם כל האיברים של הקבוצה true ערך שיטה בולאנית המחזירה

השיטה.

public abstract class AbstractIntegerSet implements Set {

public AbstractIntegerSet() {

אופן המימוש אינו ידוע //

}

public void add(Object element){

אופן המימוש אינו ידוע //

}

public boolean remove(Object element){

ידוע אופן המימוש אינו //

}

public Iterator iterator(){

אופן המימוש אינו ידוע //

}

}

public class IntegerSet extends AbstractIntegerSet {

public int size() {

השלימו בדף התשובות –סעיף א //

}

public boolean isEmpty() {

השלימו בדף התשובות –סעיף ב //

}

public boolean contains(Object element) {

השלימו בדף התשובות –סעיף ג //

}

public boolean subset(IntegerSet other) {

השלימו בדף התשובות –סעיפים ד, ה //

}

}

Page 3: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 3עמוד

והפלט שלהם: המדגימים את השימוש בשיטות המחלקה שתשלימו להלן קטעי קוד -דוגמאות

IntegerSet intSet1 = new IntegerSet();

System.out.println(intSet1.isEmpty());

System.out.println(intSet1.size());

:הפלט //

// true

// 0

intSet1.add(new Integer(5));

intSet1.add(new Integer(4));

intSet1.add(new Integer(50));

intSet1.add(new Integer(40));

System.out.println(intSet1.isEmpty());

System.out.println(intSet1.size());

:הפלט //

// false

// 4

System.out.println(intSet1.contains(new Integer(40)));

System.out.println(intSet1.contains(new Integer(60)));

System.out.println(intSet1.contains("xxxx"));

:הפלט //

// true

// false

// false

System.out.println(intSet1.subset(intSet1));

:הפלט //

// true

IntegerSet intSet2 = new IntegerSet();

intSet2.add(new Integer(4));

intSet2.add(new Integer(50));

System.out.println(intSet1.subset(intSet2));

System.out.println(intSet2.subset(intSet1));

:הפלט //

// true

// false

intSet2.add(new Integer(51));

System.out.println(intSet1.subset(intSet2));

:הפלט //

// false

Page 4: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 4עמוד

(קודותנ 2) :סעיף א

.()sizeאת השיטה IntegerSetמחלקה ב השלימו

ודות(נק 3) :סעיף ב

.()isEmpty את השיטה IntegerSetמחלקה ב השלימו

ודות(נק 3) :סעיף ג

.contains(Object element) את השיטה IntegerSetמחלקה ב השלימו

הנחיות:

(. element)אין להניח שום הנחה על הקלט .1 השיטה אינה זורקת חריגת זמן ריצה עבור שום קלט. .2

ודות(נק 3) :דסעיף

.subset(IntegerSet other) את השיטה IntegerSetמחלקה ב השלימו

הנחיות:

.nullאינו (other)ניתן להניח שהקלט .1

להניח שום ינכם יכולים א, ()iteratorהמוחזר על ידי השיטה באיטראטור אם תבחרו להשתמש ,בסעיף זה .2

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

לדוגמה, בהמשך לקוד מהעמוד הקודם, הקוד

Iterator iter = intSet1.iterator();

while (iter.hasNext())

System.out.print(iter.next()+”_”);

עשוי להדפיס

5_4_50_40_

נקודות( 14) :הסעיף

.subset(IntegerSet other) את השיטה IntegerSetמחלקה ב השלימו

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

Iterator iter = intSet1.iterator();

while (iter.hasNext())

System.out.print(iter.next()+”_”);

חייב להדפיס

4_5_40_50_

הנחיות נוספות:

.nullאינו (other)ניתן להניח שהקלט .1 יו.לחזור על ואיןלהשתמש בפתרון לסעיף ד' איןיש להתייחס במיוחד לעניין היעילות החישובית, ובפרט בסעיף זה .2

Page 5: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 5עמוד

נקודות( 25) 2שאלה מספר אין צורך להסתמך על סעיף א' לפתרון סעיף ב' ולהפך. בין שני הסעיפים, ובפרט קשר. אין לשאלה זו שני סעיפים

(ודותנק 10) :סעיף א

תזכורת לגבי תחשיב הפסוקים

רל היא קוניונקציה )"וגם"( של פסוקיות. פסוקית היא דיסיונקציה )"או"( של ליטרלים. ליט CNFנוסחה בוליאנית בצורת , NFC-בכדי להימנע מבלבול בין המשתנים של ג'אווה לבין אלו של ההוא משתנה בוליאני או שלילה של משתנה בוליאני.

.CNFנדייק ונקרא משתני CNF-למשתנים של ה

. falseאו trueהשמה היא פונקציה )מתמטית( אשר מתאימה לכל משתנה ערך

, השמה היא מספקת אם היא מספקת את כל הפסוקיות. השמה מספקת פסוקית אם CNFעבור נוסחה בוליאנית בצורת

וההשמה מציבה 𝑥𝑖היא מספקת לפחות את אחד הליטרלים בפסוקית. השמה מספקת ליטרל אם: הליטרל הוא מהצורה

.CNF 𝑥𝑖-למשתנה ה falseוההשמה מציבה ערך 𝑥𝑖¬שהליטרל הוא מהצורה , אוCNF 𝑥𝑖-למשתנה ה trueערך

עוסקת בשאלה: בהינתן נוסחה בוליאנית, האם קיימת עבורה השמה מספקת? בעיית הסיפוק הבוליאני

:Java-ב CNF תזכורת לגבי הייצוג של נוסחאות

,n: 1ועד 1-תמיד יהיו ממוספרים ברצף מ CNF-בייצוג של ג'אווה, משתני ה … , 𝑛

את הליטרל𝑥𝑖 נייצג בג'אווה באמצעות המספרi ואת הליטרל ,¬𝑥𝑖 נייצג באמצעות המספר− 𝑖 .

את הפסוקיתℓ1 ∨ ℓ2 ∨ ⋯ ∨ ℓ𝑟 את נייצג בג'אווה באמצעות מערך המכיל את הייצוג של הליטרלים. למשל ,

𝑥1)הפסוקית ∨ 𝑥4 ∨ ¬𝑥17 ∨ 𝑥6 ∨ 𝑥4 ∨ 𝑥19 ∨ ¬𝑥3) :נייצג בג'אווה באמצעות המערך int[] clause = {1,4,-17,6,4,19,-3}

את נוסחת ה-CNF 𝑐1 ∧ 𝑐2 ∧ ⋯ ∧ 𝑐𝑛 למשל, את הנוסחהממדי. -נייצג באמצעות מערך דו

((𝑥1 ∨ 𝑥3 ∨ 𝑥5) ∧ (𝑥2 ∨ 𝑥4 ∨ ¬𝑥3) ∧ (¬𝑥5 ∨ 𝑥8 ∨ ¬𝑥12)) ממדי:-נייצג בג'אווה באמצעות המערך הדו int[][] formula = {{1,3,5}, {2,4,-3},{-5,8,-12}}

. 2, בדומה לנוסחה שראיתם בעבודת בית CNFבשאלה זו נגדיר נוסחה בוליאנית המבטאת אילוץ על קבוצה של משתני שבהם האופנים כל את תואמת שלה המספקות ההשמות קבוצת אם CNFנוסחה מבטאת אילוץ על קבוצה של משתני

ות המספקות שלה תואמת בדיוק את שקבוצת ההשמ -בהינתן אילוץ, נרצה להגדיר נוסחה כזאת האילוץ. את לספק ניתן האילוץ.האופנים שבהם ניתן לספק את

אחד מתוך קבוצה של משתנים נתונים CNFמשתנה שבדיוק אשר מבטאת אילוץ שאומר CNFבשאלה זו נבנה נוסחת . השלימו את הגדרת הפונקציה:trueמקבל את הערך

public static int[][] exactlyOne(int[] vars)

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

חוקיים. CNFומכיל ערכי משתני nullאינו varsניתן להניח כי הקלט לפונקציה תקין. כלומר, המערך

המשך השאלה בעמוד הבא.

Page 6: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 6עמוד

ודות(נק 15) :סעיף ב

. נתונים גם אוסף של 𝑊תרמיל המסוגל להכיל משקל שלם וחיובי נתון בבעיית התרמילבעיית התרמיל. ב נעסוק בסעיף זה

.𝑤𝑖 -ב i -ה פריטנסמן את המשקל של ה שלכל פריט משקל שלם וחיובי. פריטים

לא עולה על S-אם המשקל הכולל של הפריטים ב קבוצה חוקית-תתמתוך האוסף הנתון היא של פריטים Sנאמר שקבוצה

𝑊 . ,הקבוצה-סכום המשקולות של פריטי תתבמילים אחרות 𝑆 קטן או שווה ל-𝑊 :∑ 𝑤𝑖𝑖∈𝑆 ≤ 𝑊 .

מתוך האוסף הנתון בבעיית 𝑆קבוצה חוקית -המקסימלי של תת ′𝑊בסעיף זה נכתוב פונקציה שמחשבת את המשקל

קבוצה חוקית, וגם -היא תת 𝑆אם מקסימליתקבוצה -תתשל פריטים מתוך האוסף הנתון היא 𝑆קבוצה אמר שהתרמיל. נ

∑ : . כלומרהוא מקסימלי 𝑆 -המשקל הכולל של הפריטים ב 𝑤𝑖𝑖∈𝑆 = 𝑊′ וגם𝑊′ ≤ 𝑊 קבוצה חוקית -תתאף אין וגם

.′𝑊 -מגדול יותר המשקלאחרת ש

השלימו את הגדרת הפונקציה:

public static int knapsack(int W, int[] weights)

ואת המשקולות של כל אחד מהפריטים W בתרמיל יכול להיכנסמשקל המקסימלי שהפונקציה מקבלת כפרמטרים את ה .מקסימלית קבוצה-תתשל משקל הפונקציה מחזירה . weightsבמערך

ומכיל ערכים nullאינו weightsהינו חיובי והמערך Wניתן להניח כי הקלט לפונקציה תקין. כלומר, הערך המקסימלי חיוביים בלבד.

:של קלט ופלט לבעיית התרמיל דוגמא

int W = 6 ;

int[] weights = {1, 3, 4} ;

int ans = knapsack(W, weights) ;

System.out.println(“max solution weight is : ” + ans)

// max solution weight is : 5

לכן .1+4=5הוא קבוצה מקסימלית ומשקלה-היא תת 4-ו 1הקבוצה שמכילה את שני האיברים שמשקלם בדוגמא זו .5-בוצה חוקית אחרת עם משקל גדול מק-. אין תת5הפונקציה מחזירה את הערך

עזר לפונקצייתאשר קוראת knapsack(int W, int[] weights)את הגדרת הפונקציה השלימו בדף השובות .(י הצורךפ-רקורסיבית אותה גם תשלימו )ובה גם תוסיפו ארגומנטים נוספים על

Page 7: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 7עמוד

קודות(נ 25) 3 מספר שאלה

(. נתונות לכם BinaryNodesמורכב מצמתים )ה(, BinaryTreeבשאלה זו נעסוק במבנה הנתונים של עץ בינארי )אשר ()leafIteratorשיטה בשם BinaryTreeבמחלקה . BinaryNode -וBinaryTree המחלקות

תון.נהמאפשר מעבר באיטרציה על העלים של עץ Iteratorמחזירה אובייקט מטיפוס

אינו . הבנאי שלהStackאשר מממשת את הממשק MysteryStackמחלקה לצורך פתרון השאלה תוכלו להשתמש ב ריקה. מחסניתמאתחל והוא מקבל פרמטרים

אינן נתונות לכם.נלמדו בכיתה ובכל סעיפי שאלה זו אין להשתמש בשיטות מחלקה ש

public class BinaryTree{

protected BinaryNode root;

public BinaryTree() {

root = null;

}

public boolean isEmpty(){

return root == null;

}

public Iterator leafIterator(){

// השלימו בדף התשובות –'הסעיף

}

עוד שיטות לא רלוונטיות //

לפתרון השאלה //

}

לבצע איטרציה על העלים של עץ בינארי לפי תאשר מאפשר BinaryTreeLeafIteratorנממש את המחלקה בשאלה זו

מפנה למבנה הבא בו הקודקודים מכילים ערכים BinaryTreeמטיפוס t1הסדר משמאל לימין. לדוגמה, נניח שהמשתנה

.Characterמטיפוס

אז נרצה שקטע הקוד הבא:Iterator iter = t1.leafIterator();

while (iter.hasNext())

System.out.print(iter.next() + " ");

System.out.println();

A C E Hידפיס את השורה הבאה:

המשך השאלה בעמוד הבא.

public class BinaryNode {

public Object data;

public BinaryNode left;

public BinaryNode right;

public BinaryNode(Object data){

this.data = data;

left = null;

right = null;

}

עוד שיטות לא רלוונטיות //

לפתרון השאלה //

}

Page 8: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 8עמוד

וגם תשלימו את הגדרת השיטה BinaryTreeLeafIteratorבסעיפים הבאים תשלימו את הגדרת המחלקה

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

לימין, כמו בדוגמה שבעמוד הקודם.

public class BinaryTreeLeafIterator implements Iterator {

private Stack stack;

public BinaryTreeLeafIterator(/* להוסיף ארגומנטים */){

// השלימו בדף התשובות – 'אסעיף

}

private void prepareNext() {

// השלימו בדף התשובות – 'בסעיף

}

public boolean hasNext() {

// השלימו בדף התשובות – 'גסעיף

}

public Object next() {

// השלימו בדף התשובות – 'דסעיף

} }

נק'( 5סעיף א )

הערה: מותר )איך אין חובה( לקרוא לפונקציה .BinaryTreeLeafIteratorהשלימו את הגדרת הבנאי במחלקה

prepareNext() .המתואר בסעיף ב

נק'( 7) בסעיף

stack. אם המחסנית ()prepareNextאת הגדרת הפונקציה הפרטית BinaryTreeLeafIteratorהשלימו במחלקה

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

תקבל.ייעיל ולא ומחסנית אינפתרון שיכניס בבת אחת את כל העלים אל ה ריקה, הפונקציה לא תעשה דבר.

נק'( 3)ג סעיף

.BinaryTreeLeafIteratorבמחלקה ()hasNextהשלימו את הגדרת השיטה

נק'( 7) דסעיף

.BinaryTreeLeafIteratorבמחלקה ()nextהשלימו את הגדרת השיטה

המאוחסן בקדקוד העץ ולא את הקדקוד. data-להחזיר את ה ()nextעל השיטה

נק'( 3) הסעיף

.BinaryTreeבמחלקה ()leafIteratorהשלימו את הגדרת השיטה

Page 9: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 9עמוד

נקודות( 25) 4 מספר שאלה

נקודות( 5: )סעיף א הסטטית הציבוריתאת השיטה Q4במחלקה השלימו

boolean containsNVertices(List numbers, int n)

.nומספר אי שלילי שלם numbers בשם מקבלת רשימהה אם הרשימה מכילה בדיוק כל מספר וגם Integerאם כל איבר ברשימה הוא מטיפוס true השיטה מחזירה

.falseפעם אחת, ולא מכילה מספרים נוספים מעבר לכך. אחרת, השיטה מחזירה n-1 -ל 0בין .falseרק אם הרשימה ריקה ואחרת תחזיר trueהשיטה תחזיר n=0 -במידה ו

.falseבמידה והקלט לא תקין על השיטה להחזיר

public class Q4 {

public static boolean containsNVertices(List numbers, int n){

השלימו בדף התשובות // –' אסעיף

}

}

דוגמאות:

עבור הרשימה הריקה ו- n=2 השיטה תחזירfalse.

ו ⟨3,1,0,2⟩עבור הרשימה- n=4 השיטה תחזירtrue.

ו ⟨10,1,0,2⟩עבור הרשימה- n=4 השיטה תחזירfalse.

3,1,0⟩עבור הרשימה, .falseהשיטה תחזיר n=4 -ו ⟨1−

מבוא לסעיפים ב' + ג': בכיתה. הכפי שנלמד GraphAlgorithmנתונה לכם המחלקה האבסטרקטית בשאלה זו נעסוק בגרפים.

abstract public class GraphAlgorithm {

protected Graph input ;

public GraphAlgorithm(Graph input) {

this.input = input ;

}

abstract public Object runAlgorithm();

}

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

עבור סעיף ב':הגדרה

𝑃סדרת קודקודים = ⟨𝑣1, 𝑣2, … , 𝑣𝑘⟩ מסלולמהווה )Path( בגרף אם לכל𝑖 = 1, … , 𝑘 − ,𝑣𝑖)ישנה קשת 1 𝑣𝑖+1) בפרט, סדרת קודקודים ריקה או סדרה המכילה קודקוד יחיד מהוות מסלול בגרף. בגרף.

Page 10: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 10עמוד

דוגמה:

,𝑃0 שתי רשימות הקודקודיםשבאיור G1בגרף 𝑃1 𝑃0 = ⟨ ⟩ , 𝑃1 = ⟨1, 5, 2, 3⟩

הינן מסלולים בגרף.𝑃2הרשימה = ⟨1, 4, 7, 8, לא ינה מהווה מסלול בגרף כיוון שבגרף א ⟨6

.(7,8)קיימת הקשת

המשך השאלה בעמוד הבא. '.בף אותה תשלימו בסעי IsPathAlgorithm להלן תיאור המחלקה

מסלול רשימת הקודקודים הנתונה מהווההאם מצייןבגרף קודקודים רשימתבהנתן גרף והמחלקה מתארת אלגוריתם אשר בגרף.

.Integerפוס ימיוצגים על ידי מספרים מטודקודים קרשימה של קודקודים. הפרמטרים: גרף ו שניבנאי המחלקה מקבל

public class IsPathAlgorithm extends GraphAlgorithm {

private List vertices;

public IsPathAlgorithm(Graph input, List vertices){

super(input);

this.vertices = vertices;

}

public Object runAlgorithm() {

// השלימו בדף התשובות –' בסעיף

}

}

נקודות( 10) :בסעיף

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

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

דוגמה: ושתי רשימות הקודקודים שבאיור משמאל G1בהנתן הגרף

𝐿1 = ⟨1, 5, 2, 3⟩ 𝐿2 = ⟨1, 4, 7, 8, 6⟩

קטע הקוד הבא:GraphAlgorithm ga1 = new IsPathAlgorithm(G1, L1);

System.out.println(ga1.runAlgorithm()); // true יודפס

GraphAlgorithm ga2 = new HasPathAlgorithm(G, L2);

System.out.println(ga2.runAlgorithm()); // false יודפס

0

0

Page 11: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 11עמוד

השורות: יס אתדפי

true

false

המשך השאלה בעמוד הבא.

:הגדרה עבור סעיף ג' אם המסלול מכיל כל קודקוד בגרף בדיוק פעם אחת. מסלול המילטוןייקרא ,G בגרף 𝑃מסלול האחרון לבין הקודקוד הקודקודהוא מכיל לפחות שלושה קודקודים וקיימת קשת בין אם מעגלייקרא ,G בגרף 𝑃מסלול

הראשון במסלול. מסלול המילטון ומעגל. 𝑃אם המילטון מעגלייקרא ,G בגרף 𝑃מסלול

שבאיור G2גרף : בדוגמאות

𝑃1המסלול = ⟨7, 4, 1, 5, 2, 3, 6, מסלול המילטון. הוא ⟨8𝑃2 המסלול = ⟨1, 2, 5, 7, מעגל. הוא ⟨ 4𝑃3 המסלול = ⟨1, מעגל. אינו ⟨ 2𝑃4 המסלול = ⟨1, 2, 3, 6, 8, 5, 7, 4, מעגל המילטון. הוא ⟨0

המחלקה מתארת אלגוריתם . אותה תשלימו בסעיף ג' IsHamiltonianCycleAlgorithmלהלן תיאור המחלקה .מעגל המילטון בגרף רשימת הקודקודים הנתונה מהווהמציין האם בגרף קודקודים רשימתאשר בהנתן גרף ו

.Integerמיוצגים על ידי מספרים מטיפוס רשימה של קודקודים. הודקודים פרמטרים: גרף ו שניבנאי המחלקה מקבל

public class IsHamiltonianCycleAlgorithm extends GraphAlgorithm{

private List vertices;

public IsHamiltonianCycleAlgorithm(Graph input, List vertices){

super(input);

this.vertices = vertices;

}

public Object runAlgorithm() {

// השלימו בדף התשובות –' גסעיף

}

}

נקודות( 10: )'גסעיף

0

Page 12: דחוימ דעומ - BGUintro171/wiki.files/moedc_v14_michael.pdf · 12 ךותמ 1 דומע דחוימ דעומ:ןלהלש תוארוההה תא בטיה וארִק אנא.רזע

12מתוך 12עמוד

ורשימת input. הקלט לאלגוריתם הוא גרף השמור בשדה ()Object runAlgorithmהשלימו את השיטה

מהווה מעגל המילטון verticesאם הרשימה true. פלט האלגריתם הוא verticesקודקודים השמורה בשדה

אחרת. false -ו inputבגרף

בהצלחה!