Algorytmy i struktury danych

Podobne dokumenty
Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytmy i struktury danych

Sortowanie. LABORKA Piotr Ciskowski

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Sortowanie bąbelkowe

Algorytmy i Struktury Danych

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Algorytmy i struktury danych

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Porządek symetryczny: right(x)

Wykład 5. Sortowanie w czasie liniowologarytmicznym

ALGORYTMY I STRUKTURY DANYCH

Przykładowe B+ drzewo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Programowanie w VB Proste algorytmy sortowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

Podstawowe algorytmy i ich implementacje w C. Wykład 9

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Sortowanie Shella Shell Sort

Algorytmy sortujące i wyszukujące

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Laboratoria nr 1. Sortowanie

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do programowania

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Laboratorium nr 7 Sortowanie

Efektywna metoda sortowania sortowanie przez scalanie

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Sortowanie - wybrane algorytmy

Strategia "dziel i zwyciężaj"

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy i Struktury Danych, 2. ćwiczenia

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Wykład 6. Drzewa poszukiwań binarnych (BST)

Algorytmy i struktury danych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Tadeusz Pankowski

PODSTAWY INFORMATYKI wykład 6.

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Luty 2001 Algorytmy (7) 2000/2001

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Analiza algorytmów zadania podstawowe

Wykład 8. Drzewa AVL i 2-3-4

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Złożoność obliczeniowa zadania, zestaw 2

Wysokość drzewa Głębokość węzła

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

Algorytm selekcji Hoare a. Łukasz Miemus

Podstawy Informatyki. Metody dostępu do danych

Sortowanie przez wstawianie Insertion Sort

Algorytmy i struktury danych. wykład 5

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Wykład 2. Drzewa poszukiwań binarnych (BST)

Temat: Algorytm kompresji plików metodą Huffmana

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Algorytmy i struktury danych Matematyka III sem.

Teoretyczne podstawy informatyki

Drzewa poszukiwań binarnych

Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej.

Drzewa podstawowe poj

Wstęp do programowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 9 Rekurencja

Strategie ewolucyjne (ang. evolu4on strategies)

Wykład 2. Poprawność algorytmów

Źródła. N.Wirth Algorithms and Data Structures, 1985 D.E.Knuth The Art of Computer Programming. Vol. 3, 1973

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Sortowanie przez scalanie

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Algorytmy i struktury danych

Drzewa AVL definicje

PODSTAWY INFORMATYKI wykład 5.

Wybrane algorytmy tablicowe

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Algorytm Quicksort. Agnieszka Miśkowiec i Tomasz Skucha

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Algorytmy i Struktury Danych

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Algorytmy sortujące. Sortowanie bąbelkowe

Transkrypt:

Algorytmy i struktury danych Zaawansowane algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Sortowanie za pomocą malejących przyrostów metoda Shella Metoda jest rozwinięciem metody sortowania przez wstawianie. W metodzie tej, najpierw grupuje się i sortuje oddzielnie wszystkie elementy oddalone o pewną odległość (przyrost) h (tj. oddalone co h ). W pierwszym kroku metody tworzy się więc h-podzbiorów, które sortowane są metodą przez wstawianie. W następnych krokach powtarza się taką operację dla coraz mniejszych odległości h, aŝ do momentu gdy h=1, co odpowiada normalnemu sortowaniu całego zbioru (elementy oddalone co jeden ). 2 1

Sortowanie metodą Shella przykład 1/2 55 Faza 1 55 55 55 55 55 55 55 3 Sortowanie metodą Shella przykład 2/2 55 Faza 2 55 55 55 55 55 55 55 55 Faza 3 55 55 55 4 2

