Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY I STRUKTURY DANYCH WYKŁAD 05 Problem Sortowania Grażyna Mirkowska PJWSTK, semestr zimowy 2002.

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY I STRUKTURY DANYCH WYKŁAD 05 Problem Sortowania Grażyna Mirkowska PJWSTK, semestr zimowy 2002."— Zapis prezentacji:

1

2 ALGORYTMY I STRUKTURY DANYCH WYKŁAD 05 Problem Sortowania Grażyna Mirkowska PJWSTK, semestr zimowy 2002

3 litopad 2002G. Mirkowska, ASD 05 Sortowanie2 Plan wykładu 4 Sformułowanie problemu 4 Sortowanie przez porównywanie elementów –Sortowanie przez wstawianie –Sortowanie przez selekcję –Operacja scalania ciągów uporządkowanych –Sortowanie przez scalanie

4 litopad 2002G. Mirkowska, ASD 05 Sortowanie3 Sformułowanie problemu Dany jest ciąg e elementów e 1,e 2,..., e n należących do pewnej liniowo uporządkowanej przestrzeni. Znaleźć taką permutację i 1, i 2,...,i n liczb 1,..., n aby e i1 e i2... e in Znaleźć taką funkcję różnowartościową i na f : {1,2...,n} {e 1,e 2,..., e n }, że dla każdego i

5 litopad 2002G. Mirkowska, ASD 05 Sortowanie4 Sortowanie przez selekcję Metoda Sortowanie odbywa się w n-1 przebiegach. W i-tym przebiegu szukamy i-tego najmniejszego elementu. Algorytm { for i := 1 to n-1 do min := i; j := i+1; while j < n+1 do if e[j] < e[min] then min := j fi od; swap(e[i],e[min]); od } Odcinek uporządkowany

6 litopad 2002G. Mirkowska, ASD 05 Sortowanie5 Diagram przepływu i := 1 i < n Znajdź x takie, że x = minimum( e[i],..., e[n]) Zamień miejscami x i e[i] i := i+1 tak nie e[1]... e[i-1] {e[i],...,e[n]} x {e[i],...,e[n]} e[1]... e[i-1] e[i] {e[i+1],...,e[n]} e[1]... e[i-1] {e[i],...,e[n]}

7 litopad 2002G. Mirkowska, ASD 05 Sortowanie6 Koszt algorytmu Twierdzenie Algorytm Selection_sort jest poprawnym rozwiązaniem problemu sortowania. W dowolnej strukturze danych, której elementy są liniowo uporządkowane przez relację, algorytm zatrzymuje się dla dowolnych danych i daje w wyniku ciąg uporządkowany niemalejąco. A. Jeśli operacją dominującą jest porównywanie elementów: T(n) = n-1 + n = n(n-1)/2 = (n 2 ) B. Jeśli operacją dominującą jest zamiana elementów T(n) = 1*(n-1) = n-1 = (n)

8 litopad 2002G. Mirkowska, ASD 05 Sortowanie7 Sortowanie przez wstawianie Sortowanie odbywa się w n -1 przebiegach. W i-tym przebiegu elementy na pozycjach 1...(i-1) są już uporządkowane, a wstawiamy i-ty element przepychając go do przodu na właściwe miejsce, tak by stworzył wraz z innymi ciąg uporządkowany długości i. Odcinek uporządkowany i-ty element X itd 48

9 litopad 2002G. Mirkowska, ASD 05 Sortowanie8 Schemat algorytmu i := 2 i < n+1 Umieść e[i] wśród elementów e[1],e[2],...e[i-1], przesuwając elementy większe o jedno miejsce w prawo, tak by ciąg i-pierwszych elementów był uporządkowany start Tak Nie i := i+1 stop e[1]... e[i-1], i < n+2 e[ 1]... e[i-1], i

10 litopad 2002G. Mirkowska, ASD 05 Sortowanie9 Algorytm Insertion_sort {for i := 2 to n do j := i; pom := e[i]; while ( j>1 andif e[j-1]> pom ) do e[j] := e[j-1]; j := j-1 od; e[j] := pom od} e[ 1]... e[i-1] e[ 1]... e[j-1] pom=e[i], j=i pom< e[ j+1]... e[i], pom

