מיון (sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים...

43
ןןןן( Sorting ) טטט ןןןן ןן: n ןןןןןן. טטט ןןןן ןןן ןןןןןןן: ןןןן ןןןןןןןן ןןןן ןןןן.12 31 1 5 6 11 41 16 3 19 44 23 93 56 4 99 7 12 31 1 5 6 11 41 16 3 19 44 23 93 56 4 99 7

Post on 18-Dec-2015

244 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

( Sorting )מיון

מספרים. n: מערך בן קלט

מאוחסנים בסדר אותם: מערך ובו המספרים פלטעולה.

12 31 1 5 6 11 41 16 3 19 44 23 93 564 99712 31 1 5 6 11 41 16 3 19 44 23 93 564 997

Page 2: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

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

Page 3: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

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](; }}

Page 4: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

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](; }}

Page 5: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

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](; }}

Page 6: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

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](; }}

Page 7: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 31 1 5 6 11 41 163 19 44 23 93 564 997

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

Page 8: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

12 311 5 6 11 41 163 19 44 23 93 564 997

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

Page 9: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 311 5 6 11 41 163 19 4423 93564 997

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](; }}

אבר מינימאלי שני

Page 10: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

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](; }}

12 311 5 6 11 41 163 19 4423 93564 997

i= 0,1,…,n-2j= n-2,n-3,…,iO(1)

O(1)

2

0

1)2(n

i

in

2

0

1n

i

in

1

1

n

k

k

2

)1( nn )( 2nO

סיבוכיות מקום נוסף)1(O

סיבוכיות זמן

Page 11: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

סיבוכיות זמן

סיבוכיות מקוםנוסף

)( 2nO

)1(O

Page 12: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

HeapSort הוא מבנה נתונים המוגדר ע"י הפעולות הבאות:תור עדיפויות

-MakeHeap(Q)צור ערימה ריקה 1.

Insert(x,Q) לערימה - xהכנס רשומה 2.

Max(Q)הדפס את הרשומה עם המפתח הגדול ביותר - 3.

DeleteMax(Q)הוצא את הרשומה עם המפתח הגדול ביותר - 4.

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(}

Page 13: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

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 log n)

O(n log n)

O(n)

Page 14: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

סיבוכיות זמן

סיבוכיות מקוםנוסף

)( 2nO

)1(O

HeapSort

)log( nnO

( )O n

O(1) ?האם אפשר בסיבוכיות מקום

Page 15: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

1.MakeHeap)A(2. for )i=n;i=2;i--( 3. {X=Max)A(; \* X=A[1] *\ 4. DeleteMax)A(5. A[i]=X}

12 311 5 63 4 71 2 3 4 5 6 7 8

119

12 311 5 63 4 7 11

1

2 3

4 5 6 7

8 9

Page 16: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

1.MakeHeap)A(2. for )i=n;i=2;i--( 3. {X=Max)A(; \* X=A[1] *\ 4. DeleteMax)A(5. A[i]=X}

12 31

1

5 6

3 4

7 11

1

2 3

4 5 6 7

8 9

Page 17: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12

31

1

5

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}

Page 18: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12

311

5

6

3 47

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}

Page 19: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1 5

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}

Page 20: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1 5

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}

בסוף נקבל

Page 21: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1

5 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}

בסוף נקבל

12 31

1

5 6

3 4

7 11

1 2 3 4 5 6 7 8 9

Page 22: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

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 log n)

O(1)

O(1)

סיבוכיות מקום נוסף

O(1)

Page 23: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1

5 6

3 4

7 11

MakeHeap

. נגש לתת-עץ של צמת שהוא לא עלה2

. כל עלה הוא תת-עץ ערימה1

