ALGORYTMY I STRUKTURY DANYCH

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

PRAM.
STRUKTURY DANYCH.
Sortowanie przez scalanie
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Schemat blokowy M START KONIEC
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
METODY ANALIZY PROGRAMÓW
Grażyna Mirkowska PJWSTK 15 listopad 2000
Metody Analizy Programów Wykład 02
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
Trian_mon(P) Input: y-monotoniczny wielokąt zapamiętany jako zbiór boków, Output: triangulacja D jako zbiór krawędzi. Wyodrębnij prawy i lewy łańcuch punktów,
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Matematyka Dyskretna, G.Mirkowska, PJWSTK
ALGORYTMY I STRUKTURY DANYCH
Współprogramy III Ten wykład ma na celu pokazanie kolejnej ciekawej możliwości, którą oferują współprogramy. Wspólprogramy reprezentujące wyrażenia regularne.
Współprogramy II W tym wykładzie pogłębimy naszą znajomość z współprogramami. Omówimy współpracę procedur rekurencyjnych i współprogramów, wprowadzimy.
Sortowanie Zajęcia 13.
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
ALGORYTMY I STRUKTURY DANYCH
Materiały pomocnicze do wykładu
Sortowanie przez scalanie Merge Sort
Matematyka Dyskretna, Moce zbiorów G.Mirkowska, PJWSTK
12 grudnia 2001Matematyka Dyskretna, Elementy Kombinatoryki G.Mirkowska, PJWSTK 1 Wykład 11 Elementy Kombinatoryki.
Elementy Rachunku Prawdopodobieństwa c.d.
Odkrywanie wzorców sekwencji
22 listopada 2000Regula konkatenacji II1 Dziedziczenie (cd.) Reguła konkatenacji II przykład - heapsort Reguła konkatenacji III.
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
Podprogramy.
ALGORYTMY I STRUKTURY DANYCH
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Algorytmy i struktury danych
Algorytmy i Struktury Danych Sortowanie
Sortowanie przez kopcowanie
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia w Turbo Pascalu.
Procedury i funkcje.
Tablice w Turbo Pascalu.
ALGORYTMY I STRUKTURY DANYCH
Ogólna struktura programu w TP
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.
METODY REPREZENTOWANIA IFORMACJI
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Współprogramy IV.
Współprogramy II W tym wykładzie pogłębimy naszą znajomość z współprogramami. Omówimy współpracę procedur rekurencyjnych i współprogramów, wprowadzimy.
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Algorytmy i Struktury Danych Wprowadzenie
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 05 Problem Sortowania Grażyna Mirkowska PJWSTK, semestr zimowy 2002

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

Sformułowanie problemu Dany jest ciąg e elementów e1,e2,... , en należących do pewnej liniowo uporządkowanej przestrzeni <E, >. Znaleźć taką permutację i1, i2,... ,in liczb 1,..., n aby ei1ei2 ... ein lub Znaleźć taką funkcję różnowartościową i „na” f : {1,2...,n}  {e1,e2,... , en }, że dla każdego i<n, f(i)  f(i+1). 3 6 2 1 4 5 7 1 2 3 4 5 6 7 5 3 1 6 7 2 8 1 2 3 5 6 7 8 litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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 } Selection_sort min e[i] Odcinek uporządkowany litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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

G. Mirkowska, ASD 05 Sortowanie 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: Koszt algorytmu T(n) = n-1 + n-2 + ... +2 + 1 = n(n-1)/2 = (n2) B. Jeśli operacją dominującą jest zamiana elementów T(n) = 1*(n-1) = n-1 = (n) litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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. Metoda 4 8 5 3 9 6 4 8 5 Przykład 4 5 8 3 9 6 3 4 5 3 8 9 6 Odcinek uporządkowany i-ty element X 4 3 5 8 9 6 3 4 5 8 9 6 9 3 4 5 8 9 6 6 itd litopad 2002 G. Mirkowska, ASD 05 Sortowanie

G. Mirkowska, ASD 05 Sortowanie Schemat algorytmu start Niezmiennik i := 2 e[1]...  e[i-1] , i < n+2 Nie i < n+1 stop Tak e[ 1]...  e[i-1] , 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 e[ 1]...  e[i-1]  e[i] , i<n +1 e[ 1]... e[i-2] e[i-1], i<n +2 i := i+1 litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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 <e[j-1] Analiza pętli wewnętrznej Pom < e[ j]e[j+1]...  e[i] pom< e[ j+1]...  e[i] e[ 1]  ...  e[j-1]  pom< e[ j+1]...  e[i] e[ 1]  ...  e[j-1]  e[j] < e[ j+1]...  e[i] litopad 2002 G. Mirkowska, ASD 05 Sortowanie

Poprawność sortowania przez wstawianie Algorytm sortowania przez wstawianie poprawnie rozwiązuje problem sortowania w każdej liniowo uporządkowanej strukturze danych. Twierdzenie 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<i n) e[i-1]  e[i] . litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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

Sortowanie przez scalanie Idea : dziel i zwyciężaj ! (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. litopad 2002 G. Mirkowska, ASD 05 Sortowanie

G. Mirkowska, ASD 05 Sortowanie Przykład 16 5 12 4 10 6 1 13 15 7 1 14 9 3 8 11 16 5 12 4 10 6 1 13 15 7 1 14 9 3 8 11 16 5 12 4 10 6 1 13 15 7 1 14 9 3 8 11 16 5 12 4 10 6 1 13 5 16 4 12 6 10 1 13 i.t.d. 4 5 12 16 1 6 10 13 1 4 5 6 10 12 13 16 1 3 7 8 9 11 14 15 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 litopad 2002 G. Mirkowska, ASD 05 Sortowanie

G. Mirkowska, ASD 05 Sortowanie Operacja scalania Dane są dwa ciągi X i Y, uporządkowane niemalejąco, x1,...xn i y1,...ym. Utworzyć ciąg e=e1,...e n+m złożony z elementów obu ciągów uporządkowany niemalejąco. Wp = {n>0 m>0, x1... xn i y1... ym } Wk = { e1...  en+m , (in+m)( j)( ei= xj lub ei = yj)} 2 4 5 8 9 X : 1 3 6 7 Y : Przykład 1 2 3 4 5 6 7 8 9 litopad 2002 G. Mirkowska, ASD 05 Sortowanie

G. Mirkowska, ASD 05 Sortowanie 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; Niezmiennik {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 .} 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} Koszt : O(n+m) litopad 2002 G. Mirkowska, ASD 05 Sortowanie

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ę. litopad 2002 G. Mirkowska, ASD 05 Sortowanie

Sortowanie przez scalanie Jeśli k=l, to jest tylko jeden element w naszym ciągu. 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; W tym wywołaniu rozważamy lewą „połowę” danego ciągu Merge-sort Z założenia indukcyjnego : e[k] ...  e[x] Z założenia indukcyjnego :e[x+1] ...  e[l] Na mocy Tw (*) : e[k] ...  e[l] W tym wywołaniu rozważamy prawą „połowę” danego ciągu litopad 2002 G. Mirkowska, ASD 05 Sortowanie

Koszt algorytmu Merge_Sort Załóżmy, że n = 2 p. wtedy T(n) = T(n/2) + T(n/2) + cn T(1) = 0 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(2p-2 ) + c2 p + c2 p = ...= 2 p T(2 0 ) + cp 2 p = ( n lg n) T(n) = (n lg (n)) Ostatecznie : litopad 2002 G. Mirkowska, ASD 05 Sortowanie