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

Post on 18-Dec-2015

244 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

( 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

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

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

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

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

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

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

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

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

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

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

סיבוכיות זמן

BubbleSort

סיבוכיות זמן

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

)( 2nO

)1(O

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

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)

BubbleSort

סיבוכיות זמן

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

)( 2nO

)1(O

HeapSort

)log( nnO

( )O n

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}

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

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

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

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}

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.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.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

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)

12 31

1

5 6

3 4

7 11

MakeHeap

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

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

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

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

1,,12/,2/ nnj

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

4j

12 31

1

5 6

3 4

7 11

MakeHeap

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

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

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

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

1,,12/,2/ nnj

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

3j

12 31

1

5

63

4

7 11

MakeHeap

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

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

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

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

1,,12/,2/ nnj

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

2j

12

31

1

5

6

3 4

7 11

MakeHeap

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

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

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

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

1,,12/,2/ nnj

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

1j

MakeHeap

סיבוכיות זמן

1,,12/,2/ nnj

h1)1(2 h

)2(22 h

))1((2 hhh

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

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

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

BubbleSort

סיבוכיות זמן

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

)( 2nO

)1(O

HeapSort

)log( nnO

)(nO)1(O

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

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

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

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

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

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

)()()(

)1()1(

11 nnTnTcnnT

OT

המקרה הגרוע

)1()1()( nTTcnnT

)1( nTcn

)2()1( ncnccn

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

)),(max()(

)1()1(

11 nnnScnS

OS

)1( nSc )(n

סבוכיות זמן

)()()(

)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

סבוכיות זמן

1

)()(

)(

)1()1(1

111

1

n

nnTnT

cnnT

OTn

n

המקרה הממוצע

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

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

סבוכיות זמן

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

1

))(),(max(

)(

)1()1(1

111

1

n

nnSnS

cnS

OSn

n

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

פתרון

)(log)( nnS

BubbleSort

סיבוכיות זמן

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

)( 2nO

)1(O

HeapSort

)log( nnO

)1(O

QuickSort

)log( nnOממוצע

)(log nOממוצע

מדויק שיתן סבוכיות מקום נוסף 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

BubbleSort

סיבוכיות זמן

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

)( 2nO

)1(O

HeapSort

)log( nnO

)1(O

QuickSort

)log( nnOממוצע

)(log nOממוצע

top related