. נבדוק אם הוא ערימה ז"א3

][]/2[ וגם ][]/12[ jAjAjAjA

1,,12/,2/ nnj

לתת העץ Sift-downאם לא תבציע j

4j

Page 24: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1

5 6

3 4

7 11

MakeHeap

. נגש לתת-עץ של צמת שהוא לא עלה2

. כל עלה הוא תת-עץ ערימה1

. נבדוק אם הוא ערימה ז"א3

][]/2[ וגם ][]/12[ jAjAjAjA

1,,12/,2/ nnj

לתת העץ Sift-downאם לא תבציע j

3j

Page 25: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31

1

5

63

4

7 11

MakeHeap

. נגש לתת-עץ של צמת שהוא לא עלה2

. כל עלה הוא תת-עץ ערימה1

. נבדוק אם הוא ערימה ז"א3

][]/2[ וגם ][]/12[ jAjAjAjA

1,,12/,2/ nnj

לתת העץ Sift-downאם לא תבציע j

2j

Page 26: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12

31

1

5

6

3 4

7 11

MakeHeap

. נגש לתת-עץ של צמת שהוא לא עלה2

. כל עלה הוא תת-עץ ערימה1

. נבדוק אם הוא ערימה ז"א3

][]2[ וגם ][]12[ jAjAjAjA

1,,12/,2/ nnj

לתת העץ Sift-downאם לא תבציע j

1j

Page 27: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

MakeHeap

סיבוכיות זמן

1,,12/,2/ nnj

h1)1(2 h

)2(22 h

))1((2 hhh

Page 28: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

MakeHeap

סיבוכיות זמן

))1((2)2(2)1(21 12 hhhhh h

hh h

22

3

2

2

2

12

32

hh h

22

3

2

2

2

12

32

h22 n2 )(nO

Page 29: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

222

4

2

3

2

2

2

1432

h

h

32/1

32/116/1

32/116/18/1

32/116/18/14/1

32/116/18/14/12/1

1

2/1

4/1

2

Page 30: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

2 3 4

1 2 3 4

2 2 2 2 2h

hL הוכחה שניה

2 3 2

1

1 1 1 1 1 1 2

2 2 2 2 2 2 2

1 1 1

2 2 2h h

L

h

2 3

1 1 1 1 1

2 2 2 2 2hL L

11

2L L 2L

Page 31: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

סיבוכיות זמן

סיבוכיות מקוםנוסף

)( 2nO

)1(O

HeapSort

)log( nnO

)(nO)1(O

Page 32: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

QuickSort

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

41

Partition)a,1,17,pivot(

QuickSort)a,1,17(

13

=pivot

Choose-pivot

Page 33: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

12 31 1 5 6 11 4116 3 19 4423 93 564 997

QuickSort)a,1,12(QuickSort)a,13,17(

Page 34: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

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);

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

left right

41p=

12 31 1 5 6 11 4116 3 19 4423 93 564 997

i=13

12 311 5 6 11 163 19 234 7 41 44 93 56 99

Page 35: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

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--; }

nO)(סיבוכיות זמן

12 31 1 5 6 11 41 16 3 19 44 23 93 564 997

i j

Page 36: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

QuickSortניתוח זמן של

)()()(

)1()1(

11 nnTnTcnnT

OT

Partition)A,1,n,pivot(

QuickSort)A,1,n(

QuickSort)A,1,n1( QuickSort)A, n1,n(

סיבוכיות זמן

סיבוכיות מקום נוסף)),(max()(

)1()1(

11 nnnScnS

OS

Page 37: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

)()()(

)1()1(

11 nnTnTcnnT

OT

המקרה הגרוע

)1()1()( nTTcnnT

)1( nTcn

)2()1( ncnccn

)( 2nסבוכיות מקום נוסף

)),(max()(

)1()1(

11 nnnScnS

OS

)1( nSc )(n

סבוכיות זמן

Page 38: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

)()()(

)1()1(

11 nnTnTcnnT

OT

המקרה הטוב

)2/()2/()( nTnTcnnT

)2/(2 nTcn

)2/(2 kk

k

nTcncncncn

)log( nn

סבוכיות מקום נוסף

)),(max()(

)1()1(

11 nnnScnS

OS

)2/(nSc )(log n

סבוכיות זמן

Page 39: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

1

)()(

)(

)1()1(1

111

1

n

nnTnT

cnnT

OTn

n

המקרה הממוצע

נוסחת הנסיגה דומה לנוסחת הנסיגה למספר ההשוואות הנדרש לבניית עץ חיפוש בינרי אקראי. שיטת הפתרון זהה. פרטים בספר

8הלימוד, פרק .)log()( nnOnT

סבוכיות זמן

בחירה רנדומלית של ציר

Page 40: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

1

))(),(max(

)(

)1()1(1

111

1

n

nnSnS

cnS

OSn

n

סבוכיות מקום נוסף ממוצע

פתרון

)(log)( nnS

Page 41: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

סיבוכיות זמן

סיבוכיות מקוםנוסף

)( 2nO

)1(O

HeapSort

)log( nnO

)1(O

QuickSort

)log( nnOממוצע

)(log nOממוצע

Page 42: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

מדויק שיתן סבוכיות מקום נוסף QuickSortנראה ממוש ל-

)(log)( nOnS 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

left right

left right

)),(min()( 11 nnnScnS

)2/(nSc )(log)( nOnS

Page 43: מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

BubbleSort

סיבוכיות זמן

סיבוכיות מקוםנוסף

)( 2nO

)1(O

HeapSort

)log( nnO

)1(O

QuickSort

)log( nnOממוצע

)(log nOממוצע