( n) ( ) ( ) שאלה 1: שאלה 2: שאלה 3: (n 5) = Θ. ב. אם f 1, f 2, g 1, g 2. .g 1 *g 2 = Ω(f 1 *f 2 ) , g. ג. ) n.n! = θ(n*2. n) f ( אז ד. אם ה. אם ו.

Σχετικά έγγραφα
(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

השאלות..h(k) = k mod m

áùçîä éòãîì äîâîä ÌÈÏÈ ÂÁ

חורף תש''ע פתרון בחינה סופית מועד א'

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

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

מבני נתונים ויעילות אלגוריתמים

השאלות ידי מצביעים לילדים.

מיונים א': מיון (Sorting) HeapSort. QuickSort תור עדיפויות / ערימה

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

סדרות - תרגילים הכנה לבגרות 5 יח"ל

מבני נתונים ואלגוריתמים תרגול #3 נושאים: תור קדימויות/ערימה, עצים

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

2 יח"ל ) השלמה ל - 5 יח"ל) (50 נקודות) מעבר חוקי, ו-'שקר' אחרת.

תרגול פעולות מומצאות 3

מבני נתונים מבחן מועד ב' סמסטר חורף תשס"ו

מבני נתונים ויעילות אלגוריתמים

תרגיל 13 משפטי רול ולגראנז הערות

גבול ורציפות של פונקציה סקלרית שאלות נוספות

Logic and Set Theory for Comp. Sci.

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

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

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

םינותנ ינבמ 3 ליגרתמ תולאשל המוד תולאש טסל תונורתפ תולאשה

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

I. גבולות. x 0. מתקיים L < ε. lim אם ורק אם. ( x) = 1. lim = 1. lim. x x ( ) הפונקציה נגזרות Δ 0. x Δx

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

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

3-9 - a < x < a, a < x < a

מבני נתונים 08a תרגול 8 14/2/2008 המשך ערמות ליאור שפירא

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

ל הזכויות שמורות לדפנה וסטרייך

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE סמסטר אביב תשס"ו מס' סטודנט:

מבני נתונים מבחן מועד א' סמסטר אביב תשס"ו

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

תוכן הפרק: ,best case, average case דוגמאות 1. זמן - נמדד באמצעות מס' פעולות סיבוכיות, דוגמאות, שיפור בפקטור קבוע האלגוריתם. וגודלם. איטרטיביים. לקלט.

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

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

מתמטיקה בדידה תרגול מס' 5

gcd 24,15 = 3 3 =

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

סיכום- בעיות מינימוםמקסימום - שאלון 806

מבני נתונים (234218) 1

{ : Halts on every input}

תרגול מס' 6 פתרון מערכת משוואות ליניארית

דוגמה: יהי T עץ בינארי כפי שמתואר בציור הבא:

x a x n D f (iii) x n a ,Cauchy

אלגברה ליניארית (1) - תרגיל 6

שאלה 1 V AB פתרון AB 30 R3 20 R

אסימפטוטיים תוכנית הקורס עצי AVL עצי 2-3 עצי דרגות סיבוכיות משוערכת מיון מיון שימושים: גרפים איסוף אשפה

תורת הגרפים - סימונים

עצי 2-3 תזכורת: בנים. דוגמאות: Chapter 19: B trees ( ) Chapter 15: Augmenting data structures ( )

חלק א' שאלה 3. a=3, b=2, k=0 3. T ( n) היותר H /m.

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

בחינה בסיבוכיות עמר ברקמן, ישי חביב מדבקית ברקוד

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

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

מבני נתונים עצים שיעור 7

מבני נתונים מבחן מועד א' סמסטר חורף תשס"ו

תורת הקבוצות תרגיל בית 2 פתרונות

תאריך עדכון אחרון: 27 בפברואר ניתוח לשיעורין analysis) (amortized הוא טכניקה לניתוח זמן ריצה לסדרת פעולות, אשר מאפשר קבלת

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

עץץץץ AVL. עץ AVL הוא עץ חיפוש בינארי שמקיים את התנאי הבא: לכל צומת x בעץ גורם האיזון של x הוא 1, 0, או 1-. הגדרה: במילים אחרות: לכל צומת x בעץ,

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

רשימת משפטים והגדרות

קבוצה היא שם כללי לתיאור אוסף כלשהו של איברים.

תרגיל 7 פונקציות טריגונומטריות הערות

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

פתרון תרגיל בית 6 מבוא לתורת החבורות סמסטר א תשע ז

' 2 סמ ליגרת ןורתפ םיפרגה תרותב םימתירוגלא דדצ 1 : הלאש ןורתפ רבסה תורעה

מתמטיקה בדידה תרגול מס' 12

סיכום בנושא של דיפרנציאביליות ונגזרות כיווניות

פתרון תרגיל 4 יסודות מבני נתונים סמסטר א' תשע"ה שאלה 1:

אוטומט סופי דטרמיניסטי מוגדר ע"י החמישייה:


אלגוריתמים 1, סמסטר אביב 2017

אלגברה מודרנית פתרון שיעורי בית 6

מבחן מועד ב' בהצלחה! אנא קיראו היטב את ההוראות שלהלן: ודאו כי כל עמודי הבחינה נמצאים בידכם.

הגדרה: מצבים k -בני-הפרדה

Hash Tables (המשך) ערבול (Hashing)

אינפי - 1 תרגול בינואר 2012

מיון. 1 מיון ערימה (Heapsort) חלק I 1.1 הגדרת ערימה 0.1 הגדרה של המושג מיון מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!

חשבון אינפיניטסימלי 1

s ק"מ קמ"ש מ - A A מ - מ - 5 p vp v=

תרגילים באמצעות Q. תרגיל 2 CD,BF,AE הם גבהים במשולש .ABC הקטעים. ABC D נמצאת על המעגל בין A ל- C כך ש-. AD BF ABC FME

. {e M: x e} מתקיים = 1 x X Y

Nir Adar

םינותנ ינבמ (הנכות ידימלתל)

מבני נתונים ואלגוריתמים תרגול #11

תכנון דינאמי. , p p p והמטריצה המתקבלת היא בגודל

ניהול תמיכה מערכות שלבים: DFfactor=a-1 DFt=an-1 DFeror=a(n-1) (סכום _ הנתונים ( (מספר _ חזרות ( (מספר _ רמות ( (סכום _ ריבועי _ כל _ הנתונים (

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

תוכן עניינים I בעיות מיון 2 1 סימון אסימפטוטי... 2 II מבני נתונים 20 8 מבני נתונים מופשטים משפט האב גרפים... 37

לוגיקה ותורת הקבוצות מבחן סופי אביב תשע"ב (2012) דפי עזר

מתמטיקה בדידה תרגול מס' 13

פרק 13 רקורסיה רקורסיה רקורסיה רקורסיות פשוטות: חישוב עצרת. תמונת המחסנית ב-() factorial רקורסיות פשוטות: פיבונאצ'י

Transcript:

נתונים מבני לקט שאלות ממבחנים - 0 -

ניתוח סדרי גודל ב. שאלה 1: הוכיחו או הפריכו את הטענות הבאות ישירות על ידי שימוש בהגדרות 3 3 א. ) =Ω( log( ) =Ω( ) ( ) log(log ) = O ( 5) log (+ 5) = O() 6 ( 10 ) =Θ( 10 ) ג. ד. ה. ( ) log( ) =Ω log( ). log( + 3 ) = Θ(log( )) ( ) =Θ log(!) =Θ( log( )) ו. ז. ח. ט.. הוכיחו עפ"י הגדרה את החסם שמצאתם. f( ) = 1 + שאלה : מצאו חסם הדוק (בסדר גודל) עבור הפונקציה ) 1 f =O(g ),f 1 =O(g אז ) 1 f =O(g ),f 1 =O(g אז שאלה 3: הוכיחו או הפריכו: א. אם f 1, f, g 1, g.g 1 *g = Ω(f 1 *f ) ב. אם f 1, f, g 1, g f.f g 1 = O(g 1 ) פונקציות חיוביות עולות לאינסוף המקיימות: פונקציות חיוביות עולות לאינסוף המקיימות: f ( g ) f = Θ( ) 1 = Θ 1, g. f ( ) = Ο ( ) f ( ) = Ο ( ) ) f ( אז = ג. ).! = θ(* i= 0 f ( ) log( ) = Ο i ( ) ד. אם ה. אם ו. אם אז פונקציות חיוביות עולות לאינסוף המקיימות: אז f 1 f, g1,, g f1 f g = Ο g 1-1 -

. f ( ) =Ο( h( )) שאלה 4: תהיינה, gh f, פונקציות מ- הוכיחו ישירות מההגדרה: אם + ל-. f ( ) = Ο( g( )) ו-(( ( h g ( ) =Ο( אז f () i =Ο g() i i= 1 i= 1, אזי f = Ο( g) שאלה 5: הוכיחו כי אם 1 i i= log( ). f( ) = f ( ) = Θ(log( )) f ( ) =Θ( log( )) f ( ) = Θ( log( )) אף אחת מהתשובות אינה נכונה.. f ( ) = log( i) i= log( ). f ( ) =Θ( log(log( ))). f ( ) =Θ( log( )). f ( ) = Θ( log( )). f ( ) = Θ( log(log( ))) אף אחת מהתשובות אינה נכונה. שאלה 6: 1) נגדיר: א) ב) ג) ד) ) נגדיר: א) ב) ג) ד) ה) it fuc (it ){ it sum, i, j,k; שאלה 7: תנו חסם הדוק לזמן ריצת הפונקציות הבאות: א. sum = 0; for(i= log( ) ; i<= ; i++) for(j=1; j<= i; j++) for(k=1; k<=*; k+= i*i) sum++; retur sum; - -

it fuc (it ){ it sum, i, j,k; ב. sum = 0; for(i = 1; i ; i *= ) for(j = 1; j i; j *= ) for(k = 1; k <= j; k *= ) sum++; retur sum; ci>>; for(i=; i>=1; i--){ x=1; while (x<i) x *= ; while (x>) x = sqrt(x); ג. it fuc (it ){ it sum, i, j; sum = 0; for(i = 1; i <= log( ) ; i++) for(j = 0; j < ; j+=i) sum++; ד. for(i = 1; i< ; i++){ j = i; while(j > ){ sum++; j = j ; retur sum; הערה: הניחו שכל קריאה לפונקציות,log ו- (1)Θ. לוקחת - 3 -

it fuc (it ){ it sum, i, j, k, p; sum = 0; ה. for(i = 1; i <= ; i++) for(j = 0; j < ; j+=i) sum++; for(i = 1; i<= log( ) ; i++) for(j = 1; j <= ; j++) for(k = 1; k <= i; k++) for(p = 1; p <= k; p++) sum++; retur sum; הערה: הניחו שכל קריאה לפונקציה, log לוקחת (1)Θ. it fuc (it ){ it sum, i, j, jump; ו. sum = 0; jump = 1; for(i = 0; i < log( ) ; i++){ for(j = i log( ) ; j < ( i+ 1) log( ) ; j+=jump) sum += j; jump *= ; retur sum;. Θ(1) הערות: הניחו שכל קריאה לפונקציה,log הניחו ש- מתחלק ב- ( log( לוקחת ללא שארית. it fuc (it ){ it sum, i, j,k; ז. sum = 0; for(i= log( ) ; i<= ; i++) for(j=1; j<= i; j++) for(k=1; k<=*; k+= i*i) sum++; retur sum; - 4 -

שאלה 8: ביום סגרירי עם ראות לקוייה, הלכו אב ובנו, בן השלוש, לים. האב לרגע איבד ריכוז, ולא שם עין על הילד. לפתע גילה שבנו אבד. הוא הסתכל שמאלה, ואז ימינה, אך לא ראה את הבן. האב אובד עצות, לא ידע אם להתחיל ללכת לכוון צפון או דרום, וחשב על האלגוריתם הבא (למציאת הבן האובד): i 1.1. כל עוד לא נמצא הבן.1 צעד i צעדים לכוון דרום.. חזור לנקודת המוצא..3 צעד i צעדים לכוון צפון..4 חזור לנקודת המוצא. i i + 1.5 הניחו שמנקודת המוצא הילד נע לאחד הכוונים (צפון או דרום), ומרגע תחילת החיפוש הוא נותר במקומו, עד שאביו מוצא אותו. א) נתחו את יעילות האלגוריתם כפונקציה של, כאשר בה מצא האב את בנו. הוא מספר הצעדים בין נקודת המוצא לנקודה ב) תארו אלגוריתם לפיו ימצא האב את בנו ביעילות של.O() ג) נתחו את יעילות האלגוריתם שנתתם כדי להראות שהיעילות היא אכן.O() שאלה 9: נתון מערך A של איברים. האלגוריתם הבא (נקרא לו M) ממיין אותו: אם < 3 I) נמיין את A ישירות. ונסיים. אחרת: I) נחלק את A ל- 3 תתי מערכים A, A1, ו- A3 בגודל 3/ כל אחד..Bubble Sort בעזרת אלגוריתם נמיין את A1 (II.Heap Sort בעזרת אלגוריתם נמיין את A (III IV )נמיין את A3 ברקורסיה. V) נמזג את A, A1, ו- A3 למערך ממוין בעזרת אלגוריתם הפועל בזמן ליניארי במספר האיברים הכולל. א. תארו נוסחה רקורסיבית המתארת את זמן הריצה של האלגוריתם M. ב. פתרו את הנוסחה הרקורסיבית שהגעתם אליה בעזרת משפט האב Theorem).(Master - 5 -

שאלה 10: חשבו חסם הדוק במונחי Θ לזמן הריצה של הפונקציה כאשר היא נקראת עם הפרמטרים = 0,left ו- 1 right = לפי ההנחיות הבאות: כתבו נוסחת נסיגה לזמן הריצה ופתרו אותה על ידי הצבה חוזרת. הסבירו תשובתכם. אין צורך להוכיח את נכונות הפתרון באינדוקציה, אולם יש להראות את השלבים השונים של ההצבה החוזרת. void Sort(it A[], it left, it right) { it p; If ( left < right) { p = (right left + )/3; Sort(A,left, left + p 1); Sort(A, left + p, left + *p 1); MergeSort(A, left + *p, right); Merge3(A, left, left + p, left + *p, right); MergeSort(A,i,j) היא הפונקציה שראינו בכיתה שממיינת את המערך A בין הגבולות i ל- j בעזרת אלגוריתם MergeSort שלמדנו. Merge3(A,i,j,k,m) היא פונקציה הממזגת שלושה חלקים ממוינים הנמצאים בין הגבולות i ל- 1,j j ל-,k 1 ו- k ל-,m ויעילותה ליניארית במספר הנתונים הכולל שהיא ממזגת. (אם אחד החלקים ריק אז הפונקציה ממזגת את שני החלקים הנותרים) כאשר: שאלה 11: האלגוריתם הבא ממיין איברים שונים הנתונים במערך A (תוך שימוש במערך עזר B, בגודל ). אם 1 המערך ממוין. אחרת,.1. מיין ברקורסיה את חצי המערך השמאלי (כלומר את [/ 1]A)...... מיין בעזרת HeapSort את חצי המערך הימני (כלומר את [.(A[/+1.....3 עבור / i = 1,,.3.1. מצא בעזרת חיפוש בינארי את מספר האיברים בחצי המערך הימני הקטנים מ-.A[i] נסמן מספר זה ב- j. B[i + j] = A[i]..3...4 עבור i = /+1,,.4.1. מצא בעזרת חיפוש בינארי את מספר האיברים בחצי המערך השמאלי הקטנים מ- j. נסמן מספר זה ב-.A[i] B[i / + j] = A[i]..4..5. העתק את מערך B ל- A..1. הערה: באלגוריתם הנ"ל תאי מערך מתחילים באינדקס 1. א) ב) הסבירו בקצרה מהו תפקידם של צעדים.3 ו-.4 באלגוריתם זה. נתחו את יעילות האלגוריתם במקרה הגרוע. - 6 -

שאלה 1: נתונה הפונקציה הרקורסיבית הבאה, המקבלת מערך : של מספרים שלמים, ואת גודלו Arr[ ] it fuc (it Arr[], it ){ it i, j, sum=0; if(<=) retur 0; else{ for(i = 0; i < ; i++){ fuc(arr+ i, ); for(j = i ; j < ( i+ 1) ; j++) sum += Arr[j]; retur sum;, לוקח Θ(1). הערה: הניחו שכל חישוב של א. כתבו את נוסחת הנסיגה המתארת את סדר גודל מספר הפעולות שמבצעת הפונקציה הנ"ל. ב. ציירו את עץ הקריאות הרקורסיביות שיתקבל מהרצת הפונקציה הנ"ל. הערה: יש לצייר את העץ כך שתובן צורתו, וכן לפרט נתונים המעידים על מבנה העץ. ג. תנו חסם הדוק לזמן ריצת הפונקציה הנ"ל. יש לתאר את השיקולים (מתוך מבנה העץ שציירתם) מהם הסקתם חסם זה. שאלה 13: נתון פרמטר k. האלגוריתם הבא ממיין מערך A של מספרים (ניתן להניח ש- < k 1 ):, מיין את המערך במיון בועות, וסיים. k אם.1 כל אחד (אם אינו מתחלק במדויק ב- k, k נחלק את A ל- k תת מערכים,A 1,..., A k בגודל. אז תת המערך האחרון יכיל פחות אברים). נמיין ברקורסיה את כל אחד מ- k תתי המערכים. 3. נמזג את A 1 הממויין עם A הממויין; עתה נמזג את תוצאת המיזוג עם A 3 הממוין; עתה נמזג את 4. תוצאת מיזוג זו עם A 4 הממוין, וכך הלאה. באיטרציה האחרונה נמזג את תוצאת המיזוג של k-1 A 1, A,..., A עם A k הממויין. א) כתבו את נוסחת הנסיגה המתארת את סדר גודל מספר הפעולות שמבצע האלגוריתם כפונקציה של ו- k. ב) ציירו את עץ הקריאות הרקורסיביות שיתקבל מהרצת האלגוריתם הערה: יש לצייר את העץ כך שתובן צורתו, וכן לפרט נתונים המעידים על מבנה העץ. ג) תנו חסם הדוק לזמן ריצת האלגוריתם. יש לתאר את השיקולים (מתוך מבנה העץ) מהם הסקתם חסם זה. - 7 -

it Fuc(it* arr, it, it i) { it j, k, sum = 0; שאלה 14: if ( < i) for(j=0; j<; j++) sum += arr[j]; else for(j=0; j<i; j++) { sum += Fuc(arr+ j*(/i), /i, i); for(k = j*(/i);k < (j+1)*(/i); k++) sum += arr[k]; retur sum;.i הינו חזקה של, וכי 1 < i< הערה: הניחו ש: א) כתבו את נוסחת הנסיגה המתארת את סדר גודל מספר הפעולות שמבצע האלגוריתם כפונקציה של ושל i. ב) ציירו את עץ הקריאות הרקורסיביות שיתקבל מהרצת האלגוריתם הערה: יש לצייר את העץ כך שתובן צורתו. כמו כן יש לפרט נתונים המעידים על מבנה העץ, כגון: גובה העץ מספר קודקודים ברמה וכד'. ג) תנו חסם הדוק לזמן ריצת האלגוריתם. יש לתאר את השיקולים (מתוך מבנה העץ) מהם הסקתם חסם זה. ד) עבור איזה ערך של i יתקבל שמן הריצה הגרוע ביותר, כפונקציה של? עבור: =,i זמן הריצה הוא: ( ) ) ( T=Θ עבור איזה ערך של i יתקבל שמן הריצה הטוב ביותר, כפונקציה של? עבור: =,i זמן הריצה הוא: ( ) ) ( T=Θ - 8 -

שאלה 15: יהיו x,y שני מספרים טבעיים גדולים מאוד, כל אחד כולל ספרות, כאשר הספרות הן מהתחום {9,,0,1. שני המספרים האלה נשמרים בשני מערכים הנקראים x ו- y, כאשר כל מערך באורך, והספרה ה- i של כל מספר נמצאת בתא ה- i של המערך (נניח שתאי המערכים ממוספרים מ- 1 ועד ). כך למשל אם = 3456 x אז הוא ייוצג כך במערך [3,4,5,6] = x. בשאלה זו עליכם לבדוק את יעילותם של שלושה אלגוריתמים שתפקידם לחשב את המכפלה.x y בכל המקרים ציינו את יעילות האלגוריתמים כפונקציה של. א) ב) מה תהיה יעילותו של אלגוריתם שיכפיל את x y באופן דומה לשיטה הרגילה שלומדים בביה"ס לכפל מספרים? הסבירו תשובתכם. נחלק את x ואת y לשני חלקים באורך / כפי שאפשר לראות בציור הבא. הניחו בסעיף זה ובסעיף הבא ש- הוא חזקה כלשהי של ולכן מתחלק ב- (אולם אם במקרה אי-זוגי אז חלק אחד יכיל ספרה אחת יותר). / ספרות / ספרות x a b / ספרות / ספרות y c d כאשר a הוא חציו השמאלי של המערך x ו- b חציו הימני של המערך x, ובדומה c חציו השמאלי של המערך y ואילו d חציו הימני של המערך y. / / שימו לב שאז מתקיימות הזהויות: x = a 10 + b, y = c 10 + d דוגמה: אם = 1345678 x אז = 134,a.b = 5678 ואכן מתקיים.x = a 10 4 + b בדומה, אם = 34560000 y אז = 3456,c,d = 0000 ומתקיים.y = c 10 4 + d כעת אפשר לכתוב אלגוריתם רקורסיבי שיחשב את המכפלה x y בעזרת הנוסחה הבאה: / x y = (a c) 10 + (a d + b c) 10 + (b d) כאשר תנאי העצירה הוא = 1 ואז מחשבים את המכפלה ישירות. כתבו נוסחת נסיגה המתארת את יעילות האלגוריתם הרקורסיבי המתבסס על הנוסחה הזאת, ופתרו אותה. הסבירו גם בקצרה כיצד הגעתם אל נוסחת הנסיגה שכתבתם. ג) הפעם שוב נחשב את המכפלה באופן רקורסיבי, אולם הפעם בעזרת הנוסחה הבאה: / x y = (a c) 10 + ((a+ b) (c+ d) a c b d) 10 + (b d) כתבו נוסחת נסיגה המתארת את יעילות האלגוריתם הרקורסיבי היעיל ביותר המיישם את הרעיון בנוסחה זו, הזה ופתרו אותה. הסבירו גם בקצרה כיצד הגעתם אל נוסחת הנסיגה שכתבתם. - 9 -

שאלה 16: נתונה הפונקציה הבאה המוצאת ברקורסיה את הנתון המינימאלי מתוך נתונים במערך. it Mi(it* Arr, it size){ it id, SortedId; if (size == 1) retur Arr[0]; else{ id = Radom(size); SortedId = Partitio(Arr, size, id); if (SortedId == 0) retur Arr[0]; else retur Mi(Arr, SortedId-1); הערות: הפונקציה: um),it Radom(it מקבלת כקלט מספר טבעי,um ומחזירה מספר טבעי אקראי בתחום בין 0 לבין.(um-1) פונקציה זו פועלת ב- (1)Θ. א) ב) ג) הפונקציה: id),it Partitio(it* Arr, it size, it מקבלת כקלט כתובת התחלה של מערך,Arr את גודלו,size ומספר טבעי נוסף id שהוא אינדקס חוקי במערך. הפונקציה מבצעת Partitio על המערך Arr סביב הנתון,Arr[id] ומחזירה את האינדקס בו הוא (הנתון שסביבו בוצע ה- (Partitio נמצא בסוף הפעולה. פונקציה זו פועלת עפ"י האלגוריתם ל- Partitio שהוצג בכיתה. מצאו חסם הדוק לזמן הריצה הגרוע ביותר case) (worst של האלגוריתם. מצאו חסם הדוק לזמן הריצה הטוב ביותר case) (best של האלגוריתם. מצאו חסם הדוק לזמן הריצה הממוצע case) (average של האלגוריתם.. T. T best best () = Ω( () = Ο( ) ) שאלה 17: א. בהינתן אלגוריתם אשר מקיים: מה ניתן להסיק על ()?T worst ב. בהינתן אלגוריתם אשר מקיים: מה ניתן להסיק על?T worst () - 10 -

Algorithm Alg (A, ) { for (i=1 to ) { if ( F1(A,i) == TRUE ) { F(A,i); שאלה 18: נתון אלגוריתם שמקבל כקלט מערך A ואת גודל המערך : כאשר:.FALSE או TRUE ומחזירה i ומספר שלם A היא פונקציה המקבלת כקלט את F1 1) זמן ריצתה הוא c (כאשר c הוא קבוע). i i. ומספר שלם A היא פונקציה המקבלת כקלט את F ) c' זמן ריצתה הוא logi (כאשר c הוא קבוע). תנו חסם עליון וחסם תחתון טובים ככל האפשר על זמן הריצה של האלגוריתם (החסמים אינם חייבים להיות בהכרח הדוקים). נמקו בקצרה את תשובתכם. Algorithm A (it ) { F1(); F(); F3(); שאלה 19: נתון האלגוריתם הבא: האלגוריתם A מקבל כקלט מספר שלם וחיובי, וקורא לשלוש פונקציות,F1.,F F3 בהתאמה, ואת זמן הריצה של כל T1 ( ), T ( ), T3 ( ) נסמן את זמני הריצה של שלש הפונקציות ב-. נתון ש T A () האלגוריתם ב- T 1( ) = Ω( ), T ( ) = Θ( log ), T3 ( ) = O( ) אילו מבין ארבעת החסמים הבאים בהכרח נכונים ואילו אינם בהכרח נכונים? נמקו בקצרה את תשובותיכם. T A T A ( ) = Ω( ) (1) ( ) = Ω( log ) () T A ( ) = Θ( log ) T A ( ) = O( ) (3) (4) - 11 -

שאלה 0: נתון אלגוריתם המקבל שני מערכים המכילים את סדרות המעבר,PreOrder ו- IOrder של עץ בינארי כלשהו ואת גודלם. האלגוריתם משחזר ומחזיר את העץ ממנו התקבלו הסדרות. קלט: ] pre[ מערך המכיל את סדרת ה- PreOrder של עץ בינארי T. T. של עץ בינארי IOrder מערך המכיל את סדרת ה- i[ ] size מספר הצמתים בעץ T (שהוא גם גודל המערכים). פלט: העץ T. האלגוריתם:.1 אם 0) = (size 1.1 החזר את העץ הריק. T.data אחרת: ( pre[0]).1. place ( pre[0] (המקום במערך i בו מופיע. T.left ( pre[1, K, place], i[0, K,( place 1)], place.3 (קרא ברקורסיה עם: T.right 1], size ( pre[ place + 1, K, (קרא ברקורסיה עם:.4 i[ place + 1, K,( size 1)], size place 1 T. החזר את.5 הערות: 1. הסימון: [j, Arr[, i,k מייצג את תת-המערך של Arr מהאינדקס i עד האינדקס j (כולל).. הניחו שפעולת החיפוש בשורה. ממומשת ע"י חיפוש ליניארי. 3. הניחו שהנתונים בעץ שונים זה מזה. pre = [3,1, 4,,6,5,7,8] i = [1,4,3,5,7,6,,8] size = 8 א) מריצים את האלגוריתם עם הקלט: i) ציירו את העץ המתקבל מפלט האלגוריתם: (ii ציירו את עץ הקריאות הרקורסיביות, הנוצר מהרצת האלגוריתם (על הקלט לעיל). בכל צומת בעץ הקריאות ציינו את ערכו של המשתנה size עבור הקריאה אותה הוא מייצג.. Ω ב) מצאו חסם הדוק לזמן הריצה הגרוע ביותר case) (worst של האלגוריתם. הוכיחו גם O וגם.Ω ג) מצאו חסם הדוק לזמן הריצה הטוב ביותר case) (best של האלגוריתם. הוכיחו גם O וגם - 1 -

ניתוח אלגוריתמי חיפוש ומיון שאלה 1: נתון מערך A הכולל מספרים שונים וממוין בסדר עולה. האלגוריתם הבא הוא וריאציה על האלגוריתם לחיפוש בינארי: בכל שלב, במקום לבדוק רק את הערך באינדקס, נבדוק את הערך בכל אחד מהאינדקסים.,,3,...,( k 1) k k k k אם באחד מהם הערך שווה לערך שמחפשים נעצור ונחזיר את האינדקס שלו. אחרת נפעיל את האלגוריתם באופן רקורסיבי רק על הקטע המתאים. מה יהיה זמן הריצה של אלגוריתם זה במקרה הגרוע כפונקציה של ו- k? הוכיחו תשובתכם. A נתונים, שאלה : הוכיחו כי אם A הוא אלגוריתם מיון הפועל במודל ההשוואות, אזי במקרה הגרוע של מיון מבצע )) Ω( log( השוואות. שאלה 3: יהי A מערך של מספרים טבעיים. תת המערך המכיל את כל המספרים הזוגיים מ- A (לפי סדר הופעתם ב- A) ממוין, אך תת המערך המכיל את כל המספרים האי-זוגיים מ- A (לפי סדר הופעתם ב- A) לאו דווקא ממוין. למשל A יכול להיות המערך: 10] [1, 3,, 9, 4, 8, 5, (תת המערך של הזוגיים: 10] [, 4, 8, ממוין, ואילו תת המערך של האי-זוגיים: [5,1],3,9 לא ממוין). הוכיחו שעל מנת למיין מערך כנ"ל במודל ההשוואות נדרשות Ω(log()) השוואות במקרה הגרוע. שאלה 4: נתונים m איברים, { 1,, K,m הלקוחים מתוך התחום פרופ' דמבלדור טוען כי ניתן למיין את הנתונים הנ"ל ביעילות האם יש אמת בטענתו?. Θ( m) במקרה הגרוע. - 13 -

שאלה 5: (1 אלגוריתם Radix Sort ימיין מספרים מהתחום.. 3 0 ב- Θ() זמן ו- Θ() מקום נוסף א) ( Θ( log זמן ו- (1)Θ מקום נוסף ב) ( Θ( log זמן ו- Θ() מקום נוסף ג) ) 3 Θ( זמן ו- ) 3 Θ( מקום נוסף ד) Θ() זמן ו- (1)Θ מקום נוסף ה) ) זמן הריצה במקרה הגרוע של אלגוריתם QS כאשר ה- pivot נבחר באופן רנדומי הוא: ) Θ( log א) Θ() ב) ) Θ( ג) ) Θ( log ד) 3) היעילות הטובה ביותר האפשרית ליישום אלגוריתם Radix Sort הממיין מספרים מהתחום,,K,1, תוך שימוש ב- O() מקום נוסף, היא: א) ).O( ב) )). O ( log(.o( ).O( ) 4) זמן הריצה במקרה הטוב ביותר של אלגוריתם QS כאשר ה- pivot נבחר באופן רנדומי הוא: ).Θ( log א).Θ() ב) ).Θ( ג) ).Θ( log ד) ג) ד) - 14 -

כתיבת אלגוריתמים שאלה 1: כתוב אלגוריתם המקבל כקלט שני מצביעים לשני עצי חיפוש בינאריים T, 1 T, ומחזיר מצביע לעץ חיפוש בינארי T שכולל את כל הנתונים שהופיעו רק באחד משני העצים (או רק ב- T, 1 או רק ב- T). יעילות האלגוריתם צריכה להיות O() כאשר הוא מספר הקדקודים בכל אחד משני העצים. שאלה : נתונים מספרים ממשיים הלקוחים בהתפלגות אחידה מהקטע [0,1]. יש להכריע האם יש ביניהם שני מספרים זהים. תארו אלגוריתם לבעיה שרץ מהר ככל האפשר במקרה הממוצע ומשתמש בזיכרון נוסף בעל סדר גודל מינימאלי. נתחו את סיבוכיות הזמן ואת סיבוכיות הזיכרון הנוסף שהוא דורש. שאלה 3: נתונות שתי ערימות מקסימום, כאשר כל אחת נשמרת במערך כפי שלמדנו בכיתה (נקרא למערכים A ו- B), וכל ערימה מכילה איברים. כתבו אלגוריתם יעיל ככל האפשר במקרה הגרוע שממזג את שתי הערימות לערימת מקסימום יחידה (שתישמר במערך C בגודל ). הערה: מותר להניח שכל האיברים שונים זה מזה. x שאלה 4: נתון עץ חיפוש בינארי T שממומש כרגיל על ידי מצביעים לילדים, כאשר בכל קדקוד נשמר מפתח כלשהו key שהוא מספר שלם. כתבו אלגוריתם שמקבל מצביע לשורש העץ T, ושני ערכים x,y שהם מפתחות של קדקודים כלשהם בעץ, ומחזיר את המפתח שנמצא באב הקדמון המשותף הקרוב ביותר ל- ול- y. מה יעילות האלגוריתם שלכם כפונקציה של מספר הקדקודים בעץ? דוגמה: בעץ הבא, האב הקדמון המשותף הקרוב ביותר ל- 10 ול- 4 הוא 6. ואילו האב הקדמון המשותף הקרוב ביותר ל- 0 ול- 5 הוא 1. 1 6 15 5 8 0 7 10 4-15 -

.a i < b i כמו-כן ידוע שלכל קטע, המספר b i הוא מספר ) i (a i, b כאשר לכל i מתקיים שאלה 5: נתונים קטעים שיכולים להיות כל מספר a i שלם מהקבוצה,...,1, (אבל זה לא בהכרח נכון עבור המספרים ממשי). כתבו אלגוריתם יעיל ככל האפשר שמודיע האם כל הקטעים זרים זה לזה. מה יעילותו של האלגוריתם שלכם כפונקציה של? שאלה 6: נתון עץ בינארי T שבקדקודים שלו יש מספרים שלמים. העץ ממומש על ידי מצביעים לילדים. כתבו אלגוריתם (T OrderedLayers(Tree שידפיס את תוכן הקדקודים של T, רמה אחרי רמה החל מהשורש, כאשר בכל רמה יודפסו המספרים בסדר עולה מהקטן לגדול. דוגמה: עבור העץ הבא יודפס הפלט הבא משמאל לימין,7.,3,9,5,8,10,4 1 7 9 3 8 10 5 4 1 לשם כתיבת האלגוריתם השתמשו בשני תורי קדימויות מינימום,Q1 Q המכילים זוגות מהצורה (נתונים, מפתח), כאשר שדה הנתונים יכול להכיל קדקוד בעץ (או מצביע לקדקוד), ואילו המפתחות הם מספרים שלמים. סדר הקדימויות בכל תור נקבע כמובן לפי שדה המפתח. לכל תור קדימויות כזה מוגדרות הפעולות הבסיסיות הבאות: ) MakeEmpty( לרוקן את התור. ) ( IsEmpty מחזירה 1 אם התור ריק, 0 אחרת. data) Isert(it key, TreeNode מכניסה את הזוג data) (key, לתור הקדימויות. ) Mi( מחזירה את הזוג data) (key, שהמפתח שלו מינימלי מבין כל המפתחות בתור. ) DeleteMi( מורידה מהתור את הזוג data) (key, שהמפתח שלו מינימלי מבין כל המפתחות בתור ומחזירה את הזוג כערך. בנוסף אתם יכולים להשתמש רק בזיכרון נוסף בגודל קבוע (אין להשתמש ברקורסיה). שימו לב, האלגוריתם שלכם ישתמש ב- Q1,Q ובפעולות המוגדרות עליהם כבקופסאות שחורות! נתחו גם את יעילותו של האלגוריתם במקרה הגרוע בשני מימושים אפשריים של תורי הקדימויות: 1. תורי הקדימויות ממומשים על ידי ערימות מינימום.. תורי הקדימויות ממומשים ע"י רשימות מקושרות ממוינות (לפי המפתח). - 16 -

שאלה 7: ערימת מינימום תקרא ערימת מינימום ממוינת חלקית, אם בנוסף (להיותה ערימת מינימום) מתקיים: כל הנתונים ברמה ה- i גדולים מכל הנתונים ברמה ה- (1-i), וזאת לכל 1 i. תזכורת: השורש נמצא ברמה ה- 0. כתבו אלגוריתם יעיל ככל האפשר המקבל מערך ] ]A ואת גודלו. האלגוריתם משנה את סדר הנתונים במערך, כך שבסוף האלגוריתם המערך ייצג ערימת מינימום ממוינת חלקית. נתחו את היעילות של האלגוריתם שכתבתם. k 1 הערות: 1. הניחו שכל הנתונים במערך שונים זה מזה. k. הניחו ש- הוא מספר מהצורה = 1, עבור כלשהו. שאלה 8: כתבו אלגוריתם יעיל ככל האפשר, המקבל כקלט מערך ] Arr[ של מספרים, ואת גודלו. הניחו ש- k הוא מהצורה: = 1. i יופיע המספר ה-,( i = 0,1, K,( k 1) האלגוריתם מייצר ומחזיר מערך בגודל k, אשר במקום ה- ) i בגודלו מבין המספרים במערך.Arr כלומר, בתא 0 של מערך הפלט יהיה הנתון ה- 1 בגודלו (המינימאלי). בתא 1 במערך התוצאה יהיה הנתון ה- בגודלו. בתא במערך התוצאה יהיה הנתון ה- 4 בגודלו, וכך הלאה. שאלה 9: כתבו אלגוריתם (d MakeMaxHeap(Arr[],, המקבל מערך של מספרים, את גודלו, וכן מספר נוסף d. האלגוריתם משנה את סדר האיברים במערך כדי שייצג ערימת מקסימום, אשר ב- d הרמות הראשונות בה יופיעו האברים הגדולים ביותר. על האלגוריתם לרץ בזמן.Θ() הערה: ניתן להניח ש- d קטן ממש מגובה העץ. למשל אם 8] [5, 3,, 1, 4, = Arr לאחר הקריאה לאלגוריתם ) MakeMaxHeap(Arr, 6, Arr יכול להראות 3] [8, 4, 5, 1,, =,Arr ולייצג את ערימת המקסימום הבאה: המערך 4 8 5 בשתי הרמות הראשונות מופיעים 4,5,8 שהם האיברים הגדולים ביותר במערך. 1 3-17 -

struct Tode{ struct ArrayData{ it data; it x; Tode* left; it y; Tode* right; ; ; שאלה 10: נתונים המבנים הבאים: ArrayData* What(Tode* root, it* size){ it um; ArrayData* resarr; כמו כן, נתונה הפונקציה הבאה: um = NumNodes(root); resarr = ew ArrayData[um]; *size = um; Ukow(root, 0, resarr); retur resarr; הפונקציה הנ"ל מקבלת מצביע root לשורש של עץ בינארי, ומייצרת מערך (של אברים מטיפוס,(ArrayData שגודלו מספר הצמתים בעץ. הפונקציה ממלאת את המערך בערכים, ומעדכנת את גודלו דרך המשתנה.size הפונקציה what עושה שימוש בפונקצית העזר,Ukow המוגדרת באופן הבא: it Ukow(TNODE* root, it y, ArrayData* resarr){ it sizel, sizer; if (root = NULL) retur 0; else{ (resarr[0]).x = root->data; (resarr[0]).y = y; sizel = Ukow(root->left, y+1, resarr+1); sizer = Ukow(root->right, y+1, resarr+1+sizel); retur (1 + sizel + sizer); הפונקציה Ukow מקבלת מצביע root לשורש של עץ בינארי, פרמטר קלט נוסף y, ומערך (בגודל מספיק).resArr הפונקציה ממלאת את המערך resarr בערכים (כל אחד מטיפוס.(ArrayData משיקולי יעילות, הפונקציה Ukow מחזירה את מספר הצמתים בעץ עליו מצביע.root - 18 -

א נתון העץ הבא: root 8 1 3 5 4 What(root) מלאו את המערך המתקבל כתוצאה מהרצת i) x y Idex: 0 1 3 4 5 T הערכים במערך הפלט של הפונקציה,what כפונקציה של העץ (ii תארו באופן כללי את חוקיות אותו היא מקבלת כקלט. ב היעזרו במחסנית על מנת לכתוב.Ukow גרסה איטרטיבית (ללא רקורסיה), המחקה את ריצת הפונקציה הערות:.1..3 הקפידו לכתוב אלגוריתם ברור וחד משמעי. ניתן לממש את האלגוריתם בשפה עילית,(C++/C) או בפסיאודו-קוד (כפי שהוגדר בכתה). השתמשו במחסנית כבקופסה שחורה. ג כתבו את הפונקציה 1- what המבצעת את הפעולה ההפוכה של הפונקציה what (מתחילת השאלה): Tode* what -1 (ArrayData* Arr, it size); הפונקציה 1- what מקבלת מערך Arr של אברים מטיפוס,ArrayData ואת גודלו.size הפונקציה משחזרת ומחזירה עץ בינארי T, כך שאם נפעיל עליו את הפונקציה what נקבל חזרה את המערך Arr (שימו לב שייתכנו מערכי קלט, אשר עבורם יש יותר מעץ אחד כזה). - 19 -

שאלה 11: תארו אלגוריתם ליניארי המקבל שני עצי,AVL כל אחד עם איברים, ויוצר מהם עץ AVL המכיל את כל האיברים (הניחו שכל האיברים שונים זה מזה). שאלה 1: נתון מערך של מספרים שונים ] A = [a 1, a,..., a המופיעים בסדר ממוין A. ברצוננו לייצר ולהחזיר עץ -3 חוקי, שהעלים בו יהיו נתוני המערך ). a a K a (כלומר, 1 כתבו אלגוריתם יעיל ככל האפשר לפתרון הבעיה. לשם כתיבת האלגוריתם השתמשו בשני תורים. על תור ניתן להפעיל את הפעולות הבאות: ) Make-Empty(,EQueue(data),Is-Empty(,( ),DeQueue(,Frot( ) וכן את הפעולה ) NumElems( שמחזירה את מספר הנתונים בתור ברגע הפעלתה. בנוסף למערך A, לשני התורים ולעץ אותו אתם מייצרים אתם יכולים להשתמש רק בזיכרון נוסף בגודל קבוע (אין להשתמש ברקורסיה ואין לשנות את המערך A). למשל עבור המערך 15] [1, 3, 4, 6, 7, 8, 8, 9, 10, 13, =,A יכול להיווצר העץ: 1 3 4 6 7 8 8 9 10 13 15 הערה: בכל צומת פנימי בעץ אותו אתם מייצרים יש לעדכן רק את השדות:,Right-Child, Mid-Child, Left-Child המכילים מצביעים לילד השמאלי, לילד האמצעי ולילד הימני בהתאמה (אין צורך לעדכן את השדות.(mi1, mi, mi3 נתחו את יעילותו של האלגוריתם במקרה הגרוע בהנחה שכל פעולת תור לוקחת (1)Θ זמן. נתחו את הזיכרון הנדרש לאלגוריתם. - 0 -

שאלה 13: נתון מערך A[] הכולל מספרים שלמים כלשהם, ומספר k 1, כאשר,k הם חזקות של. הניחו שתאי המערך ממוספרים ב-,,1, (ולא ב- 1-,...,1,0 כפי שמקובל ב- C). כמו-כן נתונות הפונקציות הבאות: i) it Select(it A[], it left, it right, it הפונקציה מחזירה את האיבר ה- i בגודלו בתת-מערך של A שבין הגבולות left ו-.right אם אין כזה איבר הפונקציה תחזיר 1. i) void Partitio(it A[], it left, it right, it x, it ההנחה היא ש- x הוא האיבר ה- i בגודלו בתת-מערך של A בין הגבולות left ל-.right הפונקציה מסדרת את האיברים בתת-מערך שנמצא בין הגבולות left ל- right באופן הבא: היא שמה את x במקומו ה- 1 i left + בתת-מערך הזה, את כל המספרים הקטנים (או שווים) ממנו משמאלו, ואת כל הגדולים (או שווים) ממנו מימינו (הפונקציה אינה משנה את יתר המערך). הנחה: היעילות של הפונקציות Select, Parititio היא (1 + Θ(right left במקרה הגרוע. דוגמה: יהיה = 8 ו- 15) (7, 1, 5, 9, 4, 7, 1, =.A אז: Select(A,1,8,6) תחזיר את 1, כי זה האיבר ה- 6 בגודלו ב- A בין הגבולות 1 ל- 8..A = (7, 5, 9, 4, 1, 1, 7, 15) למשל באופן הבא: A תשנה את המערך Partitio(A,1,8,1, 6) ואם שוב נתון 15) (7, 1, 5, 9, 4, 7, 1, = A אז: (,5,3 Select(A, תחזיר את 9 כי הוא האיבר ה- 3 בגודלו בתת-המערך (1,5,9,4). ואם נקרא ל- Partitio(A,,5,9,3) אז המערך A ישונה למשל כך: (7,5,4,9,1,7,1,15) = A. (תת המערך ש- Partitio שינתה מודגש). יש להשתמש בפונקציות Select ו- Partitio כבקופסאות שחורות. כתבו אלגוריתם יעיל ככל האפשר במקרה הגרוע המשתמש בפונקציות, Select, Partitio כדי לסדר את המספרים במערך A באופן הבא: האיבר ה- k בגודלו יהיה בתא,A[k] האיבר ה- k בגודלו יהיה בתא,A[k] וכך הלאה, כאשר באופן כללי האיבר ה- ik בגודלו יהיה בתא,A[ik] לכל i 1. k כמו-כן, כל המספרים שקטנים (או שווים) מהאיבר ה- k בגודלו יהיו בתאים A[1..k 1] (לאו דווקא ממוינים), האיברים שגדולים (או שווים) מהאיבר ה- k וקטנים מהאיבר ה- k בגודלו יהיו בתאים A[k+1..,k 1] וכך הלאה. מה יעילות הפונקציה שכתבתם במקרה הגרוע כפונקציה של ו- k? הוכיחו תשובתכם. - 1 -

שאלה 14: נתונה הפונקציה הבאה המיישמת ברקורסיה את אלגוריתם המיון :MergeSort void MergeSort(it* arr, it size){ it mid, i; it* res; if (size == 1) retur; else{ mid = size/; MergeSort(arr, mid); MergeSort(arr+mid, size-mid); res = Merge(arr, mid, arr+mid, size-mid); for(i=0; i<size; i++) arr[i] = res[i]; delete [ ]res; הפונקציה מקבלת כתובת התחלה של מערך המכיל מספרים שלמים, ואת גודלו. הפונקציה משנה את סדר המספרים במערך, כך שבסופה יהיו בסדר ממוין. הפונקציה משתמשת בפונקצית העזר: it* Merge(it* A1, it s1, it* A, it s); המקבלת שני מערכים ממוינים ואת גודלם. הפונקציה ממזגת את שני המערכים הנ"ל, לתוך מערך חדש (שהיא מקצה). היעזרו במחסנית על מנת לכתוב גרסה איטרטיבית (ללא רקורסיה), המחכה את ריצת הפונקציה לעיל. הערות:.4.5.6.7 הקפידו לכתוב אלגוריתם ברור וחד משמעי. ניתן לממש את האלגוריתם בשפה עילית,(C++/C) או בפסאודו-קוד (כפי שהוגדר בכתה). יש להשתמש במחסנית כבקופסה שחורה. השתמשו בפונקציה,Merge עפ"י הממשק המוגדר לה. struct StackData{ הגדרת הטיפוס של הנתונים שיכנסו למחסנית: ; - -

שאלה 15: נתונה ערימת מקסימום המחזיקה מספרים ממשיים שונים מטווח לא ידוע, אשר ממומשת ע"י מצביעים (לכל צומת יש גישה לבן השמאלי שלו, לבן הימני שלו, ול-.(data נתעניין בחסימת גודלו של האיבר ה- k בגודלו בערימה (האיבר ה- 1 בגודלו בערימה הוא המקסימלי, כמובן). כתוב אלגוריתם ליישום הפונקציה: bool IsBiggerThaKth( HEAP root, it, it k, it x) הפונקציה מקבלת ערימת מקסימום,root את גודלה, ועוד שני מספרים x, ו- k. על הפונקציה להחזיר true האיבר ה- k בגודלו בערימה קטן או שווה ל- x. וכן:,=6 x=,k=3 9 כך למשל אם הערימה: 7 1 4 6 0 הפונקציה תחזיר,false היות שהאיבר השלישי בגודלו הוא 6 אך הוא אינו קטן או שווה ל-. דרישות מימוש: 1. על האלגוריתם לרוץ ביעילות O(k) (בלי תלות ב- ).. על הפונקציה להשתמש בתור Q וב- (1)θ זיכרון נוסף בלבד. אין צורך לממש את התור, הוא מספק את הפעולות הבאות בלבד: MakeQ(size) יוצרת תור ריק שיכול להכיל לכל היותר size נתונים. ) IsEmpty( מחזירה true אם"ם התור ריק..(data לתור (אין חשיבות לטיפוס של data מכניסה את EQ(data) ) DeQ( מוציאה את האיבר שבראש התור, ומחזירה אותו. ) Qsize( מחזירה את מספר האברים הממתינים בתור. רמז: אם מגלים k אברים גדולים מ- x ניתן לקבוע בוודאות שהאיבר ה- k בגודלו בערימה לא קטן או שווה ל- x. - 3 -

שאלה 16: הניחו שמוגדר לכם טיפוס נתונים המופשט תור Queue עם הפעולות הרגילות: ) Make-Empty( Frot( ),Dequeue( ),Equeue(data), Is-Empty( ), כפי שהוגדרו בכיתה. א) כתבו פונקציה לא רקורסיבית: Merge(Queue Q1, it 1, Queue Q, it ) הפונקציה מקבלת כקלט שני תורים,Q1, Q ואת מספר הנתונים בכל אחד מהם 1 ו- בהתאמה. בכל אחד משני התורים יש סדרה ממוינת של מספרים כך שהמספר הקטן נמצא בראש התור והמספר הגדול בסוף התור. בסיום הפונקציה יכיל התור Q1 סדרה ממוינת המכילה את כל המספרים משני התורים, ואילו התור Q יהיה ריק. הפונקציה שלכם יכולה להשתמש פרט לתורים רק בזיכרון נוסף בגודל קבוע. נתחו את יעילות הפונקציה שלכם. ב) השתמשו בפונקציה שכתבתם בסעיף א', על מנת לכתוב את הפונקציה הלא רקורסיבית הבאה: Sort(Queue Q, it ) הפונקציה מקבלת כקלט תור Q, ואת מספר הנתונים בו. התור מכיל סדרה כלשהי של מספרים. הפונקציה ממיינת את המספרים תוך שימוש בשני תורי עזר ובזיכרון נוסף בגודל קבוע. בסיום הפונקציה יכיל התור Q את הקלט הממוין, כאשר בראש התור נמצא הנתון המינימלי. על הפונקציה לרוץ ביעילות ((. )Θ log( שאלה 17: נתון מערך של מספרים שונים ],A = [a 1, a,..., a ונתון מערך ריק L באורך. עבור כל איבר a i ב- A יש לחשב לתוך L[i] את האינדקס במערך A של האיבר הקרוב ביותר ל- a i משמאלו שקטן ממנו. במילים אחרות L[i] = max {j j < i a j < a i אם אין אינדקס כזה (כלומר כל האיברים i-1 a 1, a,..., a גדולים מ- (a i אז -1 =.L[i] 3 6 8 7 10 1 9 11-1 1-1 4 5 6 5 8 למשל אם A הוא המערך אז המערך L הוא שימו לב שהאינדקסים במערך A מתחילים ב- 1. כתבו אלגוריתם יעיל ככל האפשר לפתרון הבעיה. לשם כתיבת האלגוריתם השתמשו במחסנית S שאבריה הם אינדקסים במערך. על מחסנית ניתן להפעיל את הפעולות הבאות: ) Make-Empty( Is-, ),Empty(,Pop( ),Push(data) וכן ) Top( שמחזירה את הערך שבראש המחסנית בלי להורידו. בנוסף למערכים A ו- L ולמחסנית אתם יכולים להשתמש רק בזיכרון נוסף בגודל קבוע (אין להשתמש ברקורסיה ואין לשנות את המערך A). רמז: אפשר לבצע זאת ב- Θ() זמן ותוך מעבר אחד על המערך A החל מהאיבר השני ) a). למטרת אתחול יש לבצע 1- = [1]L ו- (1).Push - 4 -

שאלה 18: כתוב פונקציה יעילה ככל שתוכל המקבלת מערך המכיל מספרים שלמים כלשהם, ועץ בינארי עם צמתים מסודרים בסדר כלשהו (העץ לאו דווקא מלא). בעץ זה הערכים בצמתים לא מעודכנים. על הפונקציה לעדכן את ערכי הצמתים בעץ כך שיתקבל עץ חיפוש בינארי, המכיל את כל אברי המערך. שים לב הפונקציה לא תשנה את מבנה העץ. למשל, אם המערך הוא: [8,3],1, והעץ הוא מהמבנה: 3 על הפונקציה לעדכן לו את הערכים באופן הבא: 8 1 א) הוכיחו שיש סידור חוקי יחיד של הצמתים בעץ. ב) כתבו פסאודו קוד עבור הפונקציה הנדרשת. ג) הוכח שהאלגוריתם שמצאת הוא היעיל ביותר. שאלה 19: כתוב אלגוריתם למציאת מספר הצמתים בעץ בינארי כמעט מלא. it FidNumOfNodes( Tree* T) כאשר T הוא עץ כמעט מלא המיוצג כך שלכל צומת יש גישה רק לבניו (אין לו גישה לאבא). על האלגוריתם לרוץ ביעילות ) () )θ, log כאשר הוא מספר הצמתים ב- T. כך למשל אם T הוא העץ: הפונקציה תחזיר 6. שאלה 0: כתוב פונקציה המקבלת מערך המכיל מספרים ממשיים (תחום המספרים לא ידוע) עם הרבה כפילויות. ידוע שבמערך מספר המספרים השונים הוא ) log(), )Ο על הפונקציה למיין את המערך תוך שימוש ב- ) log(log()) Ο( השוואות. כתוב פסאודו קוד עבור הפונקציה הנדרשת. - 5 -

שאלה 1: נתונה ערמת מקסימום בגודל במערך A[1..max] כאשר. <max שימו לב: המערך מתחיל מאינדקס 1 ולא מאינדקס 0. בהינתן אינדקס i במערך, כתבו נוסחאות לחישוב האינדקסים במערך של ילדיו של i שנסמנם Left(i) ו-,Right(i) של ההורה של i שנסמנו Paret(i) ושל סבו של i שנסמנו Gradparet(i) (כלומר (1)Θ. זמן חישוב הנוסחאות צריך להיות.(Paret(i) הוא ההורה של Gradparet(i) Left (i) = Right (i) = Paret (i) = Gradparet (i) = תארו אלגוריתם (x FidIsertIdex(it המקבל מספר x ומחזיר את המקום במערך A אליו היה נכנס x בסופה של פעולת הערמה Isert(x) לו בצענו אותה. האלגוריתם FidIsertIdex צריך לרוץ בזמן ((. Ο log(log( הניחו לשם ביצוע האלגוריתם שחישוב כל חזקה של לוקח (1)Θ זמן. הסבירו גם ( ) מדוע האלגוריתם שלכם רץ בזמן הנדרש. אלגוריתם ל- FidIsertIdex - 6 -

ניתוח מבני נתונים שאלה 1: נתון קובץ המכיל תווים, כל תו מופיע בקובץ בדיוק פעם אחת. מה אורך הקובץ המקודד אם הקוד המותאם לתווים נוצר ע"י אלגוריתם הפמן. הערה: הניחו ש- הוא חזקה של. שאלה : מצאו שכיחויות ל- התווים {,,K,1, כך שיתקבל מהם עץ הפמן בגובה 1-. הערה: כזכור, גובה של עץ הוא מספר הקשתות במסלול הארוך ביותר מהשורש לעלה.. f : C שאלה 3: נתונן א"ב, C ונתונה פונקצית שכיחויות א. השלימו את ההגדרה הבאה: הגדרה: משקל של עץ T המייצג קוד פרפיקסי code) (prefix של הא"ב C הוא: B( T ) = ב. השלימו את ההגדרה הבאה: הגדרה: עץ T המייצג קוד פרפיקסי code) (prefix של הא"ב C ייקרא אופטימאלי, אם c c 1 שתי אותיות בא"ב, C ששכיחותם מינימאלית. הוכיחו שקיים עץ אופטימאלי בו c1, ג. יהיו c הם אחים ברמה המקסימאלית. ו- שאלה 4: הוכיחו או הפריכו כל אחת מהטענות הבאות: (1) יהי T העץ של ערימת מינימום. אם x ברמה i ב- T ו- y ברמה 1+ i (כלומר ברמה מתחת ל- x ) אז. x y בהכרח () יהי x קדקוד בעץ חיפוש בינארי שיש לו ילד ימני. אז לקדקוד בו נמצא הערך העוקב ל- x אין ילד שמאלי (העוקב של x הוא המספר הבא מיד אחרי x אם נתבונן על סדרת המספרים בעץ בסדר עולה). (3) לכל שני עלים שערכיהם עוקבים בעץ -3 יש הורה משותף או שההורים שלהם אחים. מחיקה בעץ -3 גורמת לגובה העץ לקטון אם ורק אם לפני המחיקה לכל קדקוד יש רק ילדים. (4) - 7 -

שאלה 5: השלימו: בעץ -3 עם עלים יש Θ( ) קודקודים. שאלה 6: נתון האלגוריתם הבא שאמור למחוק צומת מעץ חיפוש בינארי. האלגוריתם מקבל מצביע לעץ חיפוש בינארי,root ומצביע לצומת בתוכו x. א. הוכיחו או הפריכו את הטענה הבאה: האלגוריתם יכול להחליף את פעולת delete של עץ חיפוש בינארי. delete(ode root, ode x) 1. if left(x) = NULL ad right(x) = NULL. if x = root retur NULL 3. if x = left( paret(x) ) 4. left(paret(x) ) NULL 5. else 6. right(paret(x) ) NULL 7. retur root 8. if left(x) = NULL 9. y successor(x) 10. else 11. y predecessor(x) 1. data(x) data(y) 13. delete(root, y) 14. retur root ב. בין אם הוכחתם ובין אם הפרכתם את סעיף א, הוכיחו או הפריכו את הטענה הבאה: יעילות האלגוריתם חסומה ע"י גובה העץ. שאלה 7: נתונה ערימת מקסימום הכוללת איברים שונים זה מזה, ונניח ש- גדול (למשל, > 00 ). נדפיס את איברי הערימה בסדר.preorder אילו מהטענות הבאות נכונות: א) איבר המינימום יכול להופיע במקום הראשון בסדר ה-.preorder המקומות האחרונים בסדר ה-.preorder ב) איבר המינימום תמיד יופיע באחד מ + 1 ג) איבר המינימום יכול להופיע במקום ה + 1 log בסדר ה-.preorder ד) אם הערימה מלאה לגמרי גם ברמה התחתונה, אז איבר המינימום יופיע בדיוק במקום ה- בסדר ה-.preorder הוכיחו תשובתכם במדויק! - 8 -

שאלה 8: ערימת מקסימום מדרגה k דומה לערימת מקסימום בינארית רגילה. בדומה לערימה בינארית שהיא עץ שלם מלבד אולי העלים (שגם הם מלאים משמאל עד נקודה כלשהי) וממומשת במערך, גם ערימה מדרגה k היא עץ k -י שלם מלבד אולי העלים (שגם הם מלאים משמאל עד נקודה כלשהי) וממומשת במערך. גם כאן כל קדקוד גדול מכל ילדיו. א) ב) ג) ד) מה הגובה של ערימת מקסימום מדרגה k שמכילה איברים? הסבירו תשובתכם. תארו אלגוריתם יעיל ככל האפשר המממש את הפעולה DeleteMax() בערימת מקסימום מדרגה k. מה יעילות האלגוריתם כפונקציה של ו- k? הסבירו בקצרה כיצד ניתן להכליל את האלגוריתם של Floyd לבניית ערימה מדרגה k בהינתן מערך לא ממוין בגודל. מה יעילות האלגוריתם כפונקציה של ו- k? הציגו את היעילות כסכום של טור והעריכו את הטור. שאלה 9: נניח כי עומד לרשותכם אלגוריתם המסוגל לממש את פעולת FixHeap (כפי שהוגדרה בכיתה) על ערימה בזמן ((.O(lg(lg מה יהיה זמן הריצה של אלגוריתם BuildHeap של פלויד (כפי שנלמד בכיתה), אם במקום להשתמש בפעולת FixHeap הרגילה שלמדנו בכיתה, תשתמשו בפעולת FixHeap החדשה? הוכיחו תשובתכם במדויק. שאלה 10: נתונה ערימת מקסימום המכילה נתונים. נבחר, באופן אקראי, איבר מנתוני הערימה, נקטין את ערכו כך שיהיה הנתון הקטן ביותר, ונבצע.FixHeap מה תוחלת זמן העבודה של פעולת ה- FixHeap שביצענו? הערה: לשם הפשטות הניחו שהרמה האחרונה בערימה מלאה לחלוטין. שאלה 11: האלגוריתם שלהלן ממיין את אברי קבוצה S המכילה איברים:.1 נבחר < k < 1 כלשהו. כל אחת (אם אינו מתחלק k. נחלק את S ל- k קבוצות זרות,S 1,..., S k בגודל במדויק ב- k, אז הקבוצה האחרונה תכיל פחות אברים). 3. נסמן ב- m i את המקסימום בקבוצה S. i ניצור קבוצה נוספת M שתכיל את,..., 1 m.m k 4. כל עוד M אינה ריקה נבצע את הפעולות הבאות: S i תהיה M. מ- M max נוציא את M. max נסמנו ב- M, נמצא את המקסימום בקבוצה a. הקבוצה שאליה שייך M. max b. נוציא את M max מהקבוצה S. i אם S i עדיין לא התרוקנה, נמצא ב- S i מקסימום חדש ונוסיף אותו ל- M. א. נניח שנממש את הקבוצות S, i ואת הקבוצה M ברשימות מקושרות (לא ממויינות). מהי יעילות זמן הריצה של האלגוריתם, כפונקציה של ו-? k ב. מהו ה- k שייתן זמן ריצה אופטימלי (כפונקציה של ) במימוש זה? ג. נניח שנממש את הקבוצות S, i ואת הקבוצה M בערימות. מה יהיה זמן הריצה של האלגוריתם במימוש זה? - 9 -

שאלה 1: עלות פעולת Isert(x) במימוש מסוים של ADT של מילון (Dictioary) היא כדלקמן: יהיה מספר האיברים שנמצאים כעת במבנה, ויהיה s מספר האיברים הקטנים מ- x שנמצאים כעת במבנה. אזי עלות )Θ זמן. Isert(x) היא ) s + 1 מה העלות הממוצעת של פעולת Isert(x) למבנה המכיל איברים? הניחו שההסתברות שיש במבנה בדיוק i איברים, i 0, שקטנים מ- x שווה לכל i. שאלה 13: נתונה קבוצה של מספרים שונים ונתון עץ חיפוש בינארי ריק. מבצעים את האלגוריתם הבא: האלגוריתם: בצע פעמים: 1. בחר באופן אקראי מספר בקבוצה.. הורד אותו מהקבוצה. 3. הכנס אותו לעץ החיפוש בעזרת פונקצית Isert של עץ חיפוש (ללא איזון). מצאו את נוסחת הנסיגה לזמן הריצה של האלגוריתם הנ"ל במקרה הממוצע. הסבירו את שיקוליכם. הערה: הניחו שצעדים 1 ו- לוקחים (1)O זמן. שאלה 14: נתונה טבלת ערבול בגודל ופונקצית ערבול אחידה לטבלה סגורה. נניח שיש 5 איברים בטבלה (ואין איברים המסומנים.(DELETED נסמן את ההסתברות שהכנסת המפתח השישי תיקח בדיוק i ניסיונות ב-.pr(i) א. חשבו ישירות (כלומר ללא שימוש בנוסחאות) את.pr(3) ב. תנו נוסחה לתוחלת מספר הניסיונות להכנסת המפתח השישי. שאלה 15: נתונה טבלת ערבול בגודל m, = אשר מכילה כבר / איברים. מטרת השאלה היא לבחון את תוחלת מספר הפעולות להוסיף לטבלה הזאת עוד / איברים. בשני הסעיפים הבאים אתם יכולים להשתמש בנוסחאות שנלמדו בכיתה ליעילות הממוצעת של הפעולות הבסיסיות המוגדרות על טבלת ערבול (כגון חיפוש, הכנסה וכו'). א) ב) מה תהיה תוחלת מספר הפעולות להוסיף / איברים לטבלה הזאת בהנחה שהתנגשויות נפתרות על ידי שרשור, ובהנחה שפונקצית הערבול שבה משתמשים היא אחידה? הוכיחו תשובתכם. מה תהיה תוחלת מספר הפעולות להוסיף / איברים לטבלה הזאת בהנחה שהתנגשויות נפתרות על ידי Ope Addressig טבלה סגורה (בחלק מהכיתות שיטה זו נקראה Re-,(Hashig ובהנחה שפונקצית הערבול שבה משתמשים היא אחידה? הוכיחו תשובתכם. - 30 -

שאלה 16: נתון ADT של קבוצות זרות הממומש בעזרת רשימות משורשרות. מוסיפים לו את השיפור של.Uio by Size א. הוכיחו ש- (1-) פעולות uio ייקחו ( O( log זמן במקרה הגרוע. ב. הוכיחו ש- (1-) פעולות uio ייקחו (( )Ω log( זמן במקרה הגרוע. ומבנה הנתונים המופשט "קבוצות זרות" בטיפוס הנתונים שאלה 17: שאלה זו עוסקת הממומשות במערך כפי שנלמד בכיתה עם השיפור של.Uio by Size "רשימות משורשרות" מבצעים סדרה של m פעולות Uio, Fid, MakeSet שמתוכן יש פעולות.MakeSet size( x) k size( יהיה 1 k. נניח שכל פעם שבוצע Uio(x,y) התקיים (y כאשר size(x) ו- size(y) הם גודל הקבוצות של x,y בהתאמה. תנו חסם עליון הדוק ככל האפשר לזמן הריצה הכולל של כל m הפעולות כפונקציה של,m?, k הוכיחו תשובתכם. שאלה 18: מממשים את טיפוס הנתונים המופשט של קבוצות זרות שאיבריהן לקוחים מהתחום {,...,1, ע"י יער של עצים עם שני השיפורים: Uio By Size ו-.Path-compressio מבצעים סדרה של +m פעולות: תחילה, כל פעולות ה- Make-Set האפשריות. אחריהן, m פעולות של Uio ו-,Fid כאשר ראשית מבוצעות ברצף רק פעולות,Uio ואחריהן, בשאר הפעולות, מבוצעות ברצף רק פעולות.Fid הוכיחו שסדרת m פעולות ה- Uio ו- Fid (באופן שתוארה לעיל) תיקח (m. )Θ שאלה 19: 1) במימוש קבוצות זרות בעזרת יער של עצים עם Uio-By-Size ו-,Path Compressio פעולת fid תיקח במקרה הגרוע: (1)Θ א) Θ() ב) ) Θ(log ג),Θ(α()) כאשר α() היא ההפוכה לפונקצית אקרמן. ד) {(,,K log(,1 בעזרת רשימות מקושרת עם ) במימוש קבוצות זרות של המספרים,Uio-By-Size פעולת Uio תיקח במקרה הגרוע: (1)Θ. ה).Θ(log(log())) ו).Θ(log()) ז).Θ(log()) ח) אף אחת מהתשובות אינה נכונה. ט) - 31 -

מציאת מבני נתונים שאלה 1: הצע מבנה נתונים המחזיק קבוצות של מספרים שלמים לאו דווקא זרות, ותומך בפעולות הבאות: MakeSet(x) - יצירת קבוצה בעלת איבר אחד x. יעילות נדרשת (1)θ בממוצע. Uio(A,B) - המקבלת שתי קבוצות A ו- B, ומחזירה את קבוצת האיחוד שלהן. יעילות נדרשת θ( A + B ) בממוצע ( A ו- B הם מספר האיברים ב- A וב- B בהתאמה). Itersect(A,B) - המקבלת שתי קבוצות A ו- B, ומחזירה את קבוצת החיתוך שלהן. יעילות נדרשת θ( A + B ) בממוצע ( A ו- B הם מספר האיברים ב- A וב- B בהתאמה). Query(A,x) המחזירה true אם"ם.A x יעילות נדרשת (1)θ בממוצע. שאלה : נתון ADT לשמירת מספרים טבעיים, התומך בפעולות הבאות: ) MakeEmpty( פעולה זו מאתחלת מבנה ריק. ) IsEmpty( פעולה זו מחזירה true אם"ם המבנה ריק. הוא מספר המספרים במבנה. Isert(x) פעולה זו מכניסה את המספר x למבנה. על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר ( ) Delete(x) x הינו נתון הנמצא במבנה. פעולה זו מוציאה את המספר x מהמבנה. על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר הוא מספר המספרים במבנה. ( ) IsertFixed(x) פעולה זו מכניסה את המספר x למבנה, ומוציאה מהמבנה את הנתון הוותיק ביותר, כך שאחרי הפעולה מספר הנתונים במבנה הוא כפי שהיה לפני הפעולה. על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר הוא מספר המספרים במבנה. ( ) הערה: ניתן להניח שפעולה זו לא תופעל כאשר במבנה אין נתונים כלל. הציעו מבנה נתונים למימוש ה- ADT הנ"ל. ופרטו איך תתבצע כל אחת מהפעולות. הערה: הניחו כי בכל רגע נתון לא יהיו במבנה הנתונים יותר מ- N נתונים. - 3 -

שאלה 3: נתון ADT לניהול סדרה סופית של מספרים:.,a1,a,a3,K a ה- ADT תומך בפעולות הבאות: ) MakeNew( פעולה זו מייצרת מבנה ריק. על פעולה זו להתבצע 1 ב-() Θ במקרה הגרוע. ) IsEmpty( פעולה זו מחזירה true אם"ם המבנה ריק. הגרוע. על פעולה זו להתבצע 1 ב-() Θ במקרה data) Isert(i, פעולה זו מכניסה את הנתון data למקום ה- i בסדרה. אם נסמן ב- את אורך הסדרה, ברגע ביצוע הפעולה, אזי: i הוא מספר טבעי בין 1 ל- (1+). א. כל אחד מהנתונים שהיו במקומות:,i,,(1+i),(+i), יזוזו ב. למקומות: (+1) (i+1), (i+), (i+3),, בהתאמה. הנתונים שהיו במקומות: (1-i),,,1 יישארו במקום שהיו. Θ במקרה הגרוע. ( log( על פעולה זו להתבצע ביעילות ג. ( ) ) i Delete( פעולה זו מוחקת מהסדרה את הנתון ה- i. אם נסמן ב- את אורך הסדרה, ברגע ביצוע הפעולה, אזי: א. i הוא מספר טבעי בין 1 ל-. ב. כל אחד מהנתונים שהיו במקומות:,(1+i),,(+i), יזוזו למקומות: (-1) i, (i+1), (i+),, בהתאמה. הנתונים שהיו במקומות: (1-i),,,1 יישארו במקום שהיו. ) Θ( log( במקרה הגרוע. ג. על פעולה זו להתבצע ביעילות ) הערה: אין צורך לממש פעולה זו. ) i Get( פעולה זו מחזירה את הנתון ה- i בסדרה אך אינה מוחקת אותו מהסדרה. על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר הוא אורך הסדרה. ( ) MakeNew( ) Isert(1, 1.5) Isert(1,.5) פעולה זו מחזירה //.5 Get(1) Iser(, 3.5) פעולה זו מוחקת מהסדרה את הנתון //.5 Delete(1) פעולה זו מחזירה // 1.5 Get() למשל, רצף הפעולות הבא: הציעו מבנה נתונים למימוש ה- ADT הנ"ל. ופרטו איך תתבצע כל אחת מהפעולות. - 33 -

שאלה 4: נתון ADT לניהול Play List (רשימת שירים), כאשר כל שיר מאופיין בזמר המבצע אותו ובמספר טבעי המייצג את דירוג השיר. ה- ADT תומך בפעולות הבאות: ) MakeEmpty( פעולה זו מאתחלת מבנה ריק. על פעולה זו להתבצע 1 ב-() Θ במקרה הגרוע. ) IsEmpty( פעולה זו מחזירה true אם"ם המבנה ריק. הגרוע. על פעולה זו להתבצע 1 ב-() Θ במקרה FilePath) IsertSog(PreformerName, SogRatig, פעולה זו מכניסה למבנה את השיר של הזמר,PreformerName בעל דירוג,SogRatig הנמצא במחשב במסלול.FilePath על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר הוא מספר השירים במבנה. ( ) ) PlayNext( פעולה זו גורמת לניגון השיר הבא. הפעולה מחזירה true אם"ם קיים שיר נוסף לנגן. השיר הבא שינוגן יקבע עפ"י הלוגיקה הבאה: אם זו ההפעלה הראשונה של הפעולה,PlayNext ינוגן השיר בעל הדירוג הגבוה ביותר של הזמר שנכנס ראשון למבנה. אם זו אינה ההפעלה הראשונה של הפעולה,PlayNext נסמן ב- P את הזמר של השיר האחרון שנוגן. הפעולה תגרום לניגון השיר בעל הדירוג המקסימאלי של הזמר שנכנס ראשון למבנה אחרי ש- P נכנס (אחרי שנכנס השיר הראשון של P), שעדיין נותרו לו שירים שלא נוגנו. הערה: יש להתייחס אל סדר הזמרים בצורה מעגלית, כלומר אם P הוא הזמר שנכנס אחרון למבנה, אזי השיר הבא יהיה של הזמר הראשון שנכנס למבנה, שעדיין נותרו לו שירים שלא נוגנו. על פעולה זו להתבצע ביעילות במקרה הגרוע, כאשר הוא מספר השירים במבנה. Θ( log( ) ) MakeEmpty( ) IsertSog,"הראל סקעת"),3 "C:\My (" mp3.שלכת\ Music,"הראל סקעת") IsertSog,18 "C:\My כאן\ Music (" mp3.הנני IsertSog,"הראל מויאל"),16 "C:\My על החלון\ Music (" mp3.נר IsertSog,"הראל מויאל"),19 "C:\My (" mp3.משאלה\ Music IsertSog,"שירלי לילו"),1 "C:\My איתה\ Music (" mp3.לך PlayNext( ); PlayNext( ); PlayNext( ); PlayNext( );,"לירון לב") IsertSog,0 "C:\My לך\ Music (" mp3.נבראתי PlayNext( ); PlayNext( ); למשל, רצף הפעולות הבא: יגרום לניגון השירים לפי הסדר הבא (מימין לשמאל): הראל מויאל - משאלה; הראל סקעת שלכת; הראל מויאל נר על החלון; הראל סקעת הנני כאן; שירלי לילו לך איתה; לירון לב נבראתי לך; הציעו מבנה נתונים למימוש ה- ADT הנ"ל. ופרטו איך תתבצע כל אחת מהפעולות. הערה: לצורך המימוש ניתן להניח שקיימת הפונקציה,Play(FilePath) הגורמת לניגון השיר שנמצא במסלול.FilePath - 34 -

שאלה 5: עליכם לתכנן מבנה נתונים עבור קבוצות זרות כשכל קבוצה כוללת מספרים מתוך תחום נתון {,1.,K מבנה-הנתונים צריך לתמוך בפעולות MakeSet(x) Uio(x,y), ו Fid(x) כפי שתוארו בכיתה, וגם בפעולה,Delete(x) המורידה את x מתוך הקבוצה בה הוא נמצא ומתוך מבנה הנתונים בכלל (אי- אפשר יהיה לבצע שוב בהמשך את הפעולה.(MakeSet(x) הפעולה Delete(x) צריכה להתבצע רק אם x אינו נציג הקבוצה (אחרת יש להחזיר הודעה ש- x הוא הנציג של קבוצתו ואין למוחקו). תארו את מבנה הנתונים ותארו בקצרה כל אחת מהפעולות כך שיתקיים:.O( m + log כל סדרה של m פעולות תיקח זמן כולל של ( באם אתם מתארים מבנה נתונים הדומה למבנה שראינו בכיתה אינכם צריכים לתאר אותו במלואו, אלא רק לציין את השינויים במבנה והשינויים בביצוע הפעולות. כמו-כן נתחו את זמן הריצה הכולל של סדרה של m פעולות (שוב אם ההוכחה דומה למה שראינו בכיתה תארו רק את השינויים בהוכחה). שאלה 6: הציעו מבנה נתונים המאפשר לשמור לכל היותר N מספרים ממשיים ומאפשר לתמוך בפעולות הבאות: :Fid(x) מחזירה true אם x נמצא במבנה, false אחרת. :Delete(x) מוחקת את x מהמבנה. :Isert(x) מוסיפה את x למבנה, כאשר אם המבנה מכיל כבר N איברים אז כדי לפנות מקום ל- x יש להוציא מהמבנה את האיבר שמספר פעולות ה- Fid שבוצעו עליו הוא הגדול ביותר. אם יש מספר איברים שבוצעו עליהם אותו מספר מקסימלי של פעולות Fid יש להוציא אחד מהם (לא חשוב את מי). יעילות כל פעולה צריכה להיות ( O(log במקרה הגרוע, כאשר הוא מספר האיברים שנמצאים במבנה בזמן ביצוע הפעולה. תארו את מבנה הנתונים, כתבו אלגוריתם לכל אחת מהפעולות ונתחו את היעילות של כל פעולה במקרה הגרוע. שאלה 7: ה- ADT הבא תומך בפעולות על קבוצות זרות המכילות מספרים כלשהם (לאו דוקא מ- {,...,1,). הניחו שמספר המספרים במבנה אינו עולה על. MakeSet(x) מקבלת מספר x ויוצרת קבוצה חדשה המכילה את המספר x בלבד. המספר x הוא נציג הקבוצה. Fid(x) מקבלת מספר x ומחזירה את הנציג של הקבוצה ש- x שייך אליה. repy) Uio(repx, מקבלת מספרים repx ו- repy שהם נציגים של שתי קבוצות ומאחדת את שתי הקבוצות לקבוצה אחת. נציג הקבוצה החדשה יהיה אחד מאבריה. היעילות הנדרשת של כל אחת משלוש הפעולות (כולל (MakeSet היא ( O(log במקרה הגרוע. א) ב) תארו מבנה נתונים למימוש ה- ADT הנ"ל, כתבו לכל אחת מהפעולות אלגוריתם, ונתחו את היעילות של כל פעולה במקרה הגרוע. הסבירו בקיצור כיצד ניתן להפוך את מבנה הנתונים למבנה סטטי (ופשוט יותר) אם נאפשר לפעולת MakeSet להתבצע ב-.O() שתי הפעולות האחרות צריכות עדיין להתבצע ב- (.O(log יש לכלול בהסבר איך יתבצעו 3 הפעולות במבנה הנתונים החדש. - 35 -

שאלה 8: נגדיר ADT התומך בפעולות של ספק סלולרי הנותן שרותים לחברות מסחריות. הניחו שלכל חברה יש לכל היותר k טלפונים סלולרים ברשותה. בהגדרות שלהלן CompayName מייצג שם של חברה (מטיפוס מחרוזת), bill הוא חשבון טלפון אחרון (מטיפוס r,(it הוא מספר הטלפונים בחברה, ו- BillArray הוא מערך של r חשבונות טלפון אחרונים. הפעולות הנדרשות bill) AddNewPhoe (CompayName, מוסיפה על שם החברה טלפון נוסף שחשבונו האחרון הוא.bill על פעולה זו להתבצע ביעילות ((r, O(log( ( + log( כאשר הוא מספר החברות המסחריות המשתתפות במסלול המיוחד, ו- r הוא מספר הטלפונים שברשות החברה. BillArray) NewMothlyBills (CompayName, r, מקבלת ב- CompayName (מטיפוס מחרוזת) שם של חברה, ב- r את מספר הטלפונים בחברה, וב- r המקומות הראשונים של המערך BillArray את החשבונות האחרונים של r הטלפונים שברשות החברה. הפעולה NewMothlyBills מעדכנת את החשבונות החודשיים של החברה לחשבונות חדשים. אם החברה אינה קיימת עדיין יש להוסיף אותה למסלול המיוחד. על פעולה זו להתבצע ביעילות (r, O(log( ( + כאשר הוא מספר החברות המסחריות המשתתפות במסלול המיוחד. ApplyDiscout(CompayName) - מקבלת ב- CompayName (מטיפוס מחרוזת) שם של חברה השייכת למסלול המיוחד, ומשנה את החשבונות האחרונים של החברה באופן הבא: לחשבון הגבוה ביותר מבין חשבונות הטלפונים שברשות החברה תינתן הנחה של 30%, ולחשבון השני בגובהו תינתן הנחה של 0%. על פעולה זו להתבצע ביעילות ((r, O(log( ( + log( כאשר הוא מספר החברות המסחריות המשתתפות במסלול המיוחד, ו- r הוא מספר הטלפונים שברשות החברה. הערה: פעולה זו יכולה להתבצע עבור כל חברה מספר פעמים בכל חודש. תארו מבנה נתונים למימוש ה- ADT הנ"ל, כתבו לכל אחת מהפעולות אלגוריתם, ונתחו את היעילות של כל פעולה במקרה הגרוע. - 36 -

שאלה 9: נתון ADT לשמירת מספרים, התומך בפעולות הבאות: ) MakeEmpty( פעולה זו מאתחלת מבנה ריק. ) IsEmpty( פעולה זו מחזירה true אם"ם המבנה ריק. Isert(x) פעולה זו מכניסה את המספר x למבנה. על פעולה זו להתבצע ביעילות Θ( log( ) ) במקרה הגרוע, כאשר הוא מספר המספרים במבנה. Delete(x) x הינו נתון הנמצא במבנה. פעולה זו מוציאה את המספר x מהמבנה. על פעולה זו להתבצע ביעילות ( Θ log( במקרה הגרוע, כאשר הוא מספר המספרים במבנה. ( ) Fid(x) מחזיר true אם"ם x נמצא במבנה. על פעולה זו להתבצע ביעילות (1)Θ בממוצע. OrderedSuccessor(x) x הינו נתון הנמצא במבנה. פעולה זו מחזירה, מבין הנתונים שבמבנה, את הנתון המינימאלי הגדול מ- x (הנתון הבא בגודלו). על פעולה זו להתבצע ביעילות (1)Θ בממוצע. הערה: ניתן להניח ש- x אינו הנתון המקסימאלי במבנה. IsertioSuccessor(x) x הינו נתון הנמצא במבנה. פעולה זו מחזירה, מבין הנתונים שבמבנה, את הנתון שנכנס ראשון אחרי x (הנתון הבא לפי סדר ההכנסה). על פעולה זו להתבצע ביעילות (1)Θ בממוצע. הערה: ניתן להניח ש מבין הנתונים שבמבנה, x אינו הנתון שנכנס אחרון. הציעו מבנה נתונים למימוש ה- ADT הנ"ל. ופרטו איך תתבצע כל אחת מהפעולות. הערה: הניחו כי בכל רגע נתון לא יהיו במבנה הנתונים יותר מ- N נתונים. שאלה 10: נגדיר את ה- ADT הבא לתור עדיפויות עם כפילויות של עדיפויות. הפעולות בהן יש לתמוך: ) data Isert( priority, מכניסה את הנתון data בעדיפות priority לתוך המבנה. על פעולה זו לרוץ ביעילות (( O(log( במקרה הגרוע, כאשר הוא מספר הנתונים במבנה ברגע ביצוע הפעולה. ) DeleteMi( מוציאה מהמבנה את הנתון עם העדיפות הקטנה ביותר. אם יש יותר מנתון אחד מאותה עדיפות מינימלית, הפעולה תוציא מבין כל הנתונים עם העדיפות המינימלית את הנתון שנכנס ראשון למבנה. הפעולה מחזירה את הנתון שיצא מהמבנה. על פעולה זו לרוץ ביעילות (( O(log( במקרה הגרוע, כאשר הוא מספר הנתונים במבנה ברגע ביצוע הפעולה. ) Mi( - מחזירה את הנתון עם העדיפות הקטנה ביותר. אם יש יותר מנתון אחד מאותה עדיפות מינימלית, הפעולה תחזיר מבין כל הנתונים עם העדיפות המינימלית את הנתון שנכנס ראשון למבנה. על פעולה זו לרוץ ביעילות (1)Θ במקרה הגרוע. ( Build(PriArr[,[ DataArr[,[ מייצרת תור עדיפויות משני המערכים בהתאמה, Pr iarr[ i] = Pr iarr[ j] ו- i< (העדיפות של הנתון,DataArr[i] היא,(PriArr[i] כך שאם j אז הנתון ה- i יצא מהבנה לפני הנתון ה- j. על פעולה זו לרוץ ביעילות (, )Θ כאשר הוא גודל שני המערכים. תארו במדויק את מבנה הנתונים בו בחרתם להשתמש, כתבו לכל אחת מהפעולות אלגוריתם, ונתחו את היעילות של כל פעולה. - 37 -

שאלה 11: בשאלה זו נתייחס למימוש ע"י יער של עצים עם השיפור של Uio By Size המופשט לייצוג קבוצות זרות שאיבריהן לקוחים מהתחום {,...,1,. עבור טיפוס הנתונים ברצוננו לשנות את המימוש כך שבנוסף לפעולות Uio,MakeSet ו- Fid המבנה יאפשר לבצע את הפעולות הבאות: AvgPath(x) בהינתן x, נציג של קבוצה (שהוא גם שורש העץ), פעולה זו תחשב ותחזיר את ממוצע המרחקים מ- x אל הצמתים בעץ. כלומר, אם נסמן את מספר האיברים בקבוצה של x ב- x ואת אברי הקבוצה 1 של x ב-,Set(x) אז (x) AvgPath צריך להחזיר את d T (y) x y Set(x) כאשר (y) d T הוא העומק של y בעץ T, המייצג את הקבוצה. PritSet(x) - בהינתן x, נציג של קבוצה (שהוא גם שורש העץ), פעולה זו תדפיס את אברי הקבוצה של x. דרישות יעילות: פעולת :MakeSet(x) (1)O זמן. פעולת y) O(1) :Uio(x, זמן. פעולת :Fid(x) O(log( x (( זמן, כאשר x הוא מספר האברים בקבוצה של x. פעולת :AvgPath(x) (1)O זמן. פעולת :PritSet(x) O( x ) זמן, כאשר x הוא מספר האברים בקבוצה של x. שאלה 1: נתון ה- ADT הבא: ) MakeEmpty( פעולה זו מייצרת מבנה ריק. ) IsEmpty( מחזירה true אם"ם המבנה ריק., Ο(log()) למבנה. על פעולה זו לרוץ ביעילות x פעולה זו מכניסה את המספר Isert( x ) כאשר הוא מספר הנתונים במבנה., Ο(log()) מהמבנה. על פעולה זו לרוץ ביעילות x פעולה זו מוציאה את המספר Delete( x ) כאשר הוא מספר הנתונים במבנה ) x MiDifferece( פעולה זו מחזירה את הערך המוחלט של ההפרש בין x לבין הנתון במבנה הקרוב ביותר בערכו ל- x. על פעולה זו לרוץ ביעילות,Ο(log()) כאשר הוא מספר הנתונים במבנה. הערה: שימו לב שאם x נמצא במבנה, אזי ההפרש המבוקש הוא 0. אך אם x אינו נמצא במבנה, ההפרש הנ"ל גדול מ- 0. א. הציעו מבנה נתונים המממש את ה- ADT הנ"ל. ב. נניח שברצוננו להוסיף ל- ADT שתואר בתחילת השאלה גם את הפעולה: ) MiAllDiffereces( פעולה זו מחזירה את הערך המוחלט של ההפרש בין שני המספרים במבנה הקרובים ביותר זה לזה בערכם. על פעולה זו לרוץ ביעילות (1)Ο. הערה: שימו לב שאם ישנם במבנה שני איברים שווים, אזי ההפרש המבוקש הוא 0. אך אם כל האיברים שונים זה מזה, ההפרש הנ"ל גדול מ- 0. הציעו מבנה נתונים התומך בכל הדרישות. - 38 -

שאלה 13: הציעו מבנה נתונים שיתמוך בפעולות הרגילות על תור עדיפויות מקסימום (מופיעות להלן). על הפעולות לפעול ביעילות המצוינת..Θ(1) הזמן במקרה הגרוע :MakeEmpty( ).Θ(1) הזמן במקרה הגרוע : IsEmpty( ) :Isert(x) הזמן במקרה הגרוע (1)Θ. שימו לב לזמן הנדרש בפעולה זו..Θ(1) הזמן במקרה הגרוע :Max( ) ) :DeleteMax( הזמן במקרה הגרוע ( O( log כאשר הוא מספר הנתונים העכשווי במבנה. והחשוב ביותר: הזמן ל- m פעולות (מכל הסוגים) שמתוכם k הם Isert הוא במקרה הגרוע Θ(m.+ k log k) על מבנה הנתונים להתבסס על אחד או יותר ממבני הנתונים שלמדנו, אך בהחלט ייתכן שתידרשו לשנות ו/או להוסיף מבנים משלכם. שאלה 14: נגדיר מבנה נתונים חדש שנקרא BEAP ותומך בפעולות Isert, DeleteMi, Mi הרגילות המגדירות תור קדימויות מינימום, אולם מסוגל לתמוך גם בפעולה Fid שמחפשת האם נתון מסוים נמצא במבנה. המבנה נקרא BEAP מכיוון שהוא מעין ואריאציה על הערימה.HEAP הנתונים שיהיו ב- BEAP הם מספרים שלמים, ואפשר להניח שהם כולם שונים זה מזה. ה- BEAP יישמר במטריצה משולשית (נשתמש רק בחציו של מערך דו-מימדי), כך שתתקיים התכונה החשובה הבאה: לאורך כל שורה או עמודה במטריצה, המספרים ממוינים בסדר עולה. כמו-כן, המספרים יתווספו ל- BEAP לאורך האלכסונים של המערך, כפי שאפשר לראות בדוגמה הבאה, וכפי שיוסבר בצורה יותר מדויקת בהמשך. דוגמה: הנה BEAP שמכיל = 11 מספרים. אם נוסיף כעת איבר חדש הוא אמור להתווסף למשבצת בשורה 4 ובעמודה. האיבר שיתווסף אחריו ייכנס למשבצת בשורה 3 ובעמודה 3, וכך הלאה עד שיתמלא האלכסון הזה, ואז נתחיל להוסיף איברים לאלכסון החדש שמתחיל בשורה 6 ובעמודה 1 (כמובן שיש לדאוג לתקן את ה- BEAP לאחר הוספתו של כל איבר חדש, כך שתתקיים התכונה שכל שורה ועמודה ממוינת בסדר עולה). המשבצות המושחרות יישארו ריקות במהלך כל חייו של ה- BEAP כי אנחנו משתמשים רק במערך דו-מימדי משולשי. 1 3 4 5 6 1 1 4 9 13 5 0 3 6 8 4 1 5 3 6 כדי להגדיר את המקום שאליו ייכנס האיבר הבא באופן פורמאלי, נגדיר מהו האלכסון ה- i של המערך, וזאת עבור i max 1, כאשר מדובר במערך מגודל.max max אם כן, האלכסון ה- i כולל את המשבצות (i,1),(1,i).,1 i),(,(,3 i), - 39 -