מבוא למחשב בשפת Matlab

25
תתתת תתתתת תתתתMatlab תתתתת13 : תתתת תת תתת תתתתת. תתתתת12 : ללל לללל לללל, ללללל לל ללללל לל- לללל לל לללל לללללל, ללללל לל ללללל ללללללל ללללל.

description

מבוא למחשב בשפת Matlab. הרצאה 13 : מיון על ידי מיזוג. הרצאה 12:. נכתב על-ידי שלמה מורן, מבוסס על שקפים של איתן אביאור, ראובן בר יהודה וסילביו מיקלי. תזכורת: חסם תחתון על מספר ההשוואות הדרוש למיון. - PowerPoint PPT Presentation

Transcript of מבוא למחשב בשפת Matlab

Page 1: מבוא למחשב בשפת  Matlab

Matlabמבוא למחשב בשפת

: מיון על ידי מיזוג.13הרצאה

:12הרצאה

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

שלמה
חורף 11 (לרפואנים) רק מיון מיזוג (כולו) בהרצאה זו. שעה ראשונה עד מיון מיזוג (הצגת התכנית). הספקתי הכל בזמן
Shlomo Moran
אביב 14: החלפתי מיון על ידי מיזוג בשקפים של ראובן (שבחלקם נלקחו מסילביו מיקלי)
Page 2: מבוא למחשב בשפת  Matlab

תזכורת: חסם תחתון על מספר ההשוואות הדרוש למיון.

אברים חייב לבצע לפחות כ nניתן להראות שכל אלגוריתם למיון של •

[nlog(n)-n השוואות. עבור ]20,000,000 מדובר בכ 1,000,000

מיליארד השוואות הנדרשות על ידי שני 500השוואות בלבד )יחסית ל

