ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

Tablice 1. Deklaracja tablicy
STRUKTURY DANYCH.
Sortowanie przez scalanie
Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Schemat blokowy M START KONIEC
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Grażyna Mirkowska PJWSTK 15 listopad 2000
Rachunek prawdopodobieństwa 2
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Wykład 06 Metody Analizy Programów System Hoare
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Redukcja sekwentu Huzar, str Dany jest sekwent (1) 1 a+/b+/c, /b+/c, d, b, c+/a+/b, c+/d, /a+/d+/b |- Do sekwentu 1 stosujemy regułę: +|-. Stąd:
Techniki konstrukcji algorytmów
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Sortowanie Zajęcia 13.
Liczby Pierwsze - algorytmy
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
WYKŁAD 7. Spójność i rozpięte drzewa
ALGORYTMY I STRUKTURY DANYCH
Metody Sztucznej Inteligencji w Sterowaniu 2009/2010Optymalizacja miary efektywności działania sztucznych sieci neuronowych Dr hab. inż. Kazimierz Duzinkiewicz,
Materiały pomocnicze do wykładu
Elementy kombinatoryki
12 grudnia 2001Matematyka Dyskretna, Elementy Kombinatoryki G.Mirkowska, PJWSTK 1 Wykład 11 Elementy Kombinatoryki.
Elementy Rachunku Prawdopodobieństwa c.d.
Elementy Kombinatoryki (c.d.)
Odkrywanie wzorców sekwencji
Algorytmy grafowe Reprezentacja w pamięci
Rzędy wielkości funkcji
Analiza kosztu zamortyzowanego
ALGORYTMY I STRUKTURY DANYCH
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Algorytmy i struktury danych
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
Algorytmy i Struktury Danych Sortowanie
Geometria obliczeniowa Wykład 8
TABLICE C++.
Algorytmy i struktury danych
A. Sumionka. Starodawna gra marynarska; Gra dwu i wieloosobowa; Gracze wykonują ruchy naprzemian; Złożona ze stosów, w których znajduje się pewna ilość
Geometria obliczeniowa Wykład 4
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Modelowanie i identyfikacja 2010/2011Optymalizacja miary efektywności działania sztucznych sieci neuronowych Dr hab. inż. Kazimierz Duzinkiewicz, Katedra.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 04 k-ty co do wielkości. Stosy Grażyna Mirkowska PJWSTK, ITN semestr letni 2002.
Algorytmy równoległe Algorytm równoległy pozwala na wykonywanie w danej chwili więcej niż jednej operacji. EREW - wyłączny odczyt i wyłączny zapis; CREW.
Rekurencje Rekurencja jest równaniem lub nierównością, opisującą funkcję w zależności od jej wartości dla danych wejściowych o mniejszych rozmiarach. Na.
Sortowanie: kopce Parent(i)
ALGORYTMY I STRUKTURY DANYCH
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Kolejka priorytetowa.
Zbiory rozłączne.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

ALGORYTMY I STRUKTURY DANYCH WYKŁAD 06 c.d. Sortowanie Grażyna Mirkowska PJWSTK , semestr zimowy 2002

G. Mirkowska, ASD_06 Sortowanie c.d. Plan wykładu Szybkie sortowanie Drzewa decyzyjne Dolne oszacowanie złożoności problemu sortowania przez porównywanie elementów Sortowanie z kosztem liniowym Sortowanie koszykowe Sortowanie przez zliczanie listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Szybkie sortowanie Dziel i zwyciężaj Metoda : Krok 1. Rozdzielić elementy danego ciągu e1,e2,... ,en na dwie części względem pewnego ustalonego elementu, tzw. Mediany, tak by a lewo od niego znajdowały się elementy mniejsze, a na prawo elementy większe. Krok 2. Posortować elementy na lewo od mediany. Krok 3. Posortować elementy znajdujące się na prawo od mediany. listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Przykład wykonania 10 5 7 8 14 12 3 4 1 Rozdzielanie ze względu na wybraną medianę 5 7 8 1 4 3 10 12 14 3 4 1 5 8 7 12 14 Stosujemy rekurencyjnie tę samą zasadę do obu części 1 3 4 7 8 1 3 4 5 7 8 10 12 14 Ostatecznie : listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

Sortowanie szybkie - algorytm Dane: n>0, ciąg e[1],..., e[n]. procedure QS(lewy,prawy) {if (prawy > lewy) then Split (lewy,prawy,j); QS(lewy,j-1); QS(j+1,prawy); fi } lewy  prawy Algorytm Split Quick_sort {e[lewy],..., e[j-1]}< e[j] {e[j+1],...,e[prawy]} e[lewy] ...  e[j-1]  e[j] {e[j+1],...,e[prawy]} e[lewy] ...  e[j-1] e[j] e[j+1]  ...  e[prawy] listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

Jak wygląda najgorszy przypadek ? Koszt pesymistyczny algorytmu Quicksort mierzony liczbą porównań wynosi : W(n) = (n 2) Twierdzenie Jak wygląda najgorszy przypadek ? 1 2 3 4 5 6 7 8 9 Jeśli Split jako medianę wybiera zawsze pierwszy element, to w wyniku rozdzielenia, jedna część „młodsza” będzie pusta , a druga „starsza” będzie zawierała o jeden element mniej niż w poprzednim kroku. Koszt Operacji rozdzielania SPLIT dla n elementowego ciągu wynosi n-1 porównań. Ostatecznie : W(n) = (n-1) +W(n-1)= S i=2...n (i-1) = (n2) listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Koszt średni Zakładamy, że wszystkie ustawienia elementów w ciągu i każdy podział w wyniku Split są jednakowo prawdopodobne. Koszt średni algorytmu QuickSort, mierzony liczbą porównań, wynosi A(n) = (n lg n) Twierdzenie 1 n j j-1 n-j A(n) = (n-1) + S j=1...n (1/n (A(j-1) + A(n-j))) A(0) = 0 Przyjmijmy, że A(i) <= cilg i = c lg e i ln i. Udowodnimy, że A(n) <= cn lg n W dowodzie sume zastępujemy całką Ostatecznie : A(0) = 0 A(n) = (n-1) + S j=1...n-1 A(j) 2/n A(n)=cn lg n listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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. listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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. Lemat3 W(n)   n lg n  listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Własności c.d. 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) listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Minimalne epl c.d. Przypadek 2 2 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 =(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) listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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! Czyli 2( n!-2 lg n!  )/n! 0 Ostatecznie h  lg n! listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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 6 7 3 2 9 1 8 Przykład 1 2 3 4 5 6 7 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

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 elemementów  a[j] Koszt : O(k+n) listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. Przykład Dana Tablica A: 1 2 3 4 5 6 7 8 ----------------------------- k=6 n= 8 3 6 4 1 3 4 1 4 C: 1 2 3 4 5 6 B: 1 2 3 4 5 6 7 8 2 0 2 3 0 1 2 2 4 7 7 8 0 0 0 0 0 0 Po drugiej pętli „for” 0 0 0 0 0 0 4 0 2 2 4 6 7 8 Po trzeciej pętli „for” Uwaga -Stabilność Po pierwszej pętli „for” 1 2 4 6 7 8 0 1 0 0 0 0 4 0 1 2 4 5 7 8 0 1 0 0 0 4 4 0 1 2 3 5 7 8 0 1 0 3 0 4 4 0 0 2 3 5 7 8 1 1 0 3 0 4 4 0 0 2 3 4 7 8 1 1 0 3 4 4 4 0 0 2 3 4 7 7 1 1 0 3 4 4 4 6 0 2 2 4 7 7 1 1 3 3 4 4 4 6 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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. listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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 : listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

Uwaga na implementację kubełków! Radix-sort Uwaga na implementację kubełków! Dany ciąg : 85 83 63 64 84 15 To nie jest dobre rozwiązanie 63 83 84 64 15 85 Stos 3 Stos 4 Stos 5 Kubełek= stos Po połączeniu : 63 83 84 64 15 85 85 84 83 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 : 15 64 63 85 84 83 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 Sortowanie c.d. c.d. Radix Sort 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 : 85 83 63 64 84 15 Kolejka 1: 15 Kolejka 3: 83 63 Kolejka 6: 63 64 Kolejka 4: 64 84 Przykład Kolejka 8: 83 84 85 Kolejka 5: 85 15 15 63 64 83 84 85 83 63 64 84 85 15 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.

G. Mirkowska, ASD_06 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. 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 listopad 2002 G. Mirkowska, ASD_06 Sortowanie c.d.