Upload
tamika
View
60
Download
5
Embed Size (px)
DESCRIPTION
מבוא למחשב בשפת Matlab. הרצאה 13 : מיון על ידי מיזוג. הרצאה 12:. נכתב על-ידי שלמה מורן, מבוסס על שקפים של איתן אביאור, ראובן בר יהודה וסילביו מיקלי. תזכורת: חסם תחתון על מספר ההשוואות הדרוש למיון. - PowerPoint PPT Presentation
Citation preview
Matlabמבוא למחשב בשפת
: מיון על ידי מיזוג.13הרצאה
:12הרצאה
איתן אביאור, ראובן בר יהודה וסילביו נכתב על-ידי שלמה מורן, מבוסס על שקפים שלמיקלי.
תזכורת: חסם תחתון על מספר ההשוואות הדרוש למיון.
אברים חייב לבצע לפחות כ nניתן להראות שכל אלגוריתם למיון של •
[nlog(n)-n השוואות. עבור ]20,000,000 מדובר בכ 1,000,000
מיליארד השוואות הנדרשות על ידי שני 500השוואות בלבד )יחסית ל
האלגוריתמים שראינו בשיעור שעבר(.
השאלה הבאה המתבקשת: האם קיים אלגוריתם למיון המסתפק ב •
nlog(n)?השוואות
תשובה: כן. למשל האלגוריתם מיון על ידי מיזוג שנלמד היום. •
13הרצאה מבוא למדעי המחשב במטלאב 2
מיון מיזוג
הוא שיטה למיון (Merge Sortמיון מיזוג )• תת סדרות ממוינות מיזוגסדרה על ידי
שלה.האלגוריתם משמש בפונקציה למיזוג מערכים •
השוואות m+n-1ממוינים, הדורשת לכל היותר m,nלמיזוג מערכים ממוינים שאורכיהם
בהתאמה.בשלב ראשון, נגדיר את "בעיית המיזוג" ונכתב •
אלגוריתם יעיל לפתרונה.
13הרצאה מבוא למדעי המחשב במטלאב 3
בעיית המיזוג
.n בגודל B ו m בגודל A של מספרים: ממוינים: שני מערכים קלט•
.B ו A המכיל את אברי m+n בגודל C: מערך ממוין פלט•
מגבלה: מותר להשתמש בהשוואות בלבד.•
:אלגוריתם•
, מהקטן לגדול, באופן הבא:A,B ע"י סריקת המערכים Cנבנה את את האיבר היותר קטן מבין C, נעתיק ל B או לסוף Aכל זמן שלא הגענו לסוף –
, ונתקדם לאבר הבא במערך ממנו העתקנו.B וAהאיברים הבאים ב
לאחר שנגיע לקצה אחד המערכים, נעתיק את האיברים הנותרים מהשני.–
(אחרי כל השוואה מועבר אבר m+n-1: לכל היותר מספר השוואות נדרש•
למקומו במערך החדש, והאבר האחרון מועבר ללא צרך בהשוואה). מספר
ההשואות הוא לינארי בארך הקלט.
13הרצאה מבוא למדעי המחשב במטלאב 4
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
מיזוג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
מיון מיזוג רקורסיבי
הוא שיטה למיון (Recursive Merge Sortמיון מיזוג רקורסיבי )•סדרה בה מחלקים את הסדרה לשני חצאים שלאחר מיונם (באופן
רקורסיבי) ממזגים אותם.:השיטה•
– הסדרה ממוינת – חזור.2אם אורך הסדרה קטן מ-–חלק את הסדרה לשני חצאים,–מיין כל אחד משני החצאים (ע"י קריאה רקורסיבית), –מזג את שני החצאים –
13הרצאה מבוא למדעי המחשב במטלאב 13
מיון מיזוג רקורסיבי
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
הדגמה )ויקיפדיה(
15
יהרסקו רשתריפ
קיפול רקורסיה
הוכחת נכונות מיון מיזוג רקורסיבי
אינדוקציה על גדל המערך. מוחזר ממוין.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
בשקפים הבאים נראה דרך להעריך את מספר ההשוואות הנדרש
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.
Recurrence solving
Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.
Recursion tree
Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.
T(n)
Recursion tree
Solve T(n) = 2T(n/2) + cn, where c > 0 is constant.
T(n/2) T(n/2)
cn
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
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)
…
…
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)
…
…
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
…
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
…
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
…
…
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
…
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
…
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)
…
מספר השוואות במיון מיזוג: הוכחה באינדוקציה
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
– מיון סיכום
ידועים כיום מספר רב של אלגוריתמים למיון. ניתן לחלקם •לשתי משפחות:
האלגוריתמים ה"פשוטים" (מקס, בועות):• O(n2): סיבוכיות הזמן הינה ריבועית–סיבוכיות המקום* הינה קבועה.–
אלגוריתמים אופטימליים מבחינת מספר השוואות (מיון •מיזוג).
nlog(n)סיבוכיות הזמן הינה – הינה לינארית. קיימים mergesortסיבוכיות המקום של –
אלגוריתמים בעלי סיבוכיות זמן דומה וסיבוכיות מקום קבועה.
13הרצאה מבוא למדעי המחשב במטלאב 31