מבני נתונים פתרונות לסט שאלות דומה לשאלות בנושאים () זמני ריצה של פונקציות רקורסיביות () מיונים השאלות פתרו את נוסחאות הנסיגה בסעיפים א-ג על ידי הצבה חוזרת T() כאשר = T() = T( ) + log T() = T() כאשר = T() = T( ) + T() = T() כאשר = T() = ) + הפונקציה הבאה מקבלת כקלט מערך A הכולל מספרים, ושני אינדקסים: left rght חשבו חסם הדוק במונחי Θ לזמן הריצה של הפונקציה כאשר היא נקראת עם הפרמטרים =,left ו- rght = לפי ההנחיות הבאות: כתבו נוסחת נסיגה לזמן הריצה ופתרו אותה על ידי הצבה חוזרת vod Sort(t A[], t left, t rght) { t ; א ב ג ד } f ( left < rght) { = (rght left + )/; Sort(A,left, left + ); Sort(A, left +, left + * ); ergesort(a, left + *, rght); erge(a, left, left +, left + *, rght); } היא הפונקציה שראינו בכיתה שממיינת את המערך A בין הגבולות ל- j בעזרת אלגוריתם ergesort שלמדנו כאשר: ergesort(a,, j) (f erge(a,,,j, היא פונקציה הממזגת שלושה חלקים ממוינים הנמצאים בין הגבולות ל-,j j ל-, ו- ל-,f ויעילותה ליניארית במספר הנתונים הכולל שהיא ממזגת (אם אחד החלקים ריק אז הפונקציה ממזגת את שני החלקים הנותרים)
פתרו את נוסחאות הנסיגה בסעיפים א-ב על ידי עץ רקורסיה יש לשרטט את העץ בצורה ברורה ולציין ליד כל רמה את מספר הרמה ואת מספר הפעולות המתבצעות ברמה כמו כן יש לתת את הנוסחה למספר הפעולות ברמה l כלשהי בעץ f() = f() כאשר = f() = f(/) + f(/) + < a ואילו < T() כאשר = T() = T(a) + T(( a)) + א ב מספר קבוע כלשהו מצאו את נוסחת הנסיגה עבור זמן הריצה של האלגוריתמים הבאים אין צורך לפתור את הנוסחה שמצאתם א t stam(t Arr[], t ){ t md, md, md; t, sum; } f ( <= ) retur ; else{ md = /; sum = stam(arr, md); md = ( - md)/; sum += stam(arr + md, md); md = ( - md - md)/; sum += stam(arr + md + md, md); for(=; <; ++) sum += Arr[]; retur sum; } ב האלגוריתם הבא למציאת האיבר ה- הקטן ביותר במערך A בעל איברים (אלגוריתם,() (שלבים vot דומה לאלגוריתם שלמדנו ההבדל העיקרי הוא דרך מציאת ה- (Seleto,() ו- (v) להלן) אם 7 נמיין את A בעזרת Bubble Sort ונחזיר את האיבר ה- במערך הממוין A יכיל את 5 האיברים נחלק את A ל- /5 תתי מערכים /5 A, A,, A כך שתת המערך A יכיל את 5 האיברים הבאים ב- A, וכך הלאה הראשונים ב- A, תת המערך לכל j /5,j נמיין את A j בעזרת Bubble Sort עבור כל מערך A j הממוין כעת, נסמן את האיבר האמצעי (השלישי מתוך החמישה) ב- b j וניצור מערך /5 B = b, b,, b נמצא ברקורסיה את החציון ב- B (כלומר את האיבר ה- / הקטן ביותר ב- B) זה יהיה ה- vot נבצע את אלגוריתם Partto על המערך A בעזרת ה- vot שמצאנו בשלב (v) יהי המיקום של ה- vot שמוחזר ע"י Partto (כלומר ה- vot הוא האיבר ה- הקטן ביותר ב- A) אם < נמצא ברקורסיה את האיבר ה- הקטן ביותר בתת המערך משמאל ל- vot אחרת, אם > נמצא ברקורסיה את האיבר ה- (-) הקטן ביותר בתת המערך מימין ל- vot () אחרת: () () (v) (v) (v)
אחרת, אם = נחזיר את ה- vot הוא האיבר ה- הקטן ביותר הנדרש אפשר להראות שכתוצאה מבחירת ה- vot בצורה שתוארה, הערך בשלב (v) מקיים 7 ושהרקורסיה 7 + 6 לשם פשטות נניח כאן שהערך בשלב הוא בדיוק + (v) 6 בשלב (v) תהיה תמיד לתת המערך הגדול יותר בהתחשב בפישוט, מצאו נוסחת נסיגה לזמן הריצה T() של אלגוריתם ה- Seleto שתואר פתרו את נוסחאות הרקורסיה בסעיפים א-ד בעזרת משפט האב הניחו כי = ()T T() = 9T(/) + א T() = 5T(/5) + ב T() = T(/) + ג 7 + T(/5) T() = ד 5 נתונה נוסחת הנסיגה הבאה: T ( ) = T ( ) + log( ) מצאו בדרך כלשהי חסם הדוק ל-,T() והוכיחו את נכונות החסם שמצאתם עפ"י הגדרה שימו לב שחלק ה- O בהוכחה דורש שימוש באינדוקציה 6 נתונים אברים, המחולקים ל- קבוצות S, S כל אחת מכילה אברים אברי כל,, K S קבוצה קטנים מאברי הקבוצה הבאה וגדולים מאברי הקבוצה הקודמת, כלומר כל אברי S גדולים S +, S וקטנים מאברי מאברי מצאו חסם תחתון לסדר גודל מספר ההשוואות המינימלי הנדרש כדי למיין את האברים במקרה הגרוע הוכיחו תשובתכם הדרכה: חשבו ראשית את מספר העלים בעץ ההכרעה, כלומר את מספר התמורות השונות האפשריות של הקלט לקבלת מערך ממוין פתרונות נבחרים שאלה : א)
T ( ) = T ( ) + log = T ( ) + log( ) + log = T ( ) + log( + ) + + log( ) + log = T () + = log = Θ( log ) T ( ) = T ( ) + ( T ) ( T ) = ( ) + + = T ( ) + = ( 6) + + = 8 T ( 6) + 7 = T ( ) + ( ) / / /+ T () + ( ) = f eve = ( )/ ( )/ ( + )/ T () + ( ) = f odd ב) זהו פתרון מדויק לנוסחת הנסיגה במונחי סדר גודל: ) / T() = )Θ / ( ) /8 ( ) / ( ) / ( ) T() = T( ) + = T + = T + = = T + = = T + / /log = ולכן, = = log T() = T() + loglog = Θ(loglog) ג) כעת, אם נציב = loglog נקבל כמו-כן, ()Θ ()T = בסה"כ קיבלנו:
ד) נוסחת הנסיגה היא Θ(),T() = T(/) + Θ((/)log(/)) + כלומר: T() = T(/) + Θ(log ) נפתור את הנוסחה על ידי הצבה חוזרת: T() = T + log = = T log log T log log + + = + + = T log log log + + + = T log log log + + + = T + log T() log = = + log T() = + log = + log + + log + log ולכן אם = ()T אז הראינו ש: נמצא כעת חסם הדוק ל- T() על ידי מציאת חסם עליון ותחתון הדוקים לביטוי שמצאנו: T() = + log log =Ω ( log ) = (החסם התחתון הושג מכך שלקחנו רק את האיבר של הטור עבור = ) T() = + log = log + log = ( ) + log = = + log = O(log) (האי-שוויון הראשון נובע מכך ש- log(/ ) log לכל האי-שוויון השני נובע מכך שהגדלנו את הטור לטור אינסופי ואילו בשוויון הלפני אחרון השתמשנו בנוסחה לטור גיאומטרי אינסופי) לכן סה"כ הראינו ש- Θ(log) T() =
T( ) T( ) ( ) T ( ) שאלה : א) נצייר את עץ הקריאות הרקורסיביות: מספר פעולות כולל ברמה: log() ( ) T( ) ( ) ( ) ( ) T( ) T( ) T( ) ( ) ( ) log() T () ניתוח מבנה העץ מעלה את המסקנות הבאות: העץ אינו מאוזן: המסלול הארוך ביותר הוא המסלול השמאלי (גודל הקלט קטן בפקטור של ), ואורכו ( log ( log המסלול הקצר ביותר הוא המסלול הימני (גודל הקלט קטן בפקטור של ), ואורכו ( ) אם סוכמים את הפעולות עפ"י רמות, מקבלים: [סכום הפעולות ברמה ה- ( + ( [ = [סכום הפעולות ברמה ה- ], (), ברמה השלישית הוא כלומר סכום הפעולות ברמה הראשונה הוא, ברמה השנייה הוא (), וכך הלאה ברמה הרביעית הוכחה: S = j כלומר, S נסמן את הצמתים ברמה ה- ב-,,,,K ואת הסכום ב- = jr, T() j= = מספר הפעולות בבנים מקיים ש-,, jr, jl, j ל- יש שני בנים סה"כ סכום הפעולות של הבנים של ו- j jl, j jl, + jr, = j+ j = j הוא: j + = ( j, l + j, r) = j = j = j= j= j=, S S כנדרש : ( + ) מצד אחד: ולכן סה"כ ברמה ה- ) ( T (הפעולות הנוספות של הרמה הראשונה בלבד) log ( ) log ( ) j= j= j= מצד שני: T () () = () () = = ולכן סה"כ:, T( ) ומכאן ) T ( ) = Θ(
ב) נצייר את עץ הקריאות הרקורסיביות, בה"כ נניח ש- (a : ) a מספר פעולות כולל ברמה: log/a() ( a a ) Ta ( ) ( a ) a) a ) Taa ( ) T(( a) a ) T ( ) ( ) ( a ( a) ) (( a) ) T(( a) ) (( a) ( a) ) Ta ( ( a) ) T(( a) ( a) ) log/(-a)() T () T() log ( ) ואורכו,( a a log ( ) (, ואורכו ( a) ( a ) ניתוח מבנה העץ מעלה את המסקנות הבאות:, a העץ אינו מאוזן, היות ש- (a ) a אזי המסלול הארוך ביותר הוא המסלול השמאלי (גודל הקלט קטן בפקטור של המסלול הקצר ביותר הוא המסלול הימני (גודל הקלט קטן בפקטור של אם סוכמים את הפעולות עפ"י רמות, מקבלים שבכל רמה מלאה סכום הפעולות ברמה הוא הוכחה: נוכיח באינדוקציה: בסיס: ברמה הראשונה, הפעולות הם, כנדרש j= j הנחה: נסמן את הצמתים ברמה ה- ב-,,,,K אזי מתקיים ש- =, מספר הפעולות בבנים מקיים ש-, jr, jl, j מעבר: לכל- יש שני בנים jr, = ( a) j וש- jl, = a j jl, + jr, = a j+ ( a) j = j הוא: j סה"כ סכום הפעולות של הבנים של ולכן סה"כ ברמה ה- ) +, S = ( + ) = = = : ( כנדרש + j, l j, r j j j= j= j= ( T ( ) log ( (הפעולות הנוספות של על שלם בגובה של המסלול הקצר ביותר) ( T ( ) log ( (הפעולות הנוספות של על שלם בגובה של המסלול הארוך ביותר) ( a ) a מצד אחד: מצד שני: ולכן סה"כ: ), log ( ) T( ) log ( והיות ש- ( a) a T ( ) =Θ( log( )) ומכאן, log ( ) =Θ( log ( )) =Θ( log( )) a ( a)
T() = Θ() T() = Θ() + T(/) + Θ() + T(/) + Θ() + T(/8) + Θ() + Θ() שאלה : א) כאשר 8 המחוברים מתאימים אחד-אחד ל- 8 השורות שב- else (השורה שמתחת ל- for לא נספרה) מכאן T() = T(/) + T(/) + T(/8) + Θ() T() = Θ() for 7 T() = /5 Θ(5 ) + Θ(/5) + T(/5) + Θ() + T(7/) for > 7 ב) כאשר המחובר הראשון נובע מה- bubble sort שב-,() המחובר השני נובע מיצירת המערך B שב-,() המחובר השלישי נובע מ-,(v) המחובר הרביעי נובע מה- Partto שב- (v), והמחובר החמישי נובע מהרקורסיה ב- (v) מכאן T() = T(/5) + T(7/) + Θ() for > 7 הערה: פתרון נוסחת הנסיגה ייתן Θ() T() = כלומר אלגוריתם זה פותר את בעיית ה- Seleto בזמן ליניארי במקרה הגרוע בכיתה נתנו אלגוריתם ליניארי למקרה הממוצע זהו המקרה הראשון של האב log ( ) = log (9) = = 9, = a a b b log b ( ) ( ) ( ) ( a ε = =Ο = ), f O ולכן ε מתקיים ש- = שאלה : א) : T ( ) = 9 T( ) + משפט כי למשל עבור T =Θ ( ) ( ) log ( a ) = log זהו המקרה השני של משפט 5(5) = a= 5, b= b 5 : T ( ) = 5 T( 5) ב) + log b ( ) T ( ) = Θ( log( )) ולכן, f( ) = =Θ ( ) =Θ( האב, כי ) a log ( a ) = log () = a=, b= b : T ( ) = T( ג) + ) משפט האב כי: + log b ( ) ( ) ( ) ( a +ε f = =Ω =Ω ) מתקיים ש- ε I עבור = f ( ) = f( ) = ( ) = מתקיים ש- ( )f זהו המקרה השלישי של b 9 log ( a ) = b log () = a=, b= 5 5 = 9 II עבור T ( ) =Θ( ) : T ( ) = T( ) + 7 5 ולכן ד) זהו המקרה השני של משפט האב T ( ) = Θ(log( )) ולכן, f = =Θ =Θ log b ( ), כי ) a ( ) ( 7 ) (
T=Θ N ( ) ( log ( )) אזי,T () =,, ו- + N,N כך שלכל > ) T ( ) = T( ) + log( ו- שאלה 5: נראה שאם נראה זאת עפ"י הגדרה, כלומר נראה שקיימים log ( ) T( ) log ( ) מתקיים ש- = =, ונראה שלכל מתקיים:, N נסתכל על = log ( ) T( ) log ( ) נוכיח אי שוויון זה באינדוקציה: I בסיס האינדוקציה: עבור =, נשים לב ש- = log(), T() = T() + ואז: T() = log() = log() II הנחת האינדוקציה: נניח שעבור ( =,, ),K מתקיים ש- log() T() log() log() T() log() ש- שלב המעבר: נראה עבור III ואכן, מצד אחד: T ( ) = T( ) + log( ) log ( ) + log( ) = log ( ) + log( ) log ( ) הוכחת האי שוויון האחרון: log ( ) + log( ) log ( ) log ( ) + log( ) log ( ) + (log( ) ) log( ) log ( ) + + log ( ) log( ) log( ) log ( ) היות שלכל log( ) מתקיים ש-, log() אם נלך במעלה החיצים הקבל את הנדרש מצד שני: T ( ) = T( ) + log( ) log ( ) + log( ) = log ( ) + log( ) log ( ) הוכחת האי שוויון האחרון: log ( ) + log( ) log ( ) log() log() + + log() log() log( ) היות שלכל מתקיים ש- (, log( אם נלך במעלה החיצים הקבל את הנדרש, כנדרש ולכן סה"כ: ) log ( ) T( ) log (
שאלה 6: (!) נשים לב שמספר התמורות השונות של אברי הקלט לקבלת מערך ממוין הם בהינתן אלגוריתם כלשהו ה"מתיימר" למיין מערך מסוג זה, נצייר את עץ ההכרעה המתאים לו מתקיימים שני דברים בעץ זה: (!) (מספר העלים בעץ ההכרעה) (מספר העלים בעץ ההכרעה) (כל אחת מהתמורות האפשריות חייבת להיות לפחות בעלה אחד, אחרת האלגוריתם לא פועל נכון על כל הקלטים) h, כאשר h הוא גובה העץ (תכונה זאת נכונה בכל עץ בינארי) h I II משילוב שתי תכונות אלה נקבל: (מספר העלים בעץ ההכרעה) (!) h (!) h log() log(!) h log(!) היות ש- )), log(!) = Θ( log( בפרט מתקיים ש- )), log(!) =Ω( log( ולכן קיים > כך ש- h log(!) log( ) = log( ) ולכן (( h=ω( log( היות שגובה העץ הוא מספר ההשוואות שמבצע האלגוריתם בריצה הגרועה ביות שלו, ניתן לומר שמספר ההשוואות הנדרש כדי למיין את האברים במקרה הגרוע הוא (( )Ω log(