Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
ALGORYTMY I STRUKTURY DANYCH
WYKŁAD 05 c.d. Sortowanie Grażyna Mirkowska PJWSTK, 2004
2
G. Mirkowska, ASD_05 Sortowanie c.d.
Plan wykładu Drzewa decyzyjne Dolne oszacowanie złożoności problemu sortowania przez porównywanie elementów Sortowanie z kosztem liniowym Sortowanie koszykowe Sortowanie przez zliczanie G. Mirkowska, ASD_05 Sortowanie c.d.
3
G. Mirkowska, ASD_05 Sortowanie c.d.
Drzewo decyzyjne Niech SORT oznacza dowolny algorytm rozwiązujący problem sortowania przez porównywanie elementów. Drzewem decyzyjnym dla algorytmu SORT nazywamy drzewo lokalnie pełne (tzn. każdy wierzchołek ma 0 albo 2 następniki) takie, że - etykietami wierzchołków są zdania opisujące relacje między elementami, - etykietami liści są uporządkowane permutacje wynikające z relacji między elementami na ścieżce prowadzącej do tego liścia. Definicja G. Mirkowska, ASD_05 Sortowanie c.d.
4
G. Mirkowska, ASD_05 Sortowanie c.d.
Przykład Drzewo decyzyjne dla algorytmu Selection_sort zastosowanego do ciągu 3 elementowego e1,e2, e3. e1 e2 e1 e3 e2 e3 e2 e1 . . . e1,e2,e3 e1,e3, e2 e3,e2,e1 e3,e1,e2 Tak Nie G. Mirkowska, ASD_05 Sortowanie c.d.
5
G. Mirkowska, ASD_05 Sortowanie c.d.
Przykład Drzewo decyzyjne dla algorytmu Insertion_sort zastosowanego do 3 elementowego ciągu e1,e2, e3. e1 e2 Tak Nie e2 e3 e3 e1 e1,e2, e3 e2 e3 e2, e1,e3 e1 e3 e1,e3,e2 e3,e1,e2 e2,e3,e1 e3,e2,e1 G. Mirkowska, ASD_05 Sortowanie c.d.
6
Własności drzew decyzyjnych
Jeżeli f jest liczbą liści w drzewie binarnym, a h jego wysokością, to (i) f 2 h (ii) h lg f h h+1 y Lemat 1 Dowód : (i) Indukcja po h. y=Nie- liście na poziomie h Krok indukcyjny: f 2y + (2 h - y) = y+2 h 2 h + 2 h (ii) Z (i) przez logarytmowanie. G. Mirkowska, ASD_05 Sortowanie c.d.
7
Oszacowanie w najgorszym przypadku
Każde drzewo decyzyjne dla algorytmu sortującego ciąg n-elementowy przez porównywanie elementów, ma co najmniej wysokość log n! Lemat2 Drzewo decyzyjne ma co najmniej n! liści. Stąd i z lematu 1 - teza Każdy algorytm sortujący ciąg n elementowy przez porównywanie elementów musi wykonać co najmniej log n! porównań w najgorszym wypadku. Uzasadnij lgn! = Teta(n lg n). Lemat3 W(n) n lg n G. Mirkowska, ASD_05 Sortowanie c.d.
8
Oszacowanie sumy długości ścieżek
Niech D będzie drzewem binarnym, a p(x) - długość ścieżki od korzenia do liścia x. Epl(D) = S x D p(x) Lemat4 Wśród drzew lokalnie pełnych o f liściach Df wartość epl(Df) jest najmniejsza, gdy liście znajdują się jedynie na dwóch ostatnich poziomach. Poziom k, k h-2 D*f . . . x y1 y2 y Df . . . x y1 y2 y Poziom h -1 Dowód: epl(D*) = epl(D) -2h +(h-1) -k +2(k+1)< 0 Czyli epl(D*) < epl(D) Epl(D*f) < Epl(Df) G. Mirkowska, ASD_05 Sortowanie c.d.
9
G. Mirkowska, ASD_05 Sortowanie c.d.
Minimalne epl. Min {epl(Df): Df D}= f lg f + 2( f-2 lg f ) Lemat5 Dowód : Niech Df będzie drzewem, dla którego epl osiąga minimum. Przypadek 1 f = 2p . Wszystkie liście są na poziome p Poziom p Df epl(Df)= f * lg f G. Mirkowska, ASD_05 Sortowanie c.d.
10
G. Mirkowska, ASD_05 Sortowanie c.d.
Minimalne epl c.d. Przypadek p-1 < f < 2 p. Z lematu 1 h lg f x Df Z lematu 3 wszystkie liście są na poziomach h i h-1. Czyli h = lg f. h Epl(Df)= x (h-1) + z h = sufit(lg f) = podloga(lg f) + 1 H nie może być większe od sufit(lg f) bo w przypadku drzewa które ma liscie tylko na 2 poziomach mamy Gdyby h= sufit(lg f) +1 wtedy f= 2^(h-1) –y(nie-liście na poziomie h-1) + 2y > 2^(h-1) + 2^sufil(lg f) >f Inaczej, f > 2^(h-1), bo ma liście też na poziomie h , a każdy wierzchołek z poziomu h-1 daje albo jest liściem albo daje co najmniej jeden liść na poziomie h. Stąd 2^h <2f czyli h< lg2f=1+lgf <= sufit(lg f). = (2 h -f)(h-1) + (2f -2h) h = hf + f - 2 h z Liście na poziomie h-1 x = f - z Liście na poziomie h cbdo z =2( 2 h-1 - x) G. Mirkowska, ASD_05 Sortowanie c.d.
11
Lemat6 Dowód : Ostatecznie Koszt średni
Średnia liczba porównań wykonywanych przez dowolny algorytm sortujący ciąg n-elementowy przez porównywanie elementów jest nie mniejsza niż lg n! . Lemat6 Średnia wysokość drzewa decyzyjnego h epl min(D)/n! Dowód : Ale dla dowolnego x, x/2 2 lgx x h (n! lg n! + 2( n!-2 lg n! ))/n! Ale 2( n!-2 lg n! )/n! 0 Ostatecznie h lg n! G. Mirkowska, ASD_05 Sortowanie c.d.
12
G. Mirkowska, ASD_05 Sortowanie c.d.
Wniosek Dolnym ograniczeniem na liczbę porównań wykonanych przez algorytm sortujący przez porównywanie elementów jest w przypadku średnim (n lg n). Wniosek1 Algorytm QuickSort jest optymalnym algorytmem ze względu na średnią złożoność czasową. Wniosek2 G. Mirkowska, ASD_05 Sortowanie c.d.
13
Sortowanie z kosztem liniowym
Załóżmy, że dane wejściowe a[1],...,a[n] są generowane losowo z rozkładem jednorodnym oraz że a[i] {0,..., k-1} dla pewnej ustalonej (niezbyt dużej) liczby k. Sortowanie koszykowe Krok 1. Utworzyć k pustych koszyków o numerach od 0 do k-1. Krok2 i-ty element ciągu wkładamy do koszyka o numerze a[i]. Krok 3. Wyjmujemy elementy z kolejnych koszyków od 0 do k-1, otrzymując posortowany ciąg. (k) Czasu na tworzenie koszyków Koszt : (n) Czasu na rozrzucanie elementów G. Mirkowska, ASD_05 Sortowanie c.d.
14
Sortowanie przez zliczanie
Założenie: dany n elementowy ciąg o elementach z przedziału [1,k], k N. Metoda Metoda polega na znalezieniu dla każdego x liczby elementów mniejszych równych niż x. Pozwoli to ustalić właściwą pozycję x w tablicy wyjściowej. 7 ma trafić na pozycję 5, bo są 4 elementy od niej mniejsze Przykład Powinna trafić na pozycje 4, bo są 3 liczby mniejsze 3 6 7 itd. 3 powinna trafić na pozycje trzecią, bo są 2 elementy mniejsze od niej G. Mirkowska, ASD_05 Sortowanie c.d.
15
Sortowanie przez zliczanie
{ // a- tablica danych, B tablica wyników, C tablica pomocnicza. for i := 1 to k do C[i] := 0 od; for j := 1 to n do C[a[j]] := C[a[j]] +1 od; for i := 2 to k do C[i] := C[i] + C[i-1] od; for j := n downto 1 do B[C[a[j]]] := a[j]; C[a[j]] := C[a[j]] –1 od; } C[i] = liczba elementów równych i C[i] = liczba elementów mniejszych równych i Na lewo od pozycji C[a[j]] leżą elementy od a[j], a na prawo > a[j]. Dlaczego w ostatniej pętli for zaczynamy od elementu z pozycji ntej? Chodzi o to (czasami jest to ważna), aby kolejność elementów o jednakowej wartości (lub jednakowej wartości atrybutu ze względu na który dokonujemy porównań , była taka jak w danym na początku wektorze- własność taka nazywa się stabilnością). Ponieważ wstawiając elementy do ciągu wynikowego B, zaczynamy od pozycji o większych indeksach(potem zmniejszamy licznik), zatem elementy które są w oryginalnym ciągu dalej , będą znów na dalszych pozycjach. C[a[j]] wskazuje liczbę jeszcze nie wpisanych elementów a[j] Koszt : O(k+n) Stabilność algorytmu G. Mirkowska, ASD_05 Sortowanie c.d.
16
G. Mirkowska, ASD_05 Sortowanie c.d.
Przykład Dana Tablica A: k=6 n= C: B: Po drugiej pętli „for” Po trzeciej pętli „for” Uwaga -Stabilność Po pierwszej pętli „for” G. Mirkowska, ASD_05 Sortowanie c.d.
17
G. Mirkowska, ASD_05 Sortowanie c.d.
Sortowanie pozycyjne Dany jest ciąg n-elementów do posortowania. Elementy tego ciągu nie są po prostu liczbami naturalnymi, lecz same mają wewnętrzną strukturę, np.. są to skończone ciągi pewnych obiektów (np.. Liczb, cyfr, znaków itd..). Ale... Takie postępowanie jest kosztowne: Dla elementów, które są ciągami liczb o d cyfrach, trzeba utworzyć 10 d koszyków! Metoda naiwnego rozrzucania Rozrzucić elementy danego ciągu do „koszyków” ze względu na kolejne pozycje w ciągach składowych, tzn. tworzymy pewną liczbę „koszyków” , tak, że i-ty koszyk odpowiada i-tej pozycji w ciągach składowych. Następnie sortujemy każdy z koszyków osobno tą samą metodą. Ten typ sortowania jest stosowany przy sortowaniu kart bibliotecznych, poczty, a dawniej do sortowania kart perforowanych Takie postępowanie nie zawsze daje poprawny wynik np. gdy ciągi nie są równej długości. G. Mirkowska, ASD_05 Sortowanie c.d.
18
G. Mirkowska, ASD_05 Sortowanie c.d.
Radix-Sort Dane : tablica n-liczb całkowitych o d cyfrach. Algorytm Niezmiennik For k := 1 to d do // rozrzuć wszystkie liczby do ‘kubełków’ o numerach //0,1, 2,...,9 ze względu na k-tą od końca cyfrę. //połącz kubełki w jeden ciąg. od Wszystkie elementy, obcięte do k-1 ostatnich pozycji, tworzą ciąg uporządkowany niemalejąco. T(n) = O(d* n) Koszt : G. Mirkowska, ASD_05 Sortowanie c.d.
19
Uwaga na implementację kubełków!
Radix-sort Uwaga na implementację kubełków! Dany ciąg : To nie jest dobre rozwiązanie 63 83 84 64 15 85 Stos 3 Stos 4 Stos 5 Kubełek= stos Po połączeniu : 64 63 Aby algorytm dawał zawsze poprawny wynik trzeba zwrócić uwagę na implementację kubełków. 15 Stos 1 Stos 6 Stos 8 Po połączeniu : G. Mirkowska, ASD_05 Sortowanie c.d.
20
G. Mirkowska, ASD_05 Sortowanie c.d.
c.d. Radix Sort For k := 1 to d do // posortuj elementy ze względu na ktą od końca pozycję stosując jakiś stabilny algorytm, np.algorytm CountingSort // od For k := 1 to d do // rozrzuć wszystkie liczby do ‘kubełków’ o //numerach 0, //1, 2,...9 ze względu na k-tą //od końca cyfrę . //połącz kubełki w jeden ciąg. od Użyjmy kolejek jako ‘kubełków’! Dany ciąg : Kolejka 1: 15 Kolejka 3: Kolejka 6: Kolejka 4: Przykład Kolejka 8: Kolejka 5: G. Mirkowska, ASD_05 Sortowanie c.d.
21
G. Mirkowska, ASD_05 Sortowanie c.d.
Poprawność Algorytm RadixSort zaimplementowany z kolejkami ma własność stabilności. Jeżeli elementy x, y są uporządkowane ze względu na k-1 ostatnich cyfr i wpadają do tego samego ‘kubełka’ to po k-tym przebiegu nadal są w tym samym porządku. UWAGA Algorytm RadixSort można też stosować do innych typów danych. Twierdzenie Jeżeli wpadają do różnych kubełków, to po k-tym przebiegu są uporządkowane ze względu na k ostatnich cyfr. Albo xk=yk i wtedy x i y trafiają do tej samej kolejki oraz x poprzedza y x = x k+1 10 k+1 + xk 10 k + x’ Albo xk<yk ale wtedy x trafi do kolejki o mniejszym numerze niż y i w takiej kolejności ukażą się po połączeniu y = y k+1 10 k+1 + yk 10 k + y’ x’ < y’, x’,y’< 10 k Albo xk>yk ale wtedy x trafi do kolejki o numerze większym niż y i po połączeniu y ukaże się przed x G. Mirkowska, ASD_05 Sortowanie c.d.
22
Demonstracja algorytmów sortowania
pokaz G. Mirkowska, ASD_05 Sortowanie c.d.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.