האלגוריתמים שראינו בשיעור שעבר(.

השאלה הבאה המתבקשת: האם קיים אלגוריתם למיון המסתפק ב •

nlog(n)?השוואות

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

13הרצאה מבוא למדעי המחשב במטלאב 2

Page 3: מבוא למחשב בשפת  Matlab

מיון מיזוג

הוא שיטה למיון (Merge Sortמיון מיזוג )• תת סדרות ממוינות מיזוגסדרה על ידי

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

השוואות m+n-1ממוינים, הדורשת לכל היותר m,nלמיזוג מערכים ממוינים שאורכיהם

בהתאמה.בשלב ראשון, נגדיר את "בעיית המיזוג" ונכתב •

אלגוריתם יעיל לפתרונה.

13הרצאה מבוא למדעי המחשב במטלאב 3

Page 4: מבוא למחשב בשפת  Matlab

בעיית המיזוג

.n בגודל B ו m בגודל A של מספרים: ממוינים: שני מערכים קלט•

.B ו A המכיל את אברי m+n בגודל C: מערך ממוין פלט•

מגבלה: מותר להשתמש בהשוואות בלבד.•

:אלגוריתם•

, מהקטן לגדול, באופן הבא:A,B ע"י סריקת המערכים Cנבנה את את האיבר היותר קטן מבין C, נעתיק ל B או לסוף Aכל זמן שלא הגענו לסוף –

, ונתקדם לאבר הבא במערך ממנו העתקנו.B וAהאיברים הבאים ב

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

(אחרי כל השוואה מועבר אבר m+n-1: לכל היותר מספר השוואות נדרש•

למקומו במערך החדש, והאבר האחרון מועבר ללא צרך בהשוואה). מספר

ההשואות הוא לינארי בארך הקלט.

13הרצאה מבוא למדעי המחשב במטלאב 4

Page 5: מבוא למחשב בשפת  Matlab

610 2584

הדגמת אלגוריתם המיזוג

1 1 3 5 13 21 55 89

0 2 8 34 144

1 1 3 5 13 21 55 89

0 2 8 34 144

1 1 3 5 13 21 55 89

0 2 8 34 144

0

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5 8

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5 8 13

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5 8 13 21

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5 8 13 21 34 55

1 1 3 5 13 21 55 89

0 2 8 34 144

0 1 1 2 3 5 8 13 21 34 55 89

1 1 3 5 13 21 55 89

0 2 8 34 144 610 2584

0 1 1 2 3 5 8 13 21 34 55 89

1 1 3 5 13 21 55 89

0 2 8 34 144 610 2584

0 1 1 2 3 5 8 13 21 34 55 89 144

1 1 3 5 13 21 55 89

0 2 8 34 144 610 2584

0 1 1 2 3 5 8 13 21 34 55 89 144 610

1 1 3 5 13 21 55 89

0 2 8 34 144 610 2584

0 1 1 2 3 5 8 13 21 34 55 89 144 610 2584

13הרצאה מבוא למדעי המחשב במטלאב 5

Page 6: מבוא למחשב בשפת  Matlab

מיזוג1. function c = merge(a,b)2. % given non decreasing sorted arrays a,b3. % return in c the sorted merge of a and b4. n_a = length(a); n_b = length(b); 5. n_c = n_a + n_b; c = zeros(1,n_c);6. i_a = 1; i_b = 1;7. for i_c = 1 : n_c;8. if i_b > n_b 9. c(i_c) = a(i_a);10. i_a = i_a +1;11. elseif i_a > n_a12. c(i_c) = b(i_b);13. i_b = i_b +1;14. elseif a(i_a) < b(i_b)15. c(i_c) = a(i_a);16. i_a = i_a +1;17. else % a(i_a) >= b(i_b)18. c(i_c) = b(i_b);19. i_b = i_b +1;20. end21. end

6

Page 7: מבוא למחשב בשפת  Matlab

מיון מיזוג רקורסיבי

הוא שיטה למיון (Recursive Merge Sortמיון מיזוג רקורסיבי )•סדרה בה מחלקים את הסדרה לשני חצאים שלאחר מיונם (באופן

רקורסיבי) ממזגים אותם.:השיטה•

– הסדרה ממוינת – חזור.2אם אורך הסדרה קטן מ-–חלק את הסדרה לשני חצאים,–מיין כל אחד משני החצאים (ע"י קריאה רקורסיבית), –מזג את שני החצאים –

13הרצאה מבוא למדעי המחשב במטלאב 13

Page 8: מבוא למחשב בשפת  Matlab

מיון מיזוג רקורסיבי

1. function b = msort(a)2. if length(a) = 13. b = a;4. return5. end6. m = ceil(length(a)/2);7. b = merge(msort(a(1:m)),

msort(a(m+1:end)));

14

Page 9: מבוא למחשב בשפת  Matlab

הדגמה )ויקיפדיה(

15

יהרסקו רשתריפ

קיפול רקורסיה

Page 10: מבוא למחשב בשפת  Matlab

הוכחת נכונות מיון מיזוג רקורסיבי

אינדוקציה על גדל המערך. מוחזר ממוין.1בסיס: מערך בגודל

ממוינים נכון, nשלב מעבר: נניח מערכים בגודל קטן מ . במקרה זה מתקיים: n>1 בגודלaויהי נתון מערך

m = floor(n/2) < n., הקריאות 7לכן, מהנחת האינדוקציה, בעת ביצוע שורה

הרקורסיביות: msort(a(1:m)), msort(a(m+1:end))

ממוינים.a(m+1:n) ו a(1:m) מחזירות את תתי המערכים 7מכאן, ומנכונות אלגוריתם המיזוג, לאחר ביצוע שורה

ממוין.aמערך

13הרצאה מבוא למדעי המחשב במטלאב 16

בשקפים הבאים נראה דרך להעריך את מספר ההשוואות הנדרש

Page 11: מבוא למחשב בשפת  Matlab

Time Complexity of Merge-Sort )presentation by Silvio Micali, MIT(

MERGE-SORT a(1:n)

1. If n < 2, done2. Recursively sort

a(1 : n/2) and a(n/2 + 1 : n)3. “Merge” the two sorted lists

T(n)

1. O(1)2. 2T(n/2)

3. O(n)

T(n) =

O(1) if n < 2;

2T(n/2) + O(n) if n > 1.

Page 12: מבוא למחשב בשפת  Matlab

Recurrence solving

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

Page 13: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

T(n)

Page 14: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

T(n/2) T(n/2)

cn

Page 15: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

T(n/4) T(n/4) T(n/4) T(n/4)

cn/2 cn/2

Page 16: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

Page 17: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

Page 18: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

cn

Page 19: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

cn

cn

Page 20: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

cn

cn

cn

Page 21: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

h = lg n

cn

cn

cn

Q(n)

#leaves = n

Page 22: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

h = lg n

cn

cn

cn

Q(n)

Total = ?

#leaves = n

Page 23: מבוא למחשב בשפת  Matlab

Recursion tree

Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.

cn

cn/4 cn/4 cn/4 cn/4

cn/2 cn/2

Q(1)

h = lg n

cn

cn

cn

#leaves = n

O(n)

Total = O(n lg n)

Page 24: מבוא למחשב בשפת  Matlab

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

nlog2(n)טענה: במיון מיזוג רקורסיבי מבוצעות פחות מ השוואות בין אברי הסדרה.

n=2kנוכיח את הטענה עבור

מספר ההשוואות המקסימלי המבוצע על סדרת קלט T(n)יהי .T(n)< nlog2(n). צ.ל. n=2kבאורך השוואות.0 מתבצעות n=1=20עבור

.2n, ונוכיח נכונות עבור nנניח שהטענה נכונה עבור

T(2n)≤2T(n)+2n =2nlog2(n)+2n =2n[log2(n)+1] = (2n)log2(2n)

פעמיים מיוןשל סדרות

nבגודל מיזוג

13הרצאה מבוא למדעי המחשב במטלאב 30

Page 25: מבוא למחשב בשפת  Matlab

– מיון סיכום

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

האלגוריתמים ה"פשוטים" (מקס, בועות):• O(n2): סיבוכיות הזמן הינה ריבועית–סיבוכיות המקום* הינה קבועה.–

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

nlog(n)סיבוכיות הזמן הינה – הינה לינארית. קיימים mergesortסיבוכיות המקום של –

אלגוריתמים בעלי סיבוכיות זמן דומה וסיבוכיות מקום קבועה.

13הרצאה מבוא למדעי המחשב במטלאב 31

shlomo moran
הערה (בעקבות שיחה עם שי): מיון בעזרת heapsort מאפשר סבוכיות זמן nlogn וסבוכיות מקום קבועה