Metoda ta jest bardzo efektywna, pomimo, Ŝe występuje kilka wstępnych procesów sortowań. Jednak dla duŝych wartości odstępu h, sortowane zbiory mają mało elementów, a dla małych h zbiory są juŝ znacznie uporządkowane i w obu tych przypadkach sortowanie takich zbiorów za pomocą metody przez wstawiane jest bardzo szybkie. Metoda działa najlepiej gdy przyrosty h nie są swoimi dzielnikami. Zaleca się stosowanie następujących przyrostów: lub: Sortowanie za pomocą malejących przyrostów metoda Shella h k-1 =3h k +1, h t =1, t=log 3 n-1 (czyli: 1, 40, 13, 4, 1) h k-1 =2h k +1, h t =1, t=log 2 n-1 (czyli: 31, 15, 7, 3, 1) Efektywność metody: Po, Pr ~ n 1,2 5 Sortowanie przez podział (sortowanie szybkie) W metodzie tej wybiera się losowo jakiś element x sortowanego zbioru. Następnie przegląda się zbiór od strony lewej, aŝ znaleziony zostanie taki element A i, Ŝe A i x, a od strony prawej znajduje się element A j, Ŝe A j x. Następnie zamienia się miejscami elementy A i i A j i kontynuuje się proces przeglądania i zamiany, aŝ nastąpi spotkanie gdzieś w środku tablicy. Miejsce spotkania wyznacza punkt podziału tablicy na dwie części. Lewa część składa się z elementów nie większych niŝ wybrany element x, prawa zaś z elementów nie mniejszych niŝ x. Takie części sortuje się następnie w sposób jaki opisano powyŝej. Powtarzanie tych operacji aŝ do momentu gdy części tablicy będą składały się z jednego elementu, doprowadzi do posortowania całej tablicy. Efektywność metody: Po ~ n*log(n), Pr ~ n 6 3

Sortowanie przez podział przykład 1/2 55 55 55 55 > 55 55 55 > 55 55 > 55 55 > > 55 > 55 7 Sortowanie przez podział przykład 2/2 55 55 55 55 55 55 55 55 55 55 55 55 8 4

Sortowanie przez podział program PROCEDURE sort_szybkie(l, p: integer); VAR i, j: integer; x, w: obiekt; i:=l; j:=p; x:=a[(l+p) div 2]; REPEAT WHILE A[i].klucz x.klucz DO i:=i+1; WHILE A[j].klucz > x.klucz DO j:=j-1; IF i=j THEN w:=a[i]; A[i]:=A[j]; A[j]:=w; i:=i+1; j:=j-1; END UNTIL i>j; IF lj THEN sort_szybkie(l, j); IF ip THEN sort_szybkie(i, p); END; Początkowe wywołanie procedury: sort_szybkie(1, n); 9 Sortowanie stogowe 5

Drzewo porównań n/8 porównań n/4 porównań n/2 porównań n-1 porównań 55 Dla n-elementowej tablicy moŝna wyznaczyć drzewo porównań za pomocą n-1 operacji porównań kluczy elementów KaŜdy węzeł jest elementem o mniejszym kluczu z dwóch sąsiadujących w drzewie Na wierzchołku drzewa zawsze znajduje się element o najmniejszym kluczu! 11 Wybieranie z drzewa 55 55 55 55 Sortowanie tablicy, dla której utworzono drzewo wymaga: pobrania elementu z wierzchołka (zawsze najmniejszy klucz) zastąpienie pobranego elementu elementem o mniejszym kluczu z niŝszego węzła Procedura taka pozwala odczytać z drzewa posortowane elementy tablicy 6

