המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר

מצגות קשורות


מצגת בנושא: "תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר"— תמליל מצגת:

1 234127 - מבוא למחשב בשפת MATLAB
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל

2 תרגיל בנושא מיונים סדרת מספרים תיקרא עולה אם כל איבר גדול או שווה מקודמו. באופן דומה נגדיר שסדרה היא יורדת אם כל איבר קטן או שווה מקודמו. סדרת מספרים תיקרא ביטונית אם היא שרשור של שתי סדרות X ו-Y, כאשרX היא סדרה עולה ו-Y היא סדרה יורדת. דוגמה: הסדרה [3,12,15,6,2] היא סדרה ביטונית, כאשרX יכולה להיות [3,12] או [3,12,15]. בנוסף, עבור ווקטור שורה X נגדיר את ההיפוך של X כווקטור המתקבל מהיפוך הסדר של איברי X. דוגמה: אם X = [2,5,8] אזי ההיפוך של X הוא [8,5,2]. השלימו את פקודת המטלאב הבאה, אשר בהינתן וקטורי שורה A ו-B המכילים סדרות עולות, מייצרת סדרה ביטוניתC המתקבלת משרשור ההיפוך שלB ל-A. לדוגמה: אם A=[3,12] ו-B=[2,6,15], אז C תהיה הסדרה [3,12,15,6,2]. C = ; תרגול חזרה כל הזכויות שמורות ©

3 תרגיל בנושא מיונים סדרת מספרים תיקרא עולה אם כל איבר גדול או שווה מקודמו. באופן דומה נגדיר שסדרה היא יורדת אם כל איבר קטן או שווה מקודמו. סדרת מספרים תיקרא ביטונית אם היא שרשור של שתי סדרות X ו-Y, כאשרX היא סדרה עולה ו-Y היא סדרה יורדת. דוגמה: הסדרה [3,12,15,6,2] היא סדרה ביטונית, כאשרX יכולה להיות [3,12] או [3,12,15]. בנוסף, עבור ווקטור שורה X נגדיר את ההיפוך של X כווקטור המתקבל מהיפוך הסדר של איברי X. דוגמה: אם X = [2,5,8] אזי ההיפוך של X הוא [8,5,2]. השלימו את פקודת המטלאב הבאה, אשר בהינתן וקטורי שורה A ו-B המכילים סדרות עולות, מייצרת סדרה ביטוניתC המתקבלת משרשור ההיפוך שלB ל-A. לדוגמה: אם A=[3,12] ו-B=[2,6,15], אז C תהיה הסדרה [3,12,15,6,2]. C = [A B(end:-1:1)] ; תרגול חזרה כל הזכויות שמורות ©

4 המשך התרגיל השלימו את הפונקציה bitonSplit שלהלן המקבלת סדרה ביטונית C ומחזירה שתי סדרות עולות A ו- B כך שמתקיים: C מתקבלת משרשור ההיפוך שלB ל-A. A היא בעלת אורך מקסימלי אפשרי. >> C = [ ]; >> [A B] = bitonSplit(C) A = [ ] B = [2 6] function [A, B] = bitonSplit(C) % split bitonic sequence to 2 sorted sequences ind = max(____________________);%index of split point len = length(C); A = ______________________________; B = ______________________________; לדוגמה: תרגול חזרה כל הזכויות שמורות ©

5 המשך התרגיל השלימו את הפונקציה bitonSplit שלהלן המקבלת סדרה ביטונית C ומחזירה שתי סדרות עולות A ו- B כך שמתקיים: C מתקבלת משרשור ההיפוך שלB ל-A. A היא בעלת אורך מקסימלי אפשרי. >> C = [ ]; >> [A B] = bitonSplit(C) A = [ ] B = [2 6] function [A, B] = bitonSplit(C) % split bitonic sequence to 2 sorted sequences ind = max( find(max(C)==C) );%index of split point len = length(C); A = C(1:ind) ; B = C(end:-1:ind+1) ; לדוגמה: תרגול חזרה כל הזכויות שמורות ©

6 המשך התרגיל ממשו את הפונקציה bitSort המקבלת סדרה ביטונית C ומחזירה סדרה ממויינת (בסדר עולה) של אברי C. לדוגמה: >> C = [ ]; >> bitSort(C) ans = [ ] לצורך מימוש הפונקציה bitSort מותר להשתמש רק בפונקציות העזר הבאות: פונקציית המיזוג merge שהוצגה בהרצאה 13 (ובפרט אין צורך לכתוב אותה מחדש) והפונקציהbitonSplit מהסעיף הקודם. תזכורת: הפונקציה merge מקבלת שני מערכים ממויינים A ו-B וממזגת אותם למערך ממויין חדש C. פתרון: function D = bitSort(C) [A, B] = bitonSplit(C) D = merge(A,B) תרגול חזרה כל הזכויות שמורות ©

