Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji
Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu?
Sortowanie bąbelkowe Pierwsze przejście pętli (od 0 do n) 5971368 5971368 5791368 5719368 5713968 5713698 5713689
Sortowanie bąbelkowe Drugie przejście pętli (od 0 do n-1) 5713689 5713689 5173689 5137689 5136789 5136789
Sortowanie bąbelkowe Trzecie przejście pętli (od 0 do n-2) 5136789 1536789 1356789 1356789 1356789
Sortowanie bąbelkowe Czwarte przejście pętli (od 0 do n-3) 1356789 1356789 1356789 1356789
Sortowanie bąbelkowe Piąte przejście pętli (od 0 do n-4) 1356789 1356789 1356789
Sortowanie bąbelkowe Szóste przejście pętli (od 0 do n-5) 1356789 1356789 Koniec algorytmu
Sortowanie bąbelkowe Czy wydajność sortowania bąbelkowego można w łatwy sposób poprawić?
Sortowanie bąbelkowe Zadanie 1: Proszę posortować metodą bąbelkową liczby: 42 15 20 91 7 23 19 Zadanie 2: Proszę posortować metodą bąbelkową liczby: 99 13 29 34 57 69 74
Sortowanie bąbelkowe Prosta implementacja? (dla chętnego) Sortowanie bąbelkowe ma złożoność O(n2),
Sortowanie przez wstawianie Inaczej insert-sort, również dość proste sortowanie, sortowanie w miejscu? potrzebny jest drugi zbiór dla elementów posortowanych, przypomina nieco naturalne układanie kart w wachlarzu na ręce.
Sortowanie przez wstawianie Zbiór wejściowy: 5 9 7 1 3 6 8 Zbiór uporządkowany: (pusty)
Sortowanie przez wstawianie Zbiór wejściowy: 5 9 7 1 3 6 8 Zbiór uporządkowany: 5
Sortowanie przez wstawianie Zbiór wejściowy: 9 7 1 3 6 8 Zbiór uporządkowany: 5 9
Sortowanie przez wstawianie Zbiór wejściowy: 7 1 3 6 8 Zbiór uporządkowany: 5 7 9
Sortowanie przez wstawianie Zbiór wejściowy: 1 3 6 8 Zbiór uporządkowany: 1 5 7 9
Sortowanie przez wstawianie Zbiór wejściowy: 3 6 8 Zbiór uporządkowany: 1 3 5 7 9
Sortowanie przez wstawianie Zbiór wejściowy: 6 8 Zbiór uporządkowany: 1 3 5 6 7 9
Sortowanie przez wstawianie Zbiór wejściowy: 8 Zbiór uporządkowany: 1 3 5 6 7 8 9
Sortowanie przez wstawianie Zbiór wejściowy: (pusty) Zbiór uporządkowany: 1 3 5 6 7 8 9
Sortowanie przez wstawianie Prosta implementacja? - dla chętnego. złożoność algorytmu sortowania przez wstawianie to również O(n2).
Sortowanie przez selekcję Inaczej sortowanie przez wybór, nieskomplikowany algorytm sortowania, działa w miejscu?
Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689
Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689 Drugie przejście pętli 5713689 5713689
Sortowanie przez selekcję Pierwsze przejście pętli 5971368 5713689 Drugie przejście pętli 5713689 5713689 Trzecie przejście pętli 5713689 5136789
Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789
Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789 Piąte przejście pętli 5136789 1356789
Sortowanie przez selekcję Czwarte przejście pętli 5136789 5136789 Piąte przejście pętli 5136789 1356789 Szóste przejście pętli 1356789 1 3 5 6 7 8 9 sortowanie zakończone
Sortowanie przez selekcję Zadanie 1: Stosując sortowanie przez selekcję proszę posortować liczby: 5293781 Zadanie 2: Stosując sortowanie przez selekcję proszę posortować liczby: 42 19 23 4 13 21 88
Sortowanie przez selekcję Przykład implementacji? (dla chętnego) złożoność obliczeniowa algorytmu sortowania przez selekcję, to również O(n2).
Quick-sort Nieco bardziej złożony algorytm sortowania, sortowanie w miejscu? algorytm ma naturę rekurencyjną, skonstruowany przez C.A.R. Hoare'a.
Quick-sort Krótka prezentacja działania algorytmu: ze zbioru wejściowego wybieramy pewien element*, elementy dzielimy na mniejsze i większe-równe od wybranego elementu, w ten sposób uzyskujemy podział na dwa zbiory, dla każdego ze zbiorów wywołujemy rekurencyjnie quick-sort,
Quick-sort Przykład działania algorytmu quick-sort. Animacja źródło: http://upload.wikimedia.org/wikipedia/commons/6/6a/sorting_quicksort_anim.gif
Quick-sort Średnia złożoność obliczeniowa algorytmu Quick-sort to O(nlogn) jednakże trzeba pamiętać o tym, że złożoność pesymistyczna 2 może wynieść O(n ). Zadanie: Stosując metodę quick-sort posortować liczby: 82 21 39 20 17 63 56 29 31 29 15 63 Jako element podziału proszę przyjąć element ostatni.
Sortowanie przez scalanie (merge-sort) Algorytm o podobnej zasadzie działania jak quick-sort, lecz z pewnymi ulepszeniami, również działa rekurencyjnie, sortowanie w miejscu?
Sortowanie przez scalanie (merge-sort) Krótki opis działania algorytmu zbiór wejściowy dzielimy na dwie równe części, jeśli zbiór wejściowy ma nieparzystą ilość elementów, wówczas jeden z podzbiorów będzie miał o jeden element więcej, dokonujemy rekurencyjnego podziału zbioru, scalamy otrzymane dwa zbiory.
Sortowanie przez scalanie (merge-sort) Scalanie dwóch ciągów: wybieramy pierwszy element z pierwszego lub drugiego ciągu w zależności od tego, który ma mniejszą wartość, wkładamy tenże element do ciągu docelowego a ze źródłowego go usuwamy, czynności te powtarzamy, aż oba zbiory będą puste.
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort)
Sortowanie przez scalanie (merge-sort) Zadanie: Proszę posortować stosując metodę merge-sort następujące liczby: 5, 9, F, A, 3, 7, 8, 8, 1, B, 4, C.
Sortowanie przez scalanie (merge-sort) Złożoność obliczeniowa sortowania przez scalanie wynosi O(nlogn), co prawda działa nieco wolniej niż quick-sort, jednak algorytm ten zapewnia złożoność O(nlogn) w każdym przypadku (nawet pesymistycznym), czas wykonania algorytmu nie jest zależny od wartości sortowanych elementów.
Algorytmy selekcji Zadaniem selekcji (wyboru) jest znalezienie ktego najmniejszego (największego) elementu spośród zbioru n elementów, najprostsze (intuicyjne) rozwiązanie, to wybranie najszybszego algorytmu sortowania i wybranie k-tego kolejnego elementu ze zbioru uporządkowanego, Czy da się uzyskać odpowiedź na to pytanie szybciej?
Algorytmy selekcji Szczególny przypadek: znalezienie pierwszego najmniejszego (największego) elementu w zbiorze n-elementowym, jaką mamy złożoność takiego algorytmu? czy można zatem znaleźć metodę znalezienia k-tego elementu również w liniowym (O(n)) czasie?
Algorytm Hoare'a Z pomocą może przyjść algorytm selekcji (wyboru) Hoare'a, posiada on złożoność: pesymistycznie O(n2), statystycznie O(n), mechanizm działania jest podobny do algorytmu quick-sort.
Algorytm Hoare'a Działanie algorytmu Hoare'a (szukamy elementu k-tego spośród n elementów): zbiór wejściowy dzielimy według pewnego kryterium (pierwszy element, ostatni, mediana) na elementy mniejsze-równe od niego oraz większe od niego, mamy trzy sytuacje: moc zbioru z elementami mniejszymi* > k moc zbioru z elementami mniejszymi* = k uruchamiamy algorytm rekurencyjnie dla tego zbioru (szukamy elementu k-tego dla tego zbioru), szukanym elementem jest punkt podziału koniec algorytmu, moc zbioru z elementami mniejszymi* < k uruchamiamy algorytm rekurencyjnie dla zbioru z elementami większymi (szukamy elementu k-1-*).
Algorytm Hoare'a Zadanie: Proszę znaleźć ósmy element z tablicy: 82 21 39 20 17 63 56 29 31 29 15 63 Proszę przyjąć za punkt podziału pierwszy element.
Pytania?
Dziękuję za uwagę