מבני נתונים ואלגוריתמים - מחברת קורס/מבחן סופי מועד ב' סמסטר ב' 2007 - שאלות
הבהרה בנוגע לשימוש בלשון זכר: כדי למנוע סרבול מיותר, וכמקובל בשפה העברית, ננקטת לעתים לשון זכר בהתייחסות אל כלל הגולשות והגולשים ובמתן שמות לערכים. אנא קבלו זאת בהבנה.
|
הנחיות
|
שאלה 1
[עריכה](~24 נקודות)
אנא כתוב אלגוריתם יעיל המקבל כקלט מערך A של מספרים שלמים חיוביים, ומספר שלם חיובי t כלשהו, ומוציא כפלט True או False בהתאם לשאלה האם קיימת תת-קבוצה של הערכים בA שסכום איבריה הוא בדיוק t.
|
דוגמה: נניח שהמערך הוא , ו. התשובה היא |
אנא הבע סיבוכיות תשובתך במונחי ו.
שאלה 2
[עריכה](~24 נקודות)
נתון גרף לא-מכוון וקשיר , וכן טבלת עלויות לקשתות Weights. ידוע שאין שתי קשתות בעלות אותו המשקל:
לכל שתי קשתות ו, בהכרח Weights[e1] ≠ Weights[e2].
אנא הוכח או הפרך את הטענה הבאה: לגרף קיים עץ פורש מינימום יחידי.
שאלה 3
[עריכה](~24 נקודות)
נתונה מטריצה בת עמודות ו שורות. כל כניסה במטריצה היא 0 או 1, ולכן כל שורה מתארת מספר בינרי בעל ביטים. השורות אינן מסודרות בסדר ידוע, אך ידוע שאין שתי שורות זהות. מכאן נובע שחסרה שורה להשלמת כל המספרים האפשריים בעלי ביטים.
|
דוגמה: עבור , ייתכן שהשורה הראשונה היא המערך |
אנא תאר אלגוריתם המקבל מטריצה כזו, ומדפיס את השורה החסרה. נסה להגיע לאלגוריתם שסיבוכיותו .
|
רמז נסה להפוך את הבעיה לבעיה קטנה בחצי (בערך) בזמן לינארי. |
שאלה 4
[עריכה](~24 נקודות)
באפליקציה מסויימת, יש צורך במבנה נתונים התומך בפעולות Insert(pq, v), Delete-Min(pq), וMin(pq). משמעות פעולות אלו היא בדיוק זו של תור קדימויות - מדובר במבנה נתונים המשתמש באיזושהי השוואה כדי לספק את האיבר הקטן בכל עת.
- ידוע שבאפליקציה זו, מספר הפעולות הצפוי מסוג
Delete-Min(pq)וMin(pq)הוא זניח יחסית למספר הפעולות הצפוי מסוגInsert(pq, v). אנא הצע מימוש כך שInsert(pq, v)יהיה יעיל ככל האפשר. מה סיבוכיות שתי הפעולות האחרות במימוש שהצעת? - האם ייתכן מימוש לתור קדימויות בו הן
Insert(pq, v)והןDelete-Min(pq)יעבדו בזמן ?
שימו לב: #בסעיף הראשון, עליך למצוא יעיל ככל האפשר לInsert(pq, v). אין צורך למצוא מימוש יעיל במיוחד לשתי הפעולות האחרות.
|
שאלה 5
[עריכה](~14 נקודות)
במסיבה כלשהי יש אנשים; חלקם לחץ ידיים זה עם זה. אנא הוכח שמספר האנשים שלחצו ידיים עם מספר אי-זוגי של אנשים - הוא זוגי.
|
דוגמה: נניח שבמסיבה יש שלשה אנשים: 1, 2, ו3, ורק 1 ו2 לחצו ידיים זה עם זה. יש שני אנשים שלחצו ידיים עם אדם אחד; אכן יש מספר זוגי (שניים) של אנשים שלחצו ידיים עם מספר אי-זוגי (אחת) של אנשים. |
|
רמז צייר גרף שבו כל אדם הוא צומת. מה יקרה אם תמחק צומת כלשהו והקשתות היוצאות ממנו? |