Download presentation
Presentation is loading. Please wait.
1
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997
2
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=15 swap (&a[j],&a[j+1]); }} n=17
3
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=14 swap (&a[j],&a[j+1]); }}
4
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=13 swap (&a[j],&a[j+1]); }}
5
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }}
6
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }}
7
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }} אבר מינימאלי i=1
8
BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} i=1
9
1231156114116319442393564997 for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} אבר מינימאלי שני
10
for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} 1231156114116319442393564997 i= 0,1,…,n-2 j= n-2,n-3,…,i O(1) סיבוכיות מקום נוסף סיבוכיות זמן
11
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף
12
HeapSort תור עדיפויות הוא מבנה נתונים המוגדר ע " י הפעולות הבאות : 1.צור ערימה ריקה MakeHeap(Q) - 2.הכנס רשומה x לערימה - Insert(x,Q) 3.הדפס את הרשומה עם המפתח הגדול ביותר - Max(Q) 4.הוצא את הרשומה עם המפתח הגדול ביותר - DeleteMax(Q) 1.MakeHeap(Q) 2.for (i=0 ;i=n-1;i++) Insert(A[i],Q) 3.for (i=n-1;i=0;i--) 4. {A[i]=Max(Q); DeleteMax(Q)}
13
1.MakeHeap(Q) 2.for (i=0 ;i=n-1;i++) Insert(A[i],Q) 3.for (i=n-1;i=0;i--) 4. {A[i]=Max(Q); DeleteMax(Q)} סיבוכיות מקום נוסף סיבוכיות זמן O(1) O(n log n) O(n)O(n)
14
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort האם אפשר בסיבוכיות מקום ?O(1)
15
1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} 1231156347 12345678 11 9 123115634711 1 23 4567 89
16
1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} 1231 1 56 34 711 1 23 4567 89
17
12 31 1 5 6 34 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
18
12 311 5 6 347 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
19
1231 15 6 34 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
20
1231 15 6 3 4 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל
21
1231 1 56 34 711 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל 1231 1 56 34 711 123456789
22
1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); 4. DeleteMax(A) 5. A[i]=X} סיבוכיות זמן O(?) O(log n) O(n)O(n) O(n log n) O(1) סיבוכיות מקום נוסף O(1)
23
1231 1 56 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
24
1231 1 56 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
25
1231 1 5 63 4 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
26
12 31 1 5 6 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
27
MakeHeap סיבוכיות זמן
28
MakeHeap סיבוכיות זמן
30
הוכחה שניה
31
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort
32
QuickSort 1231156114116319442393564997 41 Partition(a,1,17,pivot) QuickSort(a,1,17) 13 =pivot Choose-pivot
33
1231156114116319442393564997 QuickSort(a,1,12) QuickSort(a,13,17)
34
QuickSort(Key *A, int left, int right) int i, j, p; if (left >= right) return ; p = choose_pivot(A,left,right); i = partition(A,left,right,p); QuickSort(A, left, i-1); QuickSort(A,i,right); 1231156114116319442393564997 left right 41 p= 1231156114116319442393564997 i=13 1231156111631923474144935699
35
Partition(A,left,right,p) i=left; j=right; while (A[i]<p) i++; while (A[j]>p) j--; if (i<=j) { swap(a[i],a[j]); i++; j--; } סיבוכיות זמן 1231156114116319442393564997
36
ניתוח זמן של QuickSort Partition(A,1,n,pivot) QuickSort(A,1,n) QuickSort(A,1,n 1 )QuickSort(A, n 1,n) סיבוכיות זמן סיבוכיות מקום נוסף
37
המקרה הגרוע סבוכיות מקום נוסף סבוכיות זמן
38
המקרה הטוב סבוכיות מקום נוסף סבוכיות זמן
39
המקרה הממוצע נוסחת הנסיגה דומה לנוסחת הנסיגה למספר ההשוואות הנדרש לבניית עץ חיפוש בינרי אקראי. שיטת הפתרון זהה. פרטים בספר הלימוד, פרק 8. סבוכיות זמן בחירה רנדומלית של ציר
40
סבוכיות מקום נוסף ממוצע פתרון
41
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע
42
נראה ממוש ל-QuickSort שיתן סבוכיות מקום נוסף מדויק QuickSort(A, left, right) while (left < right){ p = choose_pivot(A,left,right); i = partition(a,left,right,p); if (i-1 < right – i + 1) QuickSort(A, left, i-1); left = i ; else QuickSort(A, i, right); right = i - 1 ; i leftright leftright
43
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.