7 תזכורת: חיפוש בינארי במערך
הבעיה: נתון מערך a ובו n מספרים ממוינים בסדר עולה. יש למצוא האם מספר x מופיע במערך, והיכן. פתרון רקורסיבי: בסיס הרקורסיה: אם המערך ריק אז x לא נמצא. אחרת: אם x שווה לאיבר האמצעי, אזי מצאנו את x. אם x קטן מהאמצעי, נחפש את x בתת המערך השמאלי. אם x גדול מהאמצעי, נחפש את x בתת המערך הימני. תרגול חזרה כל הזכויות שמורות ©

8 תרגיל בנושא רקורסיה בשאלה זו נגדיר וריאציה של בעיית החיפוש הבינארי שראיתם בהרצאה (הרצאה מס' 10) שתיקרא rfind. הקלט לבעיה החדשה כולל מערך ממויין של מספרים שייקרא a, איבר אותו מחפשים שייקרא x וגבולות low ו-high שמגדירים את איזור החיפוש במערך (ומקיימים 1 ≤ low ≤ high ≤ length(a)). יש להחזיר מספר k המוגדר באופן הבא: אם x נמצא בתת המערך a(low:high), אז k הוא אינדקס מתוך קבוצת הערכים low:high כך ש-a(k) שווה ל-x. אחרת, k=0. >> a = [-1, 4, 6, 8, 10.5]; >> rfind(a,8,2,5) ans = 4 >> rfind(a,8,1,3) ans = 0 לדוגמה: תרגול חזרה כל הזכויות שמורות ©

9 המשך התרגיל השלימו את הקוד של הפונקציה הרקורסיבית rfind במקומות החסרים. function k = rfind(a,x,low,high) if high<low ; return; end mid = round( ); if a(mid) == x k = mid; if a(mid)> x k = rfind(a,x, , ); else תרגול חזרה כל הזכויות שמורות ©

10 המשך התרגיל השלימו את הקוד של הפונקציה הרקורסיבית rfind במקומות החסרים. function k = rfind(a,x,low,high) if high<low k = 0 ; return; end mid = round( (high+low)/2 ); if a(mid) == x k = mid; if a(mid)> x k = rfind(a,x, low , mid-1 ); else k = rfind(a,x, mid+1 , high ); תרגול חזרה כל הזכויות שמורות ©

11 המשך התרגיל נתון מערך מספרים ממוין בשםarr בעל אורך כלשהו, המכיל את המספר 7. איך תשתמשו בפונקציה rfind על מנת למצוא אינדקס k כך ש arr(k)=7? פתרון: k = rfind(arr,7,1,length(arr)) יהי T(n) מספר הפעמים שהפונקציה rfind לעיל מבצעת קריאה לפונקציה round, כאשר גודל תת המערך הוא n (n = high-low+1), וכאשר האיבר x אותו מחפשים אינו נמצא בתת המערך. השלימו את המשוואות הבאות, ונמקו בקצרה את נכונותן. T(1) = T(n) ≤ כתבו ביטוי רקורסיבי עבור T(n) תרגול חזרה כל הזכויות שמורות ©

12 המשך התרגיל נתון מערך מספרים ממוין בשםarr בעל אורך כלשהו, המכיל את המספר 7. איך תשתמשו בפונקציה rfind על מנת למצוא אינדקס k כך ש arr(k)=7? פתרון: k = rfind(arr,7,1,length(arr)) יהי T(n) מספר הפעמים שהפונקציה rfind לעיל מבצעת קריאה לפונקציה round, כאשר גודל תת המערך הוא n (n = high-low+1), וכאשר האיבר x אותו מחפשים אינו נמצא בתת המערך. השלימו את המשוואות הבאות, ונמקו בקצרה את נכונותן. T(1) = 1 T(n) ≤ כתבו ביטוי רקורסיבי עבור :T(n) תרגול חזרה כל הזכויות שמורות ©

13 תרגיל בנושא מטריצות מטריצת הילברט מסדר n היא מטריצהH בגודלnxn המקיימת H(i,j)=1/(i+j-1) לכל i,j. לדוגמה, מטריצת הילברט מסדר 5 היא המטריצה הבאה: H = כתבו פונקציה המקבלת כקלט מספר טבעיn ומחזירה את מטריצת הילברט מסדר n. תרגול חזרה כל הזכויות שמורות ©

14 פתרון דרך אחת: האם צורת הכתיבה הבאה יכולה לעזור לנו?
function H = hilbert(n) i = 1:n; X = repmat(i,n,1); H = 1./(X'+X-1); + האם צורת הכתיבה הבאה יכולה לעזור לנו? איך יוצרים את המטריצות האלו? repmat(i',1,n) repmat(i,n,1) תרגול חזרה כל הזכויות שמורות ©

15 פתרון דרך נוספת: האם צורת הכתיבה הבאה יכולה לעזור לנו?
function H = hilbert(n) i = 1:n; H = 1./(diag(i)*ones(n)+ones(n)*diag(i)-1); + האם צורת הכתיבה הבאה יכולה לעזור לנו? איך יוצרים את המטריצות האלו? diag(i)*ones(n) ones(n)*diag(i) תרגול חזרה כל הזכויות שמורות ©


הורד את "ppt "תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר

מצגות קשורות


מודעות Google