מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
BubbleSort 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
BubbleSort 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]); }}
BubbleSort 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]); }}
BubbleSort 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]); }}
BubbleSort 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]); }}
BubbleSort 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
BubbleSort 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
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]); }} אבר מינימאלי שני
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]); }} i= 0,1,…,n-2 j= n-2,n-3,…,i O(1) סיבוכיות מקום נוסף סיבוכיות זמן
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף
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)}
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)
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort האם אפשר בסיבוכיות מקום ?O(1)
1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}
MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל
MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל
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)
MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j
MakeHeap סיבוכיות זמן
MakeHeap סיבוכיות זמן
הוכחה שניה
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort
QuickSort Partition(a,1,17,pivot) QuickSort(a,1,17) 13 =pivot Choose-pivot
QuickSort(a,1,12) QuickSort(a,13,17)
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); left right 41 p= i=
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--; } סיבוכיות זמן
ניתוח זמן של QuickSort Partition(A,1,n,pivot) QuickSort(A,1,n) QuickSort(A,1,n 1 )QuickSort(A, n 1,n) סיבוכיות זמן סיבוכיות מקום נוסף
המקרה הגרוע סבוכיות מקום נוסף סבוכיות זמן
המקרה הטוב סבוכיות מקום נוסף סבוכיות זמן
המקרה הממוצע נוסחת הנסיגה דומה לנוסחת הנסיגה למספר ההשוואות הנדרש לבניית עץ חיפוש בינרי אקראי. שיטת הפתרון זהה. פרטים בספר הלימוד, פרק 8. סבוכיות זמן בחירה רנדומלית של ציר
סבוכיות מקום נוסף ממוצע פתרון
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע
נראה ממוש ל-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
BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע