Ort Braude Academic College

‫המחלקה להנדסת תכנה‬
‫חורף ‪2102‬‬
‫מכללת אורט בראודה‬
‫אלגוריתמים ומבנה נתונים‬
‫תרגיל בית מספר ‪1‬‬
‫תאריך הגשה‪ :‬יום ג' ‪ ,22.00.00‬בתרגול‪.‬‬
‫יש לכתוב פתרונות קצרים‪ ,‬מדויקים וברורים‪ .‬פתרונות בלתי ברורים יגררו הורדת נקודות‪.‬‬
‫שאלה ‪1‬‬
‫דרגו את הפונקציות הבאות על פי סדר הגדילה שלהן‪ ,‬מהנמוכה עד הגבוהה אסימפטוטית ע"פ )‪ .(n‬אם יש‬
‫שתי פונקציות או יותר שוות אנא ציינו זאת‪.‬‬
‫‪n‬‬
‫‪n1/ logn‬‬
‫‪2n‬‬
‫‪n2‬‬
‫‪n‬‬
‫‪22‬‬
‫‪ln n‬‬
‫‪log n‬‬
‫)‪log 8 (n2‬‬
‫‪11n7-n4+12n3-8n‬‬
‫)!‪log(n‬‬
‫‪(log n)2‬‬
‫‪n7‬‬
‫‪n4+12n3-8n‬‬
‫‪n2n‬‬
‫‪ln log n‬‬
‫‪2‬‬
‫שאלה ‪2‬‬
‫הוכיחו או הפריכו‪:‬‬
‫)‪Θ(n4)+ O(n)= Θ(n4‬‬
‫‪a.‬‬
‫)‪b. Θ(n3)-O(n2)= Θ(n3‬‬
‫)‪Ω(log n)+ Ω(log log n)= Ω(log2n‬‬
‫)‪n +log n = O(log n‬‬
‫)‪n = Ω(log n‬‬
‫‪log‬‬
‫‪c.‬‬
‫‪d.‬‬
‫‪e.‬‬
‫שאלה ‪3‬‬
‫מצאו את )‪ T(n‬בכל אחת מנוסחאות הנסיגה שלהלן‪ .‬מצאו חסמים הדוקים ככל שתוכלו ונמקו תשובתכם‪ .‬נתון‬
‫כי )‪T(1) = Θ(1), T(2) = Θ(1‬‬
‫א‪n ) + 1 .‬‬
‫(‪T(n) = T‬‬
‫ב‪T(n) = 2T(n-1) + O(1) .‬‬
‫ג‪.‬‬
‫‪T(n) = T(n – 1) + n‬‬
‫ד‪.‬‬
‫‪T(n) = 2T(n/2) + n/log‬‬
‫שאלה ‪4‬‬
‫אפרים שהינו סטודנט במעבדה במבנה נתונים‪ ,‬קיבל לידיו רשימה מקושרת לינארית‪ .‬ברשימה היו שני סוגי‬
‫רשומות "שחורות" ו"לבנות"‪ .‬אפרים נדרש להחליט אם יש יותר "לבנות" או "שחורות"‪ .‬לצורך כך‪ ,‬קיבל תקציב‬
‫מהמכללה בסך ‪ .₪ 4111‬אפרים החליט לקנות מחשב במחיר ‪ 511‬ש"ח בכדי שיוכל להשתמש ביתרת כספו‬
‫לבילויים‪ .‬אי לכך קיבל מחשב ש אינו מסוגל לעשות פעולות אריתמטיות‪ .‬מלבד זה היה המחשב תקין לגמרי‪.‬‬
‫האם יספיק אפרים לבלות‪ ,‬אחרי שיסיים את התכנית?‬
‫מכללת אורט בראודה‬
‫אלגוריתמים ומבנה נתונים‬
‫המחלקה להנדסת תכנה‬
‫חורף ‪2102‬‬
‫כתבו אלגוריתם בשם )‪ ,Color MajorColor( Node * L‬אשר מקבלת את הרשימה ומחזירה את הצבע‬
‫שהוא הרוב‪ .‬האלגוריתם צר יך להתבצע בזמן לינארי‪ ,‬ולרוץ על המחשב של אפרים‪ .‬הניחו שכשנתון מצביע‬
‫לרשומה ‪ ,Node‬החזרת ‪ Node.color‬תדרוש זמן קבוע‪.‬‬
‫שאלה ‪5‬‬
‫מה סיבוכיות הזמן של הקטעים הבאים (במושגים של ‪ ?)‬נמקו‪.‬‬
‫א‪.‬‬
‫)‪int f1(int n‬‬
‫{‬
‫‪int i, result = 1‬‬
‫) ‪for (i = 0; i < n; i++‬‬
‫;‪result *= x‬‬
‫;‪return result‬‬
‫}‬
‫ב‪.‬‬
‫)‪int f2(int n‬‬
‫{‬
‫)‪if( n == 0‬‬
‫;‪return 1‬‬
‫)‪if( n % 2 == 0‬‬
‫;)‪return f2(n/2)* f2(n/2‬‬
‫‪else‬‬
‫;)‪return x*f2(n-1‬‬
‫ג‪.‬‬
‫)‪int f3(int n‬‬
‫{‬
‫)‪if( n == 0‬‬
‫;‪return 1‬‬
‫{ )‪if( n % 2 == 0‬‬
‫;)‪tmp = f3(n/2‬‬
‫;‪return tmp*tmp‬‬
‫}‬
‫‪else‬‬
‫;)‪return x*f3(n-1‬‬
‫בהצלחה!!‬