Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1
!ענו על ארבע השאלות הבאות על גבי הטופס ובמקומות המתאימים. המחברת תשמש לטיוטה בלבד אנו לא אוספים את מחברות הטיוטה והן יילקחו לגריסה.
לאלגוריתם שעליכם להציע, יש לתת הסבר מספק שאכן עמדתם בדרישת בסעיפים בהם קיימת דרישת זמן הזמן שבשאלה.
אלא אם –ניתן להשתמש במבני נתונים ואלגוריתמים שנלמדו בכיתה ללא פירוט של המימוש שלהםניתן לבחור כל מימוש –השאלה דורשת במפורש פירוט של המימוש. במידה וקיים יותר ממימוש אחד
ריצה המבוקשים ולתנאי השאלה. שמתאים לזמני ה
הקפידו התשובה הנדרשת. אורך על רומז התשובות בדף לרשותכם העומדות השורות מספר השאלות, בכל במחברת קודם לשאלה פתרון לכתוב מומלץ מלא. תזכינה בניקוד לא מסורבלות תשובות ברור. יד כתב על
.לטופס נקייה בצורה אותו מכן להעתיק לאחר ורק הטיוטה,
ב ותזכו ה(תשוב במקום) "ת/יודע לא" רשמו ,כלשהו שלם לסעיף התשובה את יודעים שאינכם במידה- .הסעיף לכל היא ההתייחסות", ת/יודע לא" רשום אם(. מטה מעוגל( הסעיף מניקוד 20%
.שימו לב שמשפט המסטר מצורף למטה
בהצלחה!
:משפט המסטר
-פונקציה המוגדרת על השלמים האי T(n)פונקציה, ותהיי f(n)קבועים, תהי a ≥ 1 , b > 1 יהיו
𝑇(𝑛) שליליים על ידי נוסחת הנסיגה הבאה: = 𝑎𝑇 (𝑛
𝑏) + 𝑓(𝑛):אזי .
)()/(:,1
and )(:0
)(
)(:0
)(
log)(
00
log
log
log
log
log
ncfbnafnnnc
nnf
nnf
nOnf
nf
nn
n
nT
a
a
a
a
a
b
b
b
b
b
21/02/2017תאריך הבחינה:
' רבייב אירינהדר שם המרצה:
קגן מרינה,-שם המתרגל: גב' סדצקי
מר רוקח עמית
יסודות מבני נתונים שם הקורס:
9191- 202-1 מספר הקורס:
סמסטר: א' מועד: א' 2017שנה:
שלוש שעות משך הבחינה:
אסור חומר עזר:
2
(נק' לכל סעיף 5, נק' 25) 1 שאלה
יש לסמן את התשובה הנכונה מתוך מספר תשובות מוצעות.בכל אחד מהסעיפים הבאים
.בלבד ה אחתנקודבתשובה נכונה ללא הסבר תזכה .במקום המיועד בקצרה את תשובה יש להסביר
? h=4בגובה AVLמהו מספר מינימאלי של צמתים שיכולים להיות בעץ .1
15 (א) 12 (ב) 5 (ג) 31 (ד) .אף אחת מהתשובות לעיל (ה)
.גובה העץ מוגדר להיות מספר הקשתות במסלול הכי ארוך משורש לעלה תזכורת:
הסבר:
)כמו שעשיתי בהוכחת משפט על גובה עץ hבגובה AVLאת מספר הצמתים המינימאלי בעץ hW-נסמן ב
AVL.)
=10W הוא צומת בודד( 0)העץ בגובה
= 2 1W
h :+12-h+W1-h=WhW < 2ועבור כל
124W=סחת הנסיגה , ונקבל ודרך נ 4Wנמצא את ,מכאן
.nבגודל Aהמיוצגת על ידי מערך , (n ≥ 3) איברים nבעלת Aנתונה ערימת מינימום .2
.שונים זה מזה A-כל האיברים ב
...
הערימה?באילו תאים )אינדקסים( יכול להימצא החציון של
⌋עד 1-בכל אחד מהאינדקסים מ (א)𝑛
2⌋.
⌉-בכל אחד מהאינדקסים מ (ב)𝑛
2 .nעד ⌈
.1-לפרט בכל אחד מהאינדקסים (ג) אף אחת מהתשובות לעיל. (ד)
חציון של קבוצת האיברים הוא האיבר שמספר האיברים הגדולים או ששווים לו שווה למספר תזכורת:
אי זוגי של איברים, אז החציון שווה לערכו של האיברים שקטנים או שווים לו. אם בקבוצה יש מספר
האיבר האמצעי בקבוצה כאשר הערכים מסודרים בסדר עולה. כאשר בסדרה יש מספר זוגי של איברים,
נתייחס למספר השמאלי בין שני האיברים שבאמצע הקבוצה )כאשר הערכים מסודרים בסדר עולה ( כאל
החציון.
.7, החציון הוא 35, 34, 11, 7, 4, 2, 2לדוגמה: לקבוצה:
n
A
1 2 3
3
:A[1..n]למיון המערך הבא האלגוריתם נתון .3
מיין אותו בעזרת מיון הכנסה –שלושה איברים מאם המערך מכיל פחות -
אחרת -
o באופן רקורסיבי שני שליש האיברים הראשונים מייןA[1. .2
3𝑛]
o שני שליש האיברים האחרונים יבאופן רקורסיב מייןA[𝑛
3. . 𝑛]
o מיין באופן רקורסיבי שני שליש האיברים הראשוניםA[1. .2
3𝑛]
?nבגודל A על מערך הקלטהאלגוריתם זמן ריצה של מהו
Θ(𝑛𝑙𝑜𝑔𝑛) (א) Θ(𝑛) (ב) Θ(𝑛2) (ג) אף אחת מהתשובות לעיל (ד)
הסבר:
החציון אינו יכול להופיע בשורש, שכן איבר שבשורש הוא איבר מינימאלי.
. השאלה בעזרת הדוגמאות ניתן לראות שחציון יכול להופיע גם בחצי השמאלי וגם בחצי הימני של המערך
. התשובה היא לא. למשל, עבור ערימה בגודל n..2היא האם הוא תמיד יכול להופיע בכל אחד מהאינדקסים
-איברים שקטנים מהחציון ובתת עץ המושרש ב 5, כיוון שיש רק 2החציון אינו יכול להופיע באינדקס 11
A[2] (.11איברים )תנסו לצייר מבנה של ערימה בגודל 6צריכים להופיע
לכן התשובה הנכונה היא ד.
ודות.מי שסימן תשובה ג' קיבל את כל הנק
הסבר: נוסחת נסיגה שמתארת זמן ריצה של הפונקציה היא
𝑇(𝑛) = 3𝑇 (2
3𝑛) + 𝑂(1)
𝑇(𝑛)שהפתרון שלה הוא = 𝛩(𝑛𝑙𝑜𝑔3
2
3 )שימוש בשיטת המסטר או שיטת האיטרציה( (
4
. AVLמקיים את תכונת האיזון של עץ Tצמתים. רוצים לבדוק האם nבעל Tנתון עץ חיפוש בינארי .4
מהו זמן ריצה של האלגוריתם היעיל ביותר לבדיקה הנ"ל במקרה הגרוע?
מצביעים לבנים ומצביע לאב.שדות: מפתח, 4הניחו שכל צומת בעץ מכיל רק
.Θ(𝑙𝑜𝑔 𝑛) (א) .Θ(𝑛 𝑙𝑜𝑔𝑛) (ב) .Θ(𝑛) (ג) .אף אחת מהתשובות לעיל)ד(
של ערימת מקסימום )משמאל לימין(: preorderנתונה סריקת .5
40, 35, 25, 15, 10, 21, 8, 20, 11, 7
ניתן לשחזר את הערימה מהסריקה באופן חד משמעי. טענה:
סמנו את התשובה הנכונה.
הטענה נכונה (א)
הטענה לא נכונה (ב)
הסבר:
(.0את הגובה שלו )גובה העלה הוא על הצמתים ובכל צומת מעלים כלפי מעלה postorderעוברים בשיטת
.1בכל צומת, בודקים האם הפרש הגבהים של שני תת עצים שלו הוא לכל היותר
הסריקה ולדווח שהעץ אינו מאוזן.אם לא, אפשר לעצור את
(. 1מקסימום בין הגבהים של שני תת עצים +שהוא אחרת, מגלגלים כלפי מעלה את הגובה של הצומת )
נחזיר תשובה חיובית, העץ מקיים את תכונת האיזון. –מאוזנים וכולםאם עברנו על כל הצמתים
.Θ(𝑛)והינו postorderזמן ריצה הוא בעצם זמן ריצה של
הסבר:
מוגדר באופן חד משמעי.של העץ פירושו שמבנה –ערימה היא עץ בינארי שלם
.ומשבצים את חזרה את הערכים preorderעוברים על הערימה בשיטת
5
נק'( 25) 2שאלה
,יעיל ככל האפשר ,)אפשר במילים( אלגוריתם תארומספרים ממשיים. nהמכילה Sנתונה מחסנית
אחרי המיון המספר הגדול ביותר אמור להיות . ספרים במחסנית מהמספר הקטן לגדולהממיין את המ
. במחסנית עזר אחת ומספר קבוע של משתני עזר פשוטיםנית. ניתן להשתמש ש המחסברא
נתחו את סיבוכיות זמן הריצה של האלגוריתם שתיארתם.
.isEmpty, push, popבפעולות שימו לב: בעבודה עם המחסנית אפשר להשתמש אך ורק
הינו קבוע. isEmpty, push, popהניחו כי זמן ריצה של הפעולות
תוך ו tmp עזר למחסנית S מ איברים שנעביר כך י”ע ,הנתונה במחסנית יש איברים כמה רופנס ,בהתחלה .Sלנוחות נחזיר את האיברים למחסנית (.sizeם )משתנה אות נספורכדי העברה
isize downto 1בלולאה
o שנעביר כך י”ע מינימלי איבר נחפש i מ יםאיבר S ל tmp האיבר את נזהה מעבר כדי ותוך .בצד אותו נשמור ,המינימלי
o במחסנית ת האיבר המינימאלי שמצאנוא נשים S . o מ בחזרה האיברים כל את נעביר tmp ל S.
Sort-Stack(S)
Let tmp be an empty stack
size 0
while (NOT S.isEmpty()) // transfer the elements from S to tmp and count the size of S
sizesize + 1
tmp.push( S.pop() )
while (NOT tmp.isEmpty()) // transfer the elements back to S
S.push( tmp.pop() )
for(isize downto 1){
minS.pop()
for(j1 to i-1){ // find minimum in S
x S.pop()
if(x < min){
tmp.push(min)
min x
}else
tmp.push(x)
}
S.push(min) // push min to S
} .2O(n(א יהאלגוריתם המתואר לעיל ה סיבוכיות זמן ריצה של
6
נק'( 25) 3שאלה
𝒔קדקוד נקרא ל. G = (V, E) מכוון גרףיהי נתון ∈ 𝑽 מ אם קיים מסלול מקור-𝒔 אחר לכל קדקוד 𝒗 ∈ 𝑽
מקור, שכן קיים ממנו מסלול שבציור הוא 1 קדקוד. לדוגמה, 𝒔 א קיים מסלול מאף קדקוד בגרף אלבגרף, ול
מקדקודי הגרף ולא קיים מסלול מאף קדקוד אליו.לכל אחד
𝑠 קדקודו G = (V,E)מכוון גרף מקבלש, יעיל ככל האפשר ,הציעו )במילים( אלגוריתם נק'( 7) (א ∈ 𝑉 בודק ו
הוא קדקוד מקור. נתחו את זמן הריצה של האלגוריתם שהצעתם. sהאם
.(adjacency lists)הניחו שהגרף מיוצג על ידי רשימת סמיכויות
אינו מקור )ישנם קדקודים s-נדווח ש . אם בתום הסריקה נשארו קדקודים לבנים,s-מ BFSנריץ סריקת
O(V+E). זמן ריצה של השלב הזה s-שלא ניתן להגיע אליהם מ
.sכעת נבדוק האם ניתן להגיע אל
מופיע ברשימת הסמיכות של אחד הקדקודים. אם כן, נחזיר sנעבור על רשימת סמיכויות ונבדוק האם
.O(V+E)לא יכול להיות מקור כי קיים אליו מסלול. זמן ריצה של השלב הזה גם הוא sתשובה שלילית.
אם שתי הבדיקות עברו בהצלחה, נחזיר תשובה חיובית.
O(V+E)זמן ריצה הכולל הינו
(DAG) מכוון חסר מעגלים, שמקבל גרף יעיל ככל האפשר ,אלגוריתם )במילים( הציעו נק'( 18) (ב
G = (V,E) בעונה על השאלה האם יש קדקוד מקור ו-G. .נתחו את זמן הריצה של האלגוריתם שהצעתם
.(adjacency lists)הניחו שהגרף מיוצג על ידי רשימת סמיכויות
O(V+E)הוא חסר מעגל, ניתן לבצע מיון טופולוגי. זמן ריצה Gכיוון שלפי הנתון
.s-הקדקוד היחיד שמועמד להיות מקור הוא הקדקוד הראשון במיון הטופולוגי. נסמנו ב
בגרף. אחרת, מקור ןאינדווח ש אם בתום הסריקה נשארו קדקודים לבנים,. O(V+E)זמן ריצה .s-מ BFSנריץ
נחזיר תשובה חיובית.
.O(V+E)זמן ריצה הכולל הינו
7
נקודות( 25) 4שאלה
שהוא מספר כל עובד מזוהה ע"י ת"ז שלו .אוניברסיטהלממש מבנה נתונים לניהול קבוצת העובדים ב התבקשתם
כן לכל עובד מצורף מספר המציין את המשכורת החודשית שלו. ייתכנו מספר עובדים בעלי משכורת -כמו .ייחודי
.N חסום על ידי אוניברסיטההזהה. הניחו שבכל רגע נתון מספר עובדי
על המבנה לתמוך בפעולות הבאות:
זמן ריצה תאור פעולה שם פעולה
Init(N) חסם עליון על מספר הינו Nאתחול מבנה נתונים ריק.
.באוניברסיטהשיכולים לעבוד העובדים
)NO(
במקרה הגרוע
Insert(e)
e.idמכיל שני שדות: ת"ז eלמבנה. eד חדש בוהוספת ע
לא נמצא במבנה ואל עדיין eהניחו כי . e.salaryומשכורת
תבדקו זאת.
O(log n) במקרה הגרוע
Salary(id) . idהחזרת מספר המציין משכורת של העובד בעל ת"ז
נמצא במבנה ואל תבדקו זאת. idניחו כי עובד בעל ת"ז הO(1) צפוי
Delete(id) מהמבנה. idמחיקת עובד בעל ת"ז
.ואל תבדקו זאת נמצא במבנה idעובד בעל ת"ז כי וניחהO(log n)
במקרה הגרוע
LessThan(salary) העובדים )כמה עובדים יש( שהמשכורת שלהם החזרת מספר
.salary-קטנה או שווה לO(log n)
במקרה הגרוע
Decile() ⌉-החזרת משכורת שרק ל
𝑛
10עובדי האוניברסיטה יש ⌈
משכורת גדולה או שווה לה.
O(1) במקרה הגרוע
n – מספר העובדים במבנה ברגע נתון .n ≤ N.
לא חסוםחיובי ת"ז הינו מספר שלם
תארו בקצרה את מבנה הנתונים, ספקו אלגוריתם לכל אחת מהשיטות ונתחו בקצרה את זמן הריצה של הפעולות.
נקודות בלבד. 12פתרון שתומך רק בארבע הפעולות הראשונות יקבל
8
קיימים מספר פתרונות. להלן אחד מהם.
-מבנה נתונים יהיה מורכב מ
.idלפי העובדים, השומר את AVL ,T1עץ (1
המציין את כמות העובדים numבכל צומת נוסיף שדה .salaryלפי העובדים, השומר את AVL ,T2עץ (2
1כבר נמצאת בעץ ואז רק נוסיף e.salaryנבצע חיפוש ונבדוק האם T2-בעת ההכנסה לבעלי משכורת זו.
עדיין לא נמצאת בעץ, אז נכניס צומת חדש ונעדכן שדה e.salaryשל הצומת המתאים. אם numלשדה
num 1שלו להיות.
סופר גם sizeבתת עץ המושרש בצומת )שדה עובדיםמספר ה – sizeבנוסף, כל צומת בעץ יכיל שדה
אלו על מנת לתמוך ותנשתמש בשד(. בתוכו numכפילויות של משכורת, כלומר מחשיב את השדות
.Decile -ו LessThanות בפעול
מנוהלת בשיטה גיבוב עם שירשור. id.H, המאחסנת את העובדים לפי Hטבלת גיבוב, (3
⌉ שישלאיבר T2בעץ המצביע decמצביע (4𝑛
10 משכורות שגדולות או שוות לו. ⌈
5) n – מספר העובדים במבנה
.T1, T2, H-קיימות הצבעות הדדיות בין איברים ב
תאור פעולה שם פעולה
Init(N)
במקרה הגרוע.O(N) –ואיתחול כל התאים O(N)בגודל Hיצירת טבלת גיבוב
במקרה הגרוע. T2 – O(1)-ו T1יצירת עצים ריקים
במקרה הגרוע. null - O(1)-להצביע ל decלאתחל את
במקרה הגרוע. O(1) - 0להיות nלאתחל את
במקרה הגרוע. O(N)זמן ריצה הכולל
Insert(e)
nn+1
במקרה הגרוע. e.salary .- O(1)לפי H-ל eנכניס את
במקרה הגרוע e.id .- O(log n)לפי T1-ל eנכניס את
במקרה הגרוע e.salary .- O(log n)לפי T2-ל eנכניס את
לשדה 1כבר נמצאת בעץ ואז רק נוסיף e.salaryנבצע חיפוש ונבדוק האם T2-בעת ההכנסה ל
num של הצומת המתאים. אםe.salary עדיין לא נמצאת בעץ, אז נכניס צומת חדש ונעדכן
במקרה הגרוע. O(log n) -מתבצע ב e.salary. חיפוש אחר 1שלו להיות numשדה
)גם אם רק של כל הצמתים במסלול ההכנסה sizeלשדה 1מוסיפים T2 -במהלך ההכנסה ל
של הצמתים שהתת עצים size. כמו כן, אם בוצעה רוטציה, יש לעדכן שדה (numעודכן שדה
שלהם השתנו )ישנם מספר קבוע של צמתים כאלו(.
אינו משפיע על זמן ריצה אסימפטוטי. sizeעדכון שדות
9
כאשר נקרא לה בעזרת פונק' רקורסיבית הבאה הבא dec-כמו כן נעדכן מצביע ל
) findDecile(v.root, ⌈𝑛
10⌉ .
findDecile(Node v, index i){
if (i < v.rigth.size)
return findDecile(v.rigth, i)
elseif (i <= v.rigth.size + num)
return v
else
return findDecile(v.left, i – v.rigth.size-v.num)
}
במקרה הגרוע. O(log n)הוא dec עדכוןזמן ריצה של
במקרה הגרוע. O(1) - בשלושת המבנים. eיש ליצור הצבעות הדדיות בין
במקרה הגרוע. O(log n)זמן ריצה הכולל
Salary(id) והחזרת המשכורת שלו. H-ב idחיפוש עובד בעל ת"ז
צפוי. O(1)זמן ריצה
Delete(id)
nn-1
)או רק נעדכן T2-גם מ e. בעזרת מצביעים הדדיים נמחק את T1-מ idמחיקת עובד בעל ת"ז
אם עדיין קיימים עובדים בעלי משכורת num-1של הצומת המתאים להיות numאת שדה
כן רק דוגם אם עכלפי השורש ) e-של הצמתים שהיו במסלול מ sizeמשדות 1זו(. יש להוריד
של הצמתים שתת עצים size(. כמו כן, במידה ומבצעים רוטציות, יש לעדכן שדות numשדה
.שלהם התשנו בעקבות הרוטציה
AVL - O(log n)עדכונים אלו אינם משפיעים על זמן ריצה אסימפטיטי של מחיקה בעץ
במקרה הגרוע
במקרה הגרוע, כי O(1)-מתבצעת ב H-מחיקה מ .H-ומגם eבעזרת מצביע הדדי נמחק את
נתון מצביע לאיבר שרוצים למחוק.
במקרה הגרוע. O(log n)זמן ריצה הכולל
LessThan(salary)
.0להיות counterנאתחל משתנה עזר
במסלול החיפוש: v. עבור כל צומת T2-ב salaryנבצע חיפוש של
להיות counter( נעדכן את v.key< salary-ימינה )סימן ש v-אם פנינו מ -
countercounter+v.left.size+v.num
.counterנסיים ונחזיר את –( T2-לא נמצא ב salary)סימן שערך null-אם המסלול נגמר ב
להיות counter( נעדכן את v.key = salaryעם vאחרת )המסלול נגמר בצומת
countercounter+v.left.size+ v.num ונחזיר אתcounter.
במקרה הגרוע שכן יורדים כי גובה העץ. O(log n)זמן ריצה הינו
Decile() איבר עליו מצביע החזרתdec. – O(1) במקרה הגרוע
10