Sortowanie drzewiaste 55 55 1 55 55 Otrzymanie posortowanej tablicy wymaga n operacji odczytu z drzewa KaŜdy odczyt (wybieranie elementu z drzewa wymaga log 2 (n) porównań i przesunięć Cały proces sortowania przez wybieranie z drzewa wymaga więc n*log(n) operacji (oraz n-1 operacji potrzebnych do utworzenia drzewa) 13 Stóg 55 Stóg jest strukturą drzewiastą, której kaŝdy element jest nie większy od dwóch elementów bezpośrednio pod nim (potomków) Pomiędzy elementami na tym samym poziomie nie zachodzą Ŝadne relacje Tworzenie struktury stogu wymaga (jak poprzednio n*log(n) operacji 14 7

Sortowanie stogowe 55 55 Sortowanie stogowe polega na pobraniu elementu z wierzchołka, przesuwaniu elementów o mniejszych kluczach w górę drzewa i eliminacji jednego elementu z dołu struktury (liścia) Struktura stogu usprawnia sortowanie drzewiaste, poniewaŝ eliminuje niepotrzebne porównania elementu, który jest eliminowany z drzewa 15 Stóg reprezentacja tablicowa h 1 h i h 2i h i h 2i+1 h 2 h 3 h i h 4 h 5 h 6 h 7 h 2i h 2i+1 h 8 h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 16 8

nowy element dodawany do stogu Dodawanie elementów do stogu - przesiewanie 55 55 Dodanie elementu musi utrzymać warunek stogu (liście potomne są nie większe niŝ ich rodzic). Nowy element wstawiany jest na wierzchołek drzewa, a następnie przesiewany przez węzły mniejszych elementów stogu, które podnoszą się przez to do góry. 55 17 Przesiewanie c.d. h 8 h 1 h 2 h 3 h 4 h 5 h 6 h 7 x h 2i h 2i+1 PROCEDURE Przesiewanie(l,p : integer); VAR i,j:integer; x: obiekt; i:=l; j:=2*i; x:=a[i]; WHILE j=p DO IF jp THEN IF A[j].klucz > A[j+1].klucz THEN j:=j+1; IF x.klucz > A[j].klucz THEN A[i]:=A[j]; i:=j; j:=2*i END ELSE j:=p+1; {stop} END; A[i]:=x; END; i:=1 j j+1 x h 2 h 3 h 4 h 5 h 6 h 7 h 8 9

Tworzenie stogu z dowolnej tablicy 55 Połowa tablicy: elementy (n div 2)+1 N od początku tworzą stóg, gdyŝ nie zachodzi między nimi Ŝadna relacja. 55 19 Tworzenie stogu c.d. 55 55 Kolejne elementy dodaje się do stogu metodą przesiewania 55 55 Przesiewanie(4,N); 55 55 Przesiewanie(3,N); 20

Tworzenie stogu c.d. 55 55 55 55 Przesiewanie(2,N); 55 55 Przesiewanie(1,N); l:=(n div 2); WHILE l>0 DO Przesiewanie(l,n); l:=l-1; END 21 Sortowanie stogowe Mając tablice a strukturze stogu, sortowanie polega na: 55 pobraniu z wierzchołka elementu i usunięciu go ze stogu przesianiu przez zmniejszony stóg elementu ostatniego w miejsce ostatniego elementu umieszczenie elementu zdjętego z wierzchołka 55 55 A[1]:=A[8]; A[8]:=x; Przesiewanie(1,7); 22 11

Sortowanie stogowe c.d. 55 55 55 55 55 55 55 A[1]:=A[7]; A[7]:=x; Przesiewanie(1,6); 23 Sortowanie stogowe c.d. 55 55 55 55 55 55 55 55 A[1]:=A[6]; A[6]:=x; Przesiewanie(1,5); 24

Sortowanie stogowe c.d. 55 55 55 55 55 55 55 A[1]:=A[5]; A[5]:=x; Przesiewanie(1,4); 25 Sortowanie stogowe c.d. 55 55 55 55 55 55 55 A[1]:=A[4]; A[4]:=x; Przesiewanie(1,3); 26 13

Sortowanie stogowe c.d. 55 55 55 55 55 55 55 A[1]:=A[3]; A[3]:=x; Przesiewanie(1,2); 27 Sortowanie stogowe c.d. 55 55 55 55 55 55 Po n-1 krokach tablica będzie posortowana. PoniewaŜ z przesiewanie wymaga log(n) operacji, całe sortowanie stogu wymaga n*log(n) operacji. p:=n; WHILE p>1 DO A[1]:=A[p]; A[p]:=x; p:=p-1; Przesiewanie(1,p); END 28 14

Algorytm sortowania stogowego - program PROCEDURE Przesiewanie(l,p : integer); VAR i,j:integer; x: obiekt; i:=l; j:=2*i; x:=a[i]; WHILE j=p DO IF jp THEN IF A[j].klucz > A[j+1].klucz THEN j:=j+1; IF x.klucz > A[j].klucz THEN A[i]:=A[j]; i:=j; j:=2*i END ELSE j:=p+1; {stop} END; A[i]:=x; END; PROCEDURE Sort_Stogowe; VAR l,p:integer; x:obiekt; l:=(n div 2); WHILE l>0 DO Przesiewanie(l,n); l:=l-1; END; p:=n; WHILE p>1 DO A[1]:=A[p]; A[p]:=x; p:=p-1; Przesiewanie(1,p); END END; 29 Sortowanie stogowe - wnioski Średnia efektywność metody: n*log(n) Efektywność metody dla najgorszego przypadku jest zbliŝona do średniej! DuŜa liczba operacji przygotowawczych nie zalecana dla małej liczby obiektów. 30 15