:ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé...

26
ú ìù úéîã÷àä äììëîä " à - åôé áùçîä éòãîì äîâîä Ó ÌÈÂ˙ È· : ÌÈÏÈ‚¯˙ ˙¯·ÂÁ

Transcript of :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé...

Page 1: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

ú ìù úéîã÷àä äììëîä"à-åôé áùçîä éòãîì äîâîä

ÓÌÈÂ˙ È·:

ÌÈÏÈ‚¯˙ ˙¯·ÂÁ

Page 2: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:הנחיות כלליות ציונו של תרגיל שיוגש . )זמני ההגשה מצוינים בסילבוס הקורס( בזמןיש להגיש את כל התרגילים •

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

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

!את התרגילים כולל שימוש ( עבודות אנו רואים בחומרה רבה העתקות של. התרגילים העיוניים הם אישיים •

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

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

.כ תארו בפירוט כל חלק"ורק אח .הוסיפו ציור של מבנה הנתונים שכולל את חלקיו השונים ואת הקשרים ביניהם .3ניתן להשתמש בו , אם אתם משתמשים במנה נתונים זהה לחלוטין למה שנלמד בכיתה .4

. תארו את השינויים במדויק–מימוש אולם אם אתם משנים משהו ב. שחורהסה כבקופ :כאשר אתם כותבים אלגוריתם הקפידו על השלבים הבאים •

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

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

נמצא את הצומת בעל הערך "כתבו רק . קטע המוצא את הצומת הגדול ביותר בערכו בעץ .ותארו בנפרד איך לבצע זאת" הגדול ביותר בעץ

.כונות האלגוריתםהוכיחו את נ .3 .נתחו את יעילותו של האלגוריתם מבחינת זמן וזיכרון .4

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

Page 3: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

סדרי גודל :

:1שאלה :י הגדרה"הוכיחו את הטענות הבאות עפ

)n(n5n 33 Ω=− ⋅ .א

)n(n9n2 Ο=⋅+))n(log()n7nlog( 3

⋅ = Θ + .ג

:2שאלה O-הוכיחו ש :כלומר מקיים, משרה יחס סדר חלש

))n(f(O)n(f = . .i :רפלקסיביות

))n(h(O)n(g = n(g(O)n(f אם : טרנזיטיביות אז -ו=(( ii.

))n(h(O)n(f =. .(f(n) = Θ(g(n)) f(n) = O(g(n)) אז g(n) = O(f(n)) מ"אמ iii. אם :אנטי סימטריות חלשה

:3שאלה :)רמזים באתר הקורס (Oנתונה ההגדרה הבאה עבור

תהיינה

ˆ+ℜ→Ng :Oˆ)( Ong =

ˆO

f fנאמר שהפונקציה . שתי פונקציות היא של , g ,ונסמן זאת על ידי ))(( כך שלכל מתקיים .ים קבוע אם קי, nfc > 0g(n) ≤ c⋅f(n) n ≥ 1

. שקולות - וOהוכיחו שההגדרות של

)())((nf)((הערה .ם " אם -ש הראוכדי להראות ששתי ההגדרות שקולות : nfOng = (ˆ)( Ong = )ת ממששימו לב שהפונקציות חיוביו(

:4שאלה ):רמזים באתר הקורס(י הגדרה "הוכיחו עפ)3(On 2/n2/n .א ≠

O!n)3( .ב n≠, שימו לב. ( .ג , שני קבועים כאשר , (n - b)a = Θ(na)b a > 0 a,bהוא יכול , אינו בהכרח חיובי

).0להיות גם שלילי או

- 1 -

Page 4: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:5שאלה : עולהודלסדר גי "דרגו את הפונקציות הבאות עפ

log( ) 6

26

2

log( ) ! log( )

log( )log( ) 2 log ( ) 1log(log( ))

log(log( ))log( )

n

n

n

n n n n n n n

nn n n nn

nn n n n nn

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

:6שאלה אוו - אומגה קטן ו, קיימים שני סימונים חשובים נוספים, שנראו בכיתהבנוסף לסימונים

. נמצאות במקראהoההגדרות של . קטןΘΩ,,Oω,o

ω,

n3n5)n(gn4n)n(f

2

3

+⋅=

- ו : הבאות g f נתונות

= − ⋅

י ההגדרה הראשונה של " עפ o -הוכיחו ש g = o(f) לא על פי ההגדרות הנוספות ( קטן מהמקראה ).המופיעות שם

ניתוח סדרי גודל זמן ריצה

- 2 -

Page 5: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

זמני ריצה של פונקציות איטרטיביות :

:1שאלה Θל הפונקציות הבאות במונחים של זמן הריצה שנתחו את ):הוכיחו טענתכם במפורט (

.אvoid func1(int n) int i,j,x;

for (i = 1; i <= n; i++) if (i % 2 == 1) x++;

void func2(int n) int i,j,y;

for (i = n; i >= 1; i = i - 2) for (j = i; j <= n; j++)

y--;

. ג

int func3(int n) int x, y; y = 1; x = n; while (x > 1) x = x / 2; y++; return y;

int func4(int n) int j, y; for(j = 1; j <= n; j++) y = j;

while (y > 1) y /= 2;

- 3 -

Page 6: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

.הint func5(int n) int j, y; for(j = n; j >= 1; j--) y = 1;

while (y < j) y *= 2;

while (y > 2) y = sqrt(y);

ניתן להניח שפעולת : .Θ - מתבצעת ב )1(הערה sqrt .ו

int func6(int n) int j, y; for (j = 2; j <= n; j *= j) y = 1;

while (y < j) y *= 2;

while (y > 2) y = sqrt(y);

ניתן להניח שפעולת : .Θ - מתבצעת ב )1(הערה sqrt ) שניות-במילי(המתאר את זמן הריצה , ציירו גרף, )של שאלה זו(' ג-ו' ב' עבור כל אחד מהסעיפים א. ז

:להריצו את הפונקציות השונות על קלטים בגוד. כפונקציה של גודל הקלט, של הפונקציותn=1000; n=5000; n=10,000; n=50,000; n=100,000; n=500,000; n=1,000,000;

המודדת את הזמן של ביצוע , להלן תוכנית דוגמא.()ftime_ בפונקציה השתמשו, מדידת הזמניםלשם 10,000עם קלט בגודל , הפונקציה func1:

#include <stdio.h> #include <sys/timeb.h> #include <time.h> const MILLI_SECONDS_IN_SECOND = 1000; const SECONDS_WINDOW = 1000000; void main() struct _timeb Start_timebuffer,End_timebuffer; unsigned long int milli_start, milli_end, milli_diff; int n=10000; _ftime( &Start_timebuffer ); func1(n); _ftime( &End_timebuffer );

milli_start = (Start_timebuffer.time % SECONDS_WINDOW) * MILLI_SECONDS_IN_SECOND + Start_timebuffer.millitm; milli_end = (End_timebuffer.time % SECONDS_WINDOW) * MILLI_SECONDS_IN_SECOND + End_timebuffer.millitm;

milli_diff = milli_end - milli_start; printf("This function took %lu milli-seconds\n", milli_diff);

- 4 -

Page 7: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

שנמדוד עלול זמן הריצה , או כאשר זמן הריצה של הפונקציה הינו מהיר, עבור קלטים קטנים: הערהניתן להפעיל , ובמקרים כאלבכדי להעריך את זמן הריצה ). שניות- מילי0אולי אפילו (קטן מידי להיות

:כלומר. ולחלק במספר ההפעלות, את הפונקציה מספר רב של פעמים _ftime( &Start_timebuffer ); for (i=0; i<1000; i++) func1(n); _ftime( &End_timebuffer );

milli_diff = (milli_end - milli_start)/1000.0;

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

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

- 5 -

Page 8: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

זמני ריצה של פונקציות רקורסיביות :

:1שאלה . הצבה חוזרת על ידי ג-בסעיפים א נסיגהפתרו את נוסחאות ה

. T(1) = 1 כאשר T(n) = T(n−1) + log n .א

. T(0) = T(1) = T(2) = 1 כאשר T(n) = 2T(n−3) + 1 .ב

( ) . 1nTT(n) .ג כאשר +=T(1) = T(2) = 1באה מקבלת כקלט מערךהפונקציה ה הכולל :ושני אינדקסים, מספרים n .ד A

0 ≤ left ≤ right ≤ n−1 . Θ לזמן הריצה של הפונקציה כאשר היא נקראת עם הפרמטרים חשבו חסם הדוק במונחי

right = n−1 -ו, left = 0לפי ההנחיות הבאות : . הצבה חוזרתכתבו נוסחת נסיגה לזמן הריצה ופתרו אותה על ידי

void Sort(int A[], int left, int right) int p; if ( left < right) p = (right − left + 2)/3; Sort(A,left, left + p − 1); Sort(A, left + p, left + 2*p − 1); MergeSort(A, left + 2*p, right); Merge3(A, left, left + p, left + 2*p, right);

:כאשרMergeSort(A, i, j) היא הפונקציה שראינו בכיתה שממיינת את המערךA בין

MergeSort - ל בעזרת אלגוריתם . שלמדנו הגבולות j i

Merge3(A, i, j, k, f) היא פונקציה הממזגת שלושה חלקים ממוינים הנמצאים , - ל -ו, - ל בין הגבולות f - ל k k−1 j j −1 i ,

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

- 6 -

Page 9: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:2שאלה ולציין יש לשרטט את העץ בצורה ברורה . עץ רקורסיה על ידי ב-בסעיפים א נסיגהפתרו את נוסחאות ה

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

. T(0) = T(1) = 1כאשר T(n) = T(n/3) + T(n/2) + n .א. כאשר T(n) = T(2n/5) + T(3n/5) + nT(1) = 1 .ב

:3שאלה

∑נניח שנוסחת הנסיגה היא . כדלקמן2הכלילו את הפתרונות לשאלה =

⋅+=k

1ii )na(Tn)n(T

∑=

<k

1ii 1a

∑=

=k

1ii 1a

∑=

>k

1ii 1a

. : מה יהיה פתרון נוסחת הנסיגה כאשרכאשר , הוא קבוע המקיים ai < 1 > 0 קבוע ולכל ai 1 ≤ i ≤ k k

. א

. ב

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

מה יקרה לדעתכם כאשר . נמקו?

:4שאלה אין צורך לפתור את הנוסחה . אלגוריתמים הבאיםמצאו את נוסחת הנסיגה עבור זמן הריצה של ה

.תםשמצא

int stam(int Arr[], int n) int mid1, mid2, mid3; int i, sum; if (n <= 1) return 0; else mid1 = n/3; sum = stam(Arr, mid1); mid2 = (n - mid1)/2; sum += stam(Arr + mid1, mid2); mid3 = (n - mid1 - mid2)/2; sum += stam(Arr + mid1 + mid2, mid3); for(i=0; i< 2n; i++) sum += Arr[i]; return sum;

- 7 -

Page 10: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:5שאלה אלגוריתם ( איברים n -הבא למציאת האיבר ההרקורסיבי האלגוריתם הקטן ביותר במערך בעל A i

( ,) (שלבים ( iii -ההבדל העיקרי הוא דרך מציאת ה. דומה לאלגוריתם שלמדנו) ii pivot Selection( ,iv ).להלן) (-ו

. במערך הממוין אם נמיין את בעזרת - ונחזיר את האיבר ה )i( i Bubble Sort A n ≤ 70

:אחרתנחלק את - ל תתי מערכים )ii( A1, A2, ..., An/5 n/5 A האיברים 5 יכיל את כך שתת המערך

-הראשונים ב1A

2A5

Aתת המערך, - האיברים הבאים ב5ת יכיל א .וכך הלאה, A

)iii(1 / j ,jלכל n≤ ≤

. הקטן ביותר הנדרשi - הוא האיבר ה– pivot - נחזיר את הi = kאם

םמקייאפשר להרא

עבור כל מערך . Aj נמיין את בעזרת Bubble Sort Ajהממוין כעת ,. -ב) השלישי מתוך החמישה(נסמן את האיבר האמצעי B = b1, b2, ..., bn/5 וניצור מערך bj

)iv( .(הקטן ביותר ב -זה יהיה ה - ) נמצא ברקורסיה את החציון ב -הכלומר את האיבר- B n/10 B .pivot

יהי ). ( שמצאנו בשלב נבצע את אלגוריתם על המערך - בעזרת ה )v( k iv pivot A Partition kי " שמוחזר ע -כלומר ה ( - הוא האיבר ה -המיקום של ה pivot Partition pivot הקטן ביותר

A). -ב)vi( אם - נמצא ברקורסיה את האיבר ה -יותר בתת המערך משמאל ל הקטן בpivot i i < k .

,אחרתpivot - נמצא ברקורסיה את האיבר ה - הקטן ביותר בתת המערך מימין לאם (i-k) i > k .

, אחרת

) -ות שכתוצאה מבחירת ה ( בשלב vהערך , בצורה שתוארה k pivot7 n + 6 ≤ k ≤

103 6n

10מלצים לקורס שר למצוא את הפרטים בחלק מהספרים המואפ, למעוניינים (−

נניח שהערךהשאלה שלנולשם ). st Introduction to Algorithms, Cormen, Leiserson and Rive , למשל–

7 הוא בדיוק) 1n v( בשלב k10

.תהיה תמיד לתת המערך הגדול יותר) vi(ושהרקורסיה בשלב +

. שתוארSelection - של אלגוריתם הT(n)לזמן הריצה נוסחת נסיגה , בהנחות אלוהתחשב ב מצאו

:6אלה

ש

.T(1) = 1הניחו כי . משפט האב בעזרת ד-בסעיפים אסחאות הרקורסיה

:7אלה

פתרו את נו + n T(n) = 16T(n/4) .א T(n) = 6T(n/6) + n .בT(n) = T(3n/4) + n2 .ג

T(n) = T(5n/6) + 7 .ד

ש :סחת הנסיגה הבאהנתונה נו. א

n)(T2)n(T 2n / )nlog(= ⋅ +

.T(n) -מצאו חסם הדוק ל

:נתונה נוסחת הנסיגה הבאה. ב

)nlog()(T)n(T 2n= +

הגד"והוכיחו את נכונות החסם שמצאתם עפ T(n) -מצאו חסם הדוק ל ה .רהי .שימו לב שנדרש שימוש באינדוקציה בסעיף זה

- 8 -

Page 11: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:מיונים

:1שאלה k21המחולק, אבריםnנתונים S,,S,S אברי כל . אבריםn/k כל אחת מכילה …

דולים גiSכלומר כל , קבוצה קטנים מאברי מאברי הקבוצה הקודמת

1−iS , 1וקטנים+iS . האברים במקרה n המינימלי הנדרש כדי למיין את תמצאו חסם תחתון לסדר גודל מספר ההשוואו. א

כלומר עליכם להוכיח ששום אלגוריתם לבעיה זו אינו יכול לרוץ בזמן מהיר . תשובתכםהוכיחו. הגרועאינה יכולה להיותתשובה לסעיף זה ששימו לב . (מהחסם שנתתם) בסדר גודל(יותר

קבוצות k -ים לאברי הקבוצה הבאה וגדולים

מאברי מאברי

של תאור ).אלגוריתם

.י תאור אלגוריתם שרץ בזמן זה"ע, הראו שהחסם שנתתם הדוק. ב

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

:2שאלה בזמן n2-1 ,… ,0 על מנת למיין מספרים בתחום Radix Sort -בכיתה ראינו שאפשר להשתמש ב

.במקרה הגרוע, ליניארי log n - הביטים הראשונים ובlog n -תארו שתי שיטות לחילוץ המספרים המופיעים ב) א

בהפעלות – key –מספרים אלו משמשים כמפתח (הביטים האחרונים של כל מספר בקלט bucket sort .(ושיטה אחת לא תשתמש בפעולות כאלו, שיטה אחת תשתמש בפעולות על ביטים .

:n2 - על מנת למיין מספרים מתחום גבוה יותר מRadix Sort -נשתמש עתה ב) ב

i ( מה יהיה זמן הריצה אם תחום המספרים יהיה0, …, nℓ-1 ?)מותר להניח ש- ℓשלם (. ii ( לאילו ערכיℓזמן הריצה יישאר ליניארי ? iii (מה ערך ה- ℓ המכסימלי כך שהאלגוריתם יהיה יעיל לפחות כמו Merge Sort ?

- 9 -

Page 12: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

ותוריםמחסניות :

:1שאלה רסיביומדורגת בנויה היטבנגדיר סדרה : של סוג

• ריים באופן רקו

רגתה • . 1היט

ab) שרשור הסדרות הכוונה כאן לaו - b ( היא סדרה בנויה היטב ודרגתה היאmax(i,j). .3 בנויה היטב ודרגתה

, כאשר השימוש במחסנית יהיה כקופסה שחורה, נה נתוניםמבלי להיכנס למימוש , ( )MakeEmpty -ו, ( )Push(x) ,Pop( ) ,Top( ) ,IsEmptyי הפעולות "כלומר רק ע

.פנימי של המחסנית ויוחזר Pushטיפוס זה יועבר לפעולה ( להחליט על טיפוס הנתונים השמורים במחסנית

המחזיר את סימן הסוגריים ( )GetNextParenל האלגוריתם להשתמש בפעולה הבא בק

שאלה

.אמה בהת3 -ו, 2, 1דרגתן היא . בנויות היטב , , הסדרות [ ] ( ) : בהתאמה אז3 -ו, 2, 1 סדרות בנויות היטב שדרגתן • , -ו, cאם b a

(a)ב וד סדרה בנויה • [a] 2 סדרות בנויות היטב ודרגתן. [b] - ו• a 3 סדרות בנויות היטב ודרגתן. c, -ו, b

:אז, בהתאמה • jאם - ו סדרות בנויות היטב שדרגתן היא - ו i b a •

, -ו, ( ) [ ] ואילו הסדרה , אינן בנויות היטב ( [ ] )למשל [ ] ]

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

האתם יכולים

.( Topפעולות מה - ו Popלצורך מעבר על הקלט ע

. בסוף הקלטEND_OF_INPUTאו , לט

2: ע את הפעולות נניח שמ: הבאות

צע את כמו כן מ

: הפעולות הבאותMakeEmpty( ) –מרוקנת את התור .

IsEmpty( ) – מחזירה trueם התור ריק" אם. QPush(x) – התורלראש מוסיפה נתון חדש . QPop( )-מורידה ומחזירה את הנתון הנמצא בראש התור .

Enqueue(x) –מוסיפה נתון חדש בסוף התור .Dequeue( ) – התורבסוף מורידה ומחזירה את הנתון הנמצא .

.אולם הוא מאפשר להוסיף ולהוריד נתונים משני צדי התור, כווני דומה מאוד לתור-תור דו

בגודל קבועוזיכרון נוסף , DQכווני אחד -תור דו, Sזרת מחסנית אחת הראו כיצד ניתן לממש בע

ולבצ, היכול להכיל מספרים שלמיםמחסנית וגדר טיפוס הנתונים המופשט Stack

, -ו, . , Push(x) ,MakeEmpty( ) IsEmpty( ) Top( ) Pop( )

היכול להכיל מספרים שלמים ולב DQueue כווני-תור דווגדר טיפוס הנתונים המופשט

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

)1(כל , ולבצע את הפעולות הבאות : זמן במקרה הגרועΘ -אחת ב• MPush(x) – כמו מחסנית רגילה(לראש המחסנית מוסיפה נתון חדש( • MPop( ) –כמו מחסנית רגילה( מורידה את הנתון שנמצא בראש המחסנית ומחזירה אותו כערך( • MPushMid(x) – מכניסה את xלאמצע המחסנית .

יכנס אחרי xזוגי - איnאך אם , יכנס בדיוק לאמצעx זוגי אז n -ו, נתוניםnאם במבנה כרגע 2 - ההנתון

1n+.

- 10 -

Page 13: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:3שאלה ()Pop -ו, Push(x) שתומך בפעולות MaxStack קסימוםמחסנית משט ברצוננו לממש טיפוס נתונים מופ שמחזירה את האיבר הגדול ביותר ( )Maxוכן מאפשר לבצע את הפעולה , המוגדרות על מחסנית

!).מהמחסנית1(

רגילות הותו מבלי להוציא א(ם שנמצאים כרגע במחסנית מבין הנתוני

(אלהתארו מבנה נתונים שמאפשר לבצע כל אחת מהפעולות ה .א

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

x( )סימלי מהמחסנית ומחזירה את מחסנית מקסימום בפעולה

כיחו כי במודל הו. ערכו זמן במקרה הגרוע בכל log(nΩ)(( תדרוש

DeleteMa את הנתון המקהמוציאה ( )eteMax או Delאחת הפעולות , השוואות Push(x)

.מימוש שהוא

:4שאלה המוגדרות על הסבירו כיצד תתבצע כל אחת מהפעולות הבסיסיות . מחסניות2 לממש תור בעזרת רצה

ללא (ף בגודל קבוע נ

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

: בו היעילות הנדרשת במקרה הגרוע עבור פעולות התור .א פשוט הציעו מימוש e(x)EnQueu

המתחילה מתור ריק ) בסדר כלשהו (DeQueue - וEnQueue פעולות nרה של

.O)1( - תתבצע ב– .ע בתור הוא מספר הנתונים כרג ( )k DeQueueכאשר , kO)( - תתבצע ב–

בנוסף נדרש שסד)n( 2Θתיקח . זמן במקרה הגרוע

O(n2) פעולות ייקחו nיש להראות שכל : O -כוון ה) א: היא כפולהΘ -שימו לב שמשמעות ה . זמןΩ(n2)ולות שתיקח יש להראות שקיימת סדרת פע: Ω -כוון ה) ב. זמן

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

:כלומר, בסעיף א EnQueue(x) –1( - תתבצע ב(O. DeQueue( ) הוא מספר הנתונים כרגע בתור . kכאשר , kO)( - תתבצע ב– המתחילה ) בסדר כלשהו (DeQueue - וEnQueue פעולות nש הפעם שסדרה של רבנוסף נד

)n(Θבמקרה הגרוע. זמן מתור ריק תיקח

Amortized Analysis . התרגיל הוא דוגמה לשני לותם שונה לחלוטין עבור סדרה של יעי

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

. פעולות

:) לא להגשה–רשות (5אלה

ש

!).ו מהתורגע בהצי

של סדר המתחילה מתור ) בסדר כלשהו (Max - וEnQueue ,DeQueue פעולות nבנוסף נ)(nOבמקרה הגרוע .

הערה

MaxQueueEnQueue(x) שתומך בפעולות -ו, ימום קס מתורברצוננו לממש טיפוס נתונים מופשט ( )Maxוכן מאפשר לבצע את הפעולה , הרגילות המוגדרות על תור DeQueue() שמחזירה את האיבר

תור הגדול ביותר מבין הנ מבלי להוציא אות(תונים שנמצאים כרמימוש בו היעילות במקרה הגרוע המושגת עבור הפעולות :עו

. הוא מספר הנתונים כרגע בתור k EnQueue(x)כאשר , kO)( - תתבצע ב– .O)1( - תתבצע ב– DeQueue( )

Max( ) –1( - תתבצע ב(O. ה דרש שכל

ק תיקח רי

. במקרה הגרועO(log n) - בEnQueueלבצע את פעולת ) אך קשה יותר(למעשה אפשר : .המעוניינים מוזמנים לנסות זאת

- 11 -

Page 14: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:עצים בינאריים

:1שאלה העץ ממומ. זוגיים-וחלק, חלקם זוגיים, שבקדקודים שלו יש מספרים טבעייםנת ש ם איTון עץ בינארי על

כתבו אול אינו חייבמתש

, )זוגיים לסירוגין-זוגיים ואישמתחיל בשורש ומכיל ( בעץ הבא מודגש המסלול הארוך ביותר :וגמה .3 -את אורכו , אם כן, יחזיר

Qם לשם כתיבת :לכל תור מוגדרות הפעולות הבסיסיות הבאות. 2• m y ( )• • Queue dataהנתון . לתורdataיכול להיות צומת בעץ ,

או

).אין להשתמש ברקורסיה (בגודל קבוע יכולים להשתמש רק בזיכרון נוסף כבקופסאות שחורות ובפעולות המוגדרות עליהם Q1,Q2 -אלגוריתם שלכם ישתמש בשימו לב

. ידי מצביעים לילדים

שיחזיר את אורכו של המסלול הארוך ביותר LongestSignChangingPath(Tree T)לגוריתם .)המסל להסתיים בעלה(זוגיים לסירוגין -מנתונים זוגיים ואי ומורכב חיל בשורש

דאלגוריתםה

7

Q ,1גוריתם השתמשו בשני תוריהאלMakeE pt –לרוקן את התור .

IsEmpty ( ) – אחרת0, אם התור ריק1 מחזירה . En (TreeNode data) –מכניסה את הנתון

.י בחירתכם"עפ, ץמצביע לצומת בע

• DeQueue ( ) – הנתון שבראש התוראת מוציאה ומחזירה.

תםבנוסף א !ה,

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

. זמןO(1) -התור יכולות להתבצע ב

3

9

101

4

6

6

8

35

- 12 -

Page 15: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:2שאלה האלגוריתם יכול . T את כל הנתונים המאוכסנים בעץ בינארי derInOr - בשמדפיסאלגוריתם כתבו

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

). אם אין ילד שמאליT) NULL בעץ nמחזירה את הילד השמאלי של קדקוד ).י ימנרה את הילד ה מחזי-

בהנחה שכל פעולות , את יעילותו של האלגוריתם במקרה הגרוע כפונקציה של מספר הצמתים בעץנתחו . זמןO(1) - יכולות להתבצע בADT -ה

: 3שאלה

ADTהאלגוריתם -ישתמש כקופסה שחורה ב :הבאותפעולות של עץ בינארי המכיל את הT מחזירה את הקדקוד שהוא שורש העץ - Root().

LeftChild(Node n) - של קדקוד בעץ ( אם אין ילד ימני NULL T n RightChild(Node n)

מחזירה את הקודקוד שהוא ההורה של – בעץ ( אם n NULL T n Parent(Node n)שורש העץ .(T מחזירה את הנתונים המאוכסנים בקדקוד - בעץ . n Retrieve(Node n)

.Pseudo Code -יש לכתוב את האלגוריתם ב

.2מדרגה ם גדול באחד ממספר הקדקודיםמספר העלי) לאו דווקא שלם(מלא הוכיחו שבעץ בינארי

:4שאלה

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

- 13 -

Page 16: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:עצי חיפוש בינאריים

:1שאלה תמים יעילים לחיפוש ההורה Tנתונים שני קודקודים - ו בעץ בינארי v u .תארו אלגורי

ביותר של הקדמון הנמוך

העץ הוא עץ .ב .Tד שהוא שורש העץ

b LeftChild(Node n) מחזירה את הילד השמאלי של קדקודn בעץ T) NULL אם אין

nTNULL

d. Retrieve(Node n) - מחזירה את הנתונים המאוכסנים בקדקוד n בעץ T. .שתמש ברקורסיה או במחסניתמותר בסעיף זה לה. אלא שהעץ הוא עץ רגיל' ב

.תחו את יעילותם במקרה הגרוע של האלגוריתמים שנתתם כפונקציה של גובה העץ

v - ו uעץ במקרים הבאים ב.

הפעולה ) אך ורק(העץ הוא עץ רגיל וקיימת המחזירה את הקודקוד שהוא Parent(Node n) .אnההורה של בעץ ( אם ). שורש העץ NULL T n

:הפעולות הבאות) אך ורק(חיפוש בינארי וקיימות a. Root() -מחזירה את הקדקו

. - ).ילד שמאלי

c. RightChild(Node n) -אם אין ( בעץ י של קדקוד ימנ מחזירה את הילד ה ).ילד ימני

כמו .ג

נ

:2אלה ש . n…,1,2 המספרים n וידוע שכל אחד מהם מכיל את ,T1,T2,T3 עצים בינאריים 3נתונים

התוצאה המתקבלת בשלושת . Postorder - ב T3 ועל Preorder - ב T2על , Inorder - ב T1עוברים על . יורדכלומר המספרים מודפסים בסדר , n, n-1, …, 1המעברים האלה היא

:וכיחו או הפריכו את הטענות הבאותה . הוא בהכרח עץ חיפוש בינארי T1 .א . הוא בהכרח עץ חיפוש בינאריT2 .בלאו דווקא (ים לט בשני המקר נקבל אותו פPreorder - בT3 ועל Postorder - בT2אם נעבור על .ג

). n, n-1, …, 1הפלט

- 14 -

Page 17: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

עצים מאוזנים :

:1שאלה : ולענות על השאלות הבאותAVL Treesעליכם לקרוא בחומר העזר שבמקראה את הנושא

: הבאAVL נתון עץ. א

8

3 22

6

10 17

.לבסוףהמתקבל העץכל השלבים שעובר העץ ואת ציירו את . לעץ15המפתח מוסיפים את

.לבסוףהמתקבל העץכל השלבים שעובר העץ ואת ציירו את . המקוריעץמה 3תח המפאת

13 25

i( ii ( מורידים

:2שאלה . א)i (רקורסיביאלגוריתם תארו rchTree(root)IsSea בינארי ששורשו עץ אם הבודקroot הוא עץ חיפוש 0מלבד ( האלגוריתם אינו מחזיר שום ערך נוסף .) לילדיםביל או

)ii (כפונקציה של מספר הצמתים בעץ לותו של אלגוריתם זה במקרה הגרוענתחו את יעי n ושל גובה

. hהעץ :הערה

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

. קבוע בלבד

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

). אפשריhועלינו לנתח את האלגוריתם לכל )iii ( עתה מותר לאלגוריתם הרקורסיביIsSearchTreeשנו את . לחשב ולהחזיר ערך אחד נוסף

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

אלגוריתם תארו IsSearchTreeאך הפעם במקום ' א- בדומה לiii ב-ו, iiב, iבצעו את השלבים ב. ב

עץ הניחו כמו קודם שה( AVL הוא עץ rootבינארי ששורשו עץ אם הבודק IsAVLTree(root) רקורסיבי .)ממומש על ידי מצביעים לילדים

- 15 -

Page 18: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:3שאלה :תומך בפעולות הבאותה, במישור הממשי(x, y)קודות הבא לשמירת נADT -נתון ה

Insert(x, – מכניס את הנקודה (x, y) למבנה ביעילות O(log(n)) , כאשרn הוא מספר הנקודות

מספר .

SameF –מדפיס את כל הנקודות במבנה

• y) .בנהבמ

• Delete(x, y) הוא כאשר , n מסיר את הנקודה – מהמבנה ביעילות O(log(n)) (x, y)הנקודות במבנה

• actor(double a)x a y ביעילות, =⋅ המקיימות O(k + log(n)) , כאשרnו, הוא מספר הנקודות הכולל במבנה- k הנקודות מהמבנה הוא מספר

.המקיימות קשר זה . ופרטו איך תתבצע כל אחת מהפעולות, ל" הנADT -הציעו מבנה נתונים למימוש ה

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

- 16 -

Page 19: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:טבלאות ערבול

:1שאלה נתונה טבלת ערבול שבה התנגשויות נפתרות בשיטת

כאשר גודל הכניסו הטבלה g אg1. ב 1 2

.ציירו את הטבלה המתקבלת בכל אחד מהמקרים

:2שאלה

Open Addressing. , )מימין לשמאל (59, 90, 17, 28, 16, 4, 31, 22, 10: לטבלה את המפתחות הבאים

:תוך שימוש בשיטות הבאות, m = 11הוא .Linear Probin : . , כאשרh1(k) = k mod m h(k,i) = (h1(k) + i) mod m

Quadratic Probin: h(k,i) = (h (k) + c i + c i2 ) mod m c2 = 3 -ו' כמו בסעיף א כאשר c1 = 1 h1(k).

Double Hashingh(k,i) = (h1(k) + ih2(k)) mod m :. גh2(k) = 1+(k mod (m−1)) -ו', כמו בסעיף א .כאשר h1(k)

ובפונקצית תוך שימוש בשיטת החלוקה, י שרשור"נתונה טבלת ערבול שבה התנגשויות נפתרות ע

.h(k) = k mod mהערבול . m = 9טבלה בגודל )מימין לשמאל (10, 17, 12 ,34, 20, 16, 19, 28, 5הדגימו את הכנסת המפתחות .ציירו את הטבלה המתקבלת

:3שאלה ואין ( איברים בטבלה 5נניח שיש . ופונקצית ערבול אחידה לטבלה סגורהnנתונה טבלת ערבול בגודל

).DELETEDאיברים המסומנים תנו נוסחה לתוחלת . pr(i) - ב ניסיונותiנסמן את ההסתברות שהכנסת המפתח השישי תיקח בדיוק . א

.מספר הניסיונות להכנסת המפתח השישי .pr(3)את ) כלומר ללא שימוש בנוסחאות(חשבו ישירות . ב

:4שאלה תחום Uיהי . h ופונקצית ערבול י שרשור" שבה התנגשויות נפתרות עmנתונה טבלת ערבול בגודל . א

שכולם U -ב מפתחות log nקבוצה של - תתקיימת אז U| = m log n|הוכיחו שאם . המפתחות האפשריים . לאותו תא בטבלהhי "עימופו

מה תהיה יעילות חיפוש . הוכנסו בעזרתה לטבלהU - המפתחות בm log n ושכל אחידה h -נניח עתה ש.ב

מותר להשתמש במשפטים (הראו את חישוביכם . ובמקרה הממוצע, במקרה הגרוע, מוצלח במקרה הטוב ).ו בכיתהשהוכח

:5שאלה . kונתון בנוסף מספר , נתוניםnכאשר כל רשימה מכילה , L1,L2נתונות שתי רשימות משורשרות

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

- 17 -

Page 20: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:6שאלה עליכם לבדוק אם יש בקלט . (0,1)ם הלקוחים בהתפלגות שווה מהקטע מספרים ממשייn קלט של נתון

. x3 = y - כך שy - וxמספרים

ני ש. גוריתם יעיל ככל האפשר במקרה הגרועכתבו אל. א . כתבו אלגוריתם יעיל ככל האפשר במקרה הממוצע. ב

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

- 18 -

Page 21: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

ת :מוערי

:1שאלה כאשר מבנה הנתונים עבו nנתונה ערמת מקסימום בגודל

n ,הניחו שאינדקסי המערך הם .מספר האיברים בערמהאלגוריתם תארו). לפשט את חישוב מיקומו של הורה

מ

ומשתנה המייצג את מערך) כרגיל(רה הוא שינוי זה נועד (n-1 ,… ,0 במקום … ,1

PseudoInsert(KeyType key)בל המק של פעולת הערמה בסופהkeyהיה נכנס את המקום במערך אליו ומחזירkeyפתח

Insert(KeyType key)האלגוריתם . בצענו אותה לוPseudoInsertלרוץ בזמן צריך( )log(log( ))nΟ.לוקח 2לשם ביצוע האלגוריתם שחישוב כל חזקה של הניחו Θ(1)הראו . זמן

. רץ בזמן הנדרשהאלגוריתם שלכםש

:2שאלה . מהגדול לקטן איבריםn בעל Aנסתכל על האלגוריתם הבא למיון מערך

)i( נחלק אתAל - n1 מערכים תת 2, ,...,n

A A Aכך שתת המערך Aאת 1 יכיל n

וכך , A - האיברים הבאים בn את יכיל2Aתת המערך, A -שונים בהאיברים הרא .הלאה

)ii( לכלi ,1 i n≤ ≤: o אם|Ai| < 4 נמיין את Ai בעזרת bubble sort. o אחרת נמיין אתAברקורסיה .

)iii( נמזג את תתיi

1המערכים הממוינים 2, ,...,n

A A A למערך ממוין אחד בעזרת אלגוריתם

: הבא= n(kאצלנו (ממוינים מערכים kלמיזוג a. ימום קסלתור עדיפויות מ) כלומר הקטן ביותר(נכניס את האיבר הראשון מכל מערך

.kבגודל b. נבצעnאיטרציות כדלקמן :

i. עזרת ב(ימלי בתור קסנוריד את האיבר המDeleteMax (נסמן את . ונדפיס אותו .Aj הגיע לתור מתת המערך y - ונניח שy -האיבר שהורדנו ב

ii. בעזרת (נכניס לתור העדיפויותInsert ( את האיבר שבא אחריyב - Aj) אם ).Aj -קיים איבר נוסף ב

ממומש בעזרת האלגוריתם aוששלב , ימוםקסי ערימת מ"הניחו שתור העדיפויות ממומש ע .הבונה ערימה בזמן ליניארי, Floydשל

: לפי ההנחיות הבאות, לזמן הריצה של אלגוריתם המיון שתוארΘחשבו חסם הדוק במונחי

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

.ולהראות את כל החישובים המתבצעים על העץ

- 19 -

Page 22: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:3שאלה .העץ ממומש על ידי מצביעים לילדים. שבקדקודים שלו יש מספרים שלמיםTון עץ בינארי נת

רמה אחרי רמה החל , T שידפיס את תוכן הקדקודים של OrderedLayers(Tree T)יתם כתבו אלגור .קטן לגדול מהיורדכאשר בכל רמה יודפסו המספרים בסדר , מהשורש

.4 ,12 ,5 ,8 ,10 ,3 ,9 ,7בא משמאל לימין עבור העץ הבא יודפס הפלט ה:דוגמה

7

9 3

5

4 12

8 10

קדימויות מ בשני Q1, Q2לשם כתיבת

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

מוגדרות הפעו

y( )• y ( )0 • ata)• ax( )• t ax( ) הזוג(key, data)ימלי מבין כלקס שהמפתח שלו מ

בנוסף אתם יכולים לה

נתחו גם את .ימוםקסמ

ורות

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

:לות הבסיסיות הבאות

• MakeEmpt –לרוקן את התור . IsEmpt – אחרת, אם התור ריק1 מחזירה.

od d מכניסה את הזוג Insert(KeyType key, TreeN e (key, data) . לתור הקדימויות–M מחזירה את הזוג (key, data) .ימלי מבין כל המפתחות בתורקס שהמפתח שלו מ–

e מורי – Del eM דה מהתור את.ומחזירה את הזוג כערך המפתחות בתור

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

האלגוריתם במקרה הגרוע בהנחה שתוריעילותו על ידי ערימת ים הקדימויות ממומשי של

Q1,Q2 -האלגוריתם שלכם ישתמש ב, שימו לב ובפעולות המוגדרות עליהם !כבקופסאות שח

:4שאלה ey(int index, KeyType key)תבו את הפונקציה index -האיבר הנמצא בתא הערך את שנה שמSetKכ

?מה יעילות הפונקציה. הפונקציה תתקן כמובן את הערימה. key לערך ימוםקסמערך המכיל ערימת מ

ב

- 20 -

Page 23: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:5שאלה pנתונות שתי ערים וביניהן יש -הממוספרים מ, )לא נחתכים( כבישים מקבילים ועד 1 p A,B .ב

של גש) לא מוגבל( כל כביש יכול להיות מספר כלשהו כאשר על, הזמן בונים על הכבישים גשרים . והגובה של כל גשר יכול להיות מספר ממשי חיובי כלשהו

מהלך , רים

גשרים .6מספר הגשרים הכולל במקרה זה הוא . וליד כל גשר רשום גובה הגשר, נבנו עליו

כאשר על כל כביש מצוירים ה, במקרה זה יש :דוגמה B כבישים בין - ל A p = 3

ש

Aהעיר

10

7

4

7

6

8

כביש3 כביש2 כביש1

Bהעיר

עליכם

יכולה לנסוע משאית

גשרים

. במקרה הגרועΘ(1)ילות הפעולה צריכה להיות

הסבירו מדוע יעילות כל אחת מהפעולות . בנה הנתונים וכתבו אלגוריתם לכל אחת מהפעולות

: נתונים שתומך בפעולות הבאות

Init() – אתחול מבנה הנתונים כך לתכנן מבנה

. כבישים ללא גשרים עליהםpשיכיל צריכה להי

•. ות O(p) יעילות הפעולה

• (float h, int i) שגובהוh על כביש מספר AddBridge i הוספת גשר – . . במקרה הגרועO(log p) היעילות צריכה להיות

• WhichRoad(float h) – הפונקציה תחזיר מספר של כביש שבו המשאית תיסע מתחת לגשרים ואסור לה כמובן להיתקל באף אחד (h שגובהה

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

. 0אם המשאית אינה יכולה לעבור באף כביש תחזיר הפונקציה . מהם יע

• Print(int i)ר הפונקציה מדפיסה את הגבהים של כל הגשרים שנמצאים על כביש מספ i –. . יעילות הפונקציה צריכה להיות ליניארית במספר הגשרים שעל הכביש

תארו את מ . היא כנדרש

- 21 -

Page 24: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

קוד הפמן :

:1שאלה הקובץ (n התווים השונים הוא סוגיתון קובץ שבו מספר נניח ). תו כמה פעמיםל כמובן כל יכול להכינ

, שימו לב(

:2שאלה

?nכמה צלעות יהיו בעץ שבנינו כפונקציה של . פמן לצורך קידוד הקובץ הנתוןשבנינו עץ ה . תשובתכםהוכיחו). Θאתם מתבקשים לתת תשובה מדויקת ולא במונחים של

מצאו גם את משקלו של . a: 2, b:2, c: 4, d: 6, e: 10, f:16: פמן עבור השכיחויות הבאותמצאו קוד ה. א

. הקוד : ריכו את הטענה הבאההוכיחו או הפ. ב

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

: ריכו את הטענה הבאה הפהוכיחו או. ג

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

- 22 -

Page 25: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

קבוצות זרות :

:1שאלה Union- Findנממש את טיפוס הנתונים המופשט ( Disjoint Sets (ימות כפי שלמדנו בכיתה על ידי רש

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

. n,…,1,2קוחים מהתחום זמן במבנה הנתונים Ω(nlogn)כ " אשר תיקח בסהUnion - וMakeSetת פעולות ראו דוגמה של סדר

. כלשהוn -הדוגמה צריכה להיות כללית ל, ב

:2אלה

לה

שימו ל. הזה ש

כתוצאה . שחורמדי פעם צובעים משבצת בלוח ב. n×n בגודל

פרושה צלע אינה נוגעת (2,4) בדוגמה המשבצת ;שותפת

Aנתון לוח משבצות : נתבונן במשחק הבאלוח אם בשייכות לאותה צורהאנחנו נאמר ששתי משבצות שחורות . מכך נוצרות בלוח צורות שונות

נגיעה. הנוגעות זו בזושחורות ה על ידי סדרת משבצות יאפשר להגיע מאחת המשבצות לשני . (3,3) במשבצת מ

.

4321

, הלוח :דוגמה : צורותשלושיש בלוח . , (3,3) הוא בגודל (1,3), (1,4), (2,4) (1,1), (2,1) 4×4 A

1

2

3

4

: הציעו מבנה נותנים שיתמוך בפעולות הבאות ביעילות טובה ככל האפשר

• Init( ) – בזמן , כך שכל המשבצות יהיו לבנות אתחול המבנהO(n2) . • SameShape(x1, y1, x2, y2) – אם זוג המשבצות 1 מחזירים (x1,y1)ו - (x2,y2) שייכות

.0ואחרת מחזירים , לאותה צורה בלוח • Color(x,y) –את המשבצת שחור צובעים ב (x,y) , כלומר המשבצת שנמצאת בשורה

. y - ובעמודה הx - ה

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

:3שאלה שימו לב ( כלשהו תחוםג קבוצות זרות שאיבריהן לקוחים מלייצומופשט טיפוס נתונים תארו מימוש של

). n ,… ,1שהמימוש שנתנו בכיתה הסתמך על כך שהנתונים הם מהתחום .במקרה הגרוע O(log n)היא ) MakeSetכולל (היעילות הנדרשת לכל אחת מהפעולות

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

.ונתחו את זמן הריצה שלהן

- 23 -

Page 26: :ÌÈ Â˙ È ·Ó ÌÈÏÈ‚¯˙ ˙¯·ÂÁomer/DataStructureHints/CurrentExercises.pdf · åôé -à" ú ìù úéîã÷àä äììëîä áùçîä éòãîì äîâîä:ÌÈ

:4שאלה כך , n,...,1,2חדש לייצוג קבוצות זרות שאיבריהן לקוחים מהתחום ברצוננו לממש טיפוס נתונים

:בצע את הפעולות הבאות

Unionאם לא בוצעו פעולות . ודם ). לא תעשה דברDeunionאז הפונקציה , קודם לכן

שיתאפשר ל

האיבר . יוצרת קבוצה חדשה בעלת איבר יחיד x x – Makeset(x) . הינו נציג הקבוצה x,y מאחדת את שתי הקבוצות שנציגיהן – Union(x,y) . x מחזירה את נציג הקבוצה שאליה משתייך - Find(x) .

Union- מבטלת את השפעתה של פעולת ה- Deunion()צעה האחרונה שבו Union קריאות לפונקציה יבטלו את - פעולות הלכן ( k kבהנחה, האחרונות

kUnion פעולות ק שבוצעו כמובן לפחות

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

.ונתחו את זמן הריצה שלהן

- 24 -