11 litopad 2002G. Mirkowska, ASD 05 Sortowanie10 Poprawność sortowania przez wstawianie Algorytm sortowania przez wstawianie poprawnie rozwiązuje problem sortowania w każdej liniowo uporządkowanej strukturze danych. Algorytm sortowania przez wstawianie jest, w każdej liniowo uporządkowanej strukturze danych, całkowicie poprawny ze względu na warunek początkowy n>0 i warunek końcowy ( 1

12 litopad 2002G. Mirkowska, ASD 05 Sortowanie11 Koszt sortowania przez wstawianie W(n) = i=2...n (koszt maksymalny pętli wewnętrznej) = i=2...n (i-1) = n(n-1)/2 = O(n 2 ) A(n) = i=2...n (koszt średni pętli wewnętrznej)= Element pom z prawdopodobieństwem 1/i może zająć dowolną z pozycji od 1 do i. Operacja dominująca - porównywanie elementów. = i=2...n ( j=1...i j*(1/i)) = i=2...n (1/i)(i (i+1))/2 = (n+1)(n+2)/ = (1/4)n 2 +O(n)

13 litopad 2002G. Mirkowska, ASD 05 Sortowanie12 Sortowanie przez scalanie (1) Dzielimy zadanie posortowania całego ciągu na dwa podzadania: posortowania jego lewej i prawej połowy. (2) Gdy obie części tworzą już ciągi uporządkowane, wtedy scalamy je otrzymując rozwiązanie.

14 litopad 2002G. Mirkowska, ASD 05 Sortowanie13 Przykład

15 litopad 2002G. Mirkowska, ASD 05 Sortowanie14 Operacja scalania Dane są dwa ciągi X i Y, uporządkowane niemalejąco, x 1,...x n i y 1,...y m. Utworzyć ciąg e=e 1,...e n+m złożony z elementów obu ciągów uporządkowany niemalejąco. Wp = {n>0 m>0, x 1... x n i y 1... y m } Wk = { e 1... e n+m, ( i n+m)( j)( e i = x j lub e i = y j )}

16 litopad 2002G. Mirkowska, ASD 05 Sortowanie15 Algorytm scalania {i:=1; j := 1; k :=1, while (i n and j m) do if x[i]< y[j] then e[k] := x[i]; i := i +1 else e[k] := y[j]; j := j +1 fi; k := k+1; od; if ( j > m) then for i := i to n do e[k] := x[i]; k := k+1 od Else for j := j to m do e[k] := y[j]; k := k+1 od} {k= i+j-1, e[1]... e[k-1] i wszystkie elementy x[1],...,x[i-1] oraz y[1],...,y[j-1] zostały już umieszczone na pozycjach od 1 do k-1 w ciągu e.} O(n+m)

17 litopad 2002G. Mirkowska, ASD 05 Sortowanie16 Specyfikacja procedury scal(k,x,l) Wersja procedury scal (k,x,l) użyta w algorytmie Sortowania przez scalanie ma następującą specyfikację Wp = {k x l e[k] e[k+1] … e[x] e[x+1] e[x+2] … e[l]} Wk = {e[k] e[k+1] … e[x] e[x+1] … e[l] } Twierdzenie (*) Procedura scal(k, x,l) zastosowana do dowolnego ciągu e[1],...,e[n] jest całkowicie poprawna ze względu na podaną wyżej specyfikację.

18 litopad 2002G. Mirkowska, ASD 05 Sortowanie17 Sortowanie przez scalanie procedure MS(k,l : integer); begin if l>k then x := (k+l) div 2; MS(k,x); MS(x+1,l); scal (k,x,l) fi end MS; Jeśli k=l, to jest tylko jeden element w naszym ciągu. W tym wywołaniu rozważamy lewą połowę danego ciągu Z założenia indukcyjnego : e[k]... e[x] W tym wywołaniu rozważamy prawą połowę danego ciągu Z założenia indukcyjnego :e[x+1]... e[l] Na mocy Tw (*) : e[k]... e[l]

19 litopad 2002G. Mirkowska, ASD 05 Sortowanie18 Koszt algorytmu Merge_Sort Załóżmy, że n = 2 p. wtedy T(n) = T(n/2) + T(n/2) + cn T(1) = 0 T(n) = (n lg (n)) Po podstawieniu mamy T(2 0 ) = 0 T(2 p ) = 2 T(2 p-1 ) +c n T(2 p ) = 2 T(2 p-1 ) + c2 p = 2(2T(2 p-2 ) +c 2 p-1 ) + c2 p = 2 2 T(2 p-2 ) + c2 p + c2 p =...= 2 p T(2 0 ) + cp 2 p = ( n lg n)


Pobierz ppt "ALGORYTMY I STRUKTURY DANYCH WYKŁAD 05 Problem Sortowania Grażyna Mirkowska PJWSTK, semestr zimowy 2002."

Podobne prezentacje


Reklamy Google