Post on 28-Feb-2019
Algorytmy i Struktury Danych.Metoda “Dziel i zwyciezaj”. Problem Sortowania, cd.
Bozena Wozna-Szczesniakbwozna@gmail.com
Jan Długosz University, Poland
Wykład 2
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 1 / 47
Metoda “dziel i zwyciezaj”
IdeaMetoda dziel i zwyciezaj (ang. divide and conquer) jest metodaprojektowania algorytmów, w której dany problem jest dzielony nakilka mniejszych podproblemów podobnych do poczatkowegoproblemu.
Problemy te sa rozwiazywane rekurencyjnie, a nastepnierozwiazania wszystkich podproblemów sa łaczone w celuutworzenia rozwiazania całego problemu.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 2 / 47
Metoda “dziel i zwyciezaj”
W podejsciu dziel i zwyciezaj kazdy poziom rekursji składa sie znastepujacych trzech etapów:
Dziel: Dzielimy problem na podproblemy.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 3 / 47
Metoda “dziel i zwyciezaj”
W podejsciu dziel i zwyciezaj kazdy poziom rekursji składa sie znastepujacych trzech etapów:
Dziel: Dzielimy problem na podproblemy.
Zwyciezaj: Rozwiazujemy podproblemy rekurencyjnie, chyba zesa one małego rozmiaru i juz nie wymagaja zastosowania rekursji- uzywamy wtedy bezposrednich metod.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 3 / 47
Metoda “dziel i zwyciezaj”
W podejsciu dziel i zwyciezaj kazdy poziom rekursji składa sie znastepujacych trzech etapów:
Dziel: Dzielimy problem na podproblemy.
Zwyciezaj: Rozwiazujemy podproblemy rekurencyjnie, chyba zesa one małego rozmiaru i juz nie wymagaja zastosowania rekursji- uzywamy wtedy bezposrednich metod.
Połacz: Łaczymy rozwiazania podproblemów, aby otrzymacrozwiazanie całego problemu.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 3 / 47
Dziel i Zwyciezaj - przykłady zastosowan
Znajdowanie najwiekszego i najmniejszego elementu zbioru.
Wyszukiwanie binarne
Potegowanie liczb
Sortowanie szybkie
Sortowanie przez scalanie
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 4 / 47
Element minimalny i maksymalny zbioru
Definicja problemu:Dane:
n - liczba elementów zbiorua1, a2, a3, . . . , an - ciag elementów
Szukane: Elementy najwiekszy i najmniejszy zbioru.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 5 / 47
Element minimalny i maksymalny zbioru
Require: tablica A o rozmiarze n {A=[0,. . . ,n-1]}Algorytm: MIN1: min = 0;2: for all i = 1 to n do3: if A[i ] < A[min] then4: min = i ;5: end if6: i = i + 1;7: end for8: return min;Algorytm: MAX1: max = 0;2: for all i = 1 to n do3: if A[i ] > A[max] then4: max = i ;5: end if6: i = i + 1;7: end for8: return max ;
Naiwne rozwiazanie problemu:Najpierw wyszukujemyelement najwiekszy metodabezposrednia, a potemelement najmniejszy.Złozonosc obliczeniowa: O(n)
Algorytm MAX : n - 1operacji porównaniaAlgorytm MIN : n - 1 operacjiporównaniaRazem MAX i MIN : 2n - 2operacji porównania
Przykład: 2 5 3 1 8 9 1 5 4 - 16porównan
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 6 / 47
Element minimalny i maksymalny zbioru
Mozna spróbowac usprawnic rozwiazanie naiwne, znajdujacnajpierw kandydatów na Min i Max.
Takie wyszukanie realizowane jest poprzez porównywanieelementów parami.
Nastepnie stosowany jest algorytm MIN, a potem Max (lubodwrotnie), na odpowiednim zbiorze kandydatów.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 7 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.Na tym zbiorze stosowany jest algorytm MIN.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.Na tym zbiorze stosowany jest algorytm MIN.
Kandydaci na MAX: 5,3,9,5,4.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.Na tym zbiorze stosowany jest algorytm MIN.
Kandydaci na MAX: 5,3,9,5,4.Na tym zbiorze stosowany jest algorytm MAX.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.Na tym zbiorze stosowany jest algorytm MIN.
Kandydaci na MAX: 5,3,9,5,4.Na tym zbiorze stosowany jest algorytm MAX.
Ostatni - nieparzysty element został dodany do obu zbiorów.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Przykład:
Zbiór wej sciowy: 2,5,3,1,8,9,1,5,4
Porównywanie parami: 2 < 5,3 < 1,8 < 9,1 < 5,4
Kandydaci na MIN: 2,1,8,1,4.Na tym zbiorze stosowany jest algorytm MIN.
Kandydaci na MAX: 5,3,9,5,4.Na tym zbiorze stosowany jest algorytm MAX.
Ostatni - nieparzysty element został dodany do obu zbiorów.
Wykorzystujemy tu własnosc podziału mówiaca, iz w kazdymzbiorze skonczonym zawsze znajduje sie element najwiekszy ielement najmniejszy.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 8 / 47
Element minimalny i maksymalny zbioru
Szacowanie:Przy rozdzielaniu elementów wykonano 4 porównania.
Algorytm MIN na zbiorze {2,1,8,1,4} wykonał 4 porównania izwrócił wartosc 1.
Algorytm MAX równiez na zbiorze {5,3,9,5,4} wykonał 4porównania i zwrócił wartosc 9.
W sumie wykonano 4 + 4 + 4 = 12 porównan, co oznacza 25%wzrost wydajnosci w porównaniu z podejsciem naiwnym (tampotrzebnych było 16 porównan)!
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 9 / 47
Element minimalny i maksymalny zbioru
Require: tablica A o rozmiarze n{A = [0, . . . , n − 1]}
Algorytm: MIN-MAX1: min = 0; max = 0;2: for i = 0 to n − 2 do3: if A[i ] < A[i + 1] then4: if A[i ] < A[min] then5: min = i ;6: end if7: if A[i + 1] > A[max] then8: max = i + 1;9: end if10: else11: if A[i + 1] < A[min] then12: min = i + 1;13: end if14: if A[i ] > A[max] then15: max = i ;16: end if17: end if18: i = i + 2;19: end for
20: if n is odd then21: if A[n − 1] < A[min] then22: min = n − 1;23: end if24: if A[n − 1] > A[max] then25: max = n − 1;26: end if27: end if28: return A[min] and A[max];
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 10 / 47
Wyszukiwanie binarne
Wyszukiwanie binarne pozwala na szybkie wyszukiwanie wartosci wposortowanych zbiorach (np. tablicy). Skutecznosc wyszukiwaniabinarnego wynika z tego, ze zamiast przegladac wszystkie elementyposortowanego zbioru po kolei, wykorzystujemy informacje o tym, zejest on uporzadkowany.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 11 / 47
Wyszukiwanie binarne
Wyszukiwanie binarne pozwala na szybkie wyszukiwanie wartosci wposortowanych zbiorach (np. tablicy). Skutecznosc wyszukiwaniabinarnego wynika z tego, ze zamiast przegladac wszystkie elementyposortowanego zbioru po kolei, wykorzystujemy informacje o tym, zejest on uporzadkowany.
Algorytm:Dana jest tablica A oraz poszukiwany element key .
Sprawdz srodkowy element tablicy. Jesli jest równy key , to koniec.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 11 / 47
Wyszukiwanie binarne
Wyszukiwanie binarne pozwala na szybkie wyszukiwanie wartosci wposortowanych zbiorach (np. tablicy). Skutecznosc wyszukiwaniabinarnego wynika z tego, ze zamiast przegladac wszystkie elementyposortowanego zbioru po kolei, wykorzystujemy informacje o tym, zejest on uporzadkowany.
Algorytm:Dana jest tablica A oraz poszukiwany element key .
Sprawdz srodkowy element tablicy. Jesli jest równy key , to koniec.
Jesli srodkowy element jest wiekszy niz key , to poszukiwanyelement jesli jest w tablicy, to jest w jej lewej czesci.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 11 / 47
Wyszukiwanie binarne
Wyszukiwanie binarne pozwala na szybkie wyszukiwanie wartosci wposortowanych zbiorach (np. tablicy). Skutecznosc wyszukiwaniabinarnego wynika z tego, ze zamiast przegladac wszystkie elementyposortowanego zbioru po kolei, wykorzystujemy informacje o tym, zejest on uporzadkowany.
Algorytm:Dana jest tablica A oraz poszukiwany element key .
Sprawdz srodkowy element tablicy. Jesli jest równy key , to koniec.
Jesli srodkowy element jest wiekszy niz key , to poszukiwanyelement jesli jest w tablicy, to jest w jej lewej czesci.
Jesli srodkowy element jest mniejszy niz key , to poszukiwanyelement jesli jest w tablicy, to jest w jej prawej czesci.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 11 / 47
Wyszukiwanie binarne - przykład
Znalezc liczbe 9 w ciagu: 3, 5, 7, 8, 9, 12, 15 .
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 12 / 47
Twierdzenie 1– Cormen T.H., Leiserson Ch.E., RivestR.L. Wprowadzenie do algorytmów, Roz. 4 (str. 73)
T (n) = a ∗ T (n/b) + f (n)
n - rozmiar problemu; rozmiar danych wejsciowych.a - liczba podproblemów w rekurencji.n/b - rozmiar kazdego podproblemu; w zasadzie zakłada sie, zewszystkie podproblemy sa tego samego rozmiaru.f(n) - koszt operacji poza rekurencyjnym wywołaniem zawierajacykoszt podziału probelmu na podproblemy i koszt operacji scaleniarozwiazan.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 13 / 47
Twierdzenie 1– Cormen T.H., Leiserson Ch.E., RivestR.L. Wprowadzenie do algorytmów, Roz. 4 (str. 73)
T (n) = a ∗ T (n/b) + f (n)
n - rozmiar problemu; rozmiar danych wejsciowych.a - liczba podproblemów w rekurencji.n/b - rozmiar kazdego podproblemu; w zasadzie zakłada sie, zewszystkie podproblemy sa tego samego rozmiaru.f(n) - koszt operacji poza rekurencyjnym wywołaniem zawierajacykoszt podziału probelmu na podproblemy i koszt operacji scaleniarozwiazan.
A. f (n) = O(nlogb(a)−ǫ) implikuje, zeT (n) = Θ(nlogb(a)) dla pewnego ǫ > 0
B. f (n) = Θ(nlogb(a)logk2 (n)) implikuje, ze
T (n) = Θ(nlogb(a) ∗ logk+12 (n)) dla pewnego k ≥ 0.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 13 / 47
Wyszukiwanie binarne - złozonosc
nlogb(a) = nlog2(1) = n0 = 1 ⇒ (Przypadek2)
T (n) = Θ(log2(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 14 / 47
Wyszukiwanie binarne - Koszt algorytmu
Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = O(log2(n))
Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = O(log2(n)).
Złozonosc pamieciowa: O(1).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 15 / 47
Wyszukiwanie binarne - implementacja
i n t binSearch ( i n t a [ ] , i n t n , i n t key ){
i n t l e f t = 0 , r i g h t = n − 1;wh i le ( l e f t <= r i g h t ) {
i n t cu r r = ( l e f t + r i g h t ) / 2 ;i f ( key == a [ cu r r ] ) {
r e t u r n cu r r ;} e lse i f ( key < a [ cu r r ] ) {
r i g h t = cu r r − 1;} e lse {
l e f t = cu r r + 1;}
}r e t u r n ( −1) ;
}
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 16 / 47
Wyszukiwanie binarne
Uwagi o przeszukiwaniu liniowym i binarnymNiech n=20 000
Algorytm wyszukiwania liniowego – czyli przegladajacy całatablice element po elemencie – wykona 20 000 porównan.
Algorytm przeszukiwania binarnego wykona tylkolog2(20000) = 14 porównan.
Algorytm wyszukiwania binarnego wymaga jednak przekazaniaposortowanych danych.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 17 / 47
Potegowanie liczby
Problem: Oblicz an, dla n ∈ N.
Algorytm naiwny: an = a · a · . . . · a︸ ︷︷ ︸
nZłozonosc: Θ(n)
Algorytm dziel i zwyciezaj:
an =
{an/2 · an/2, gdy n jest parzystean−1/2 · an−1/2 · a, gdy n jest nieparzyste
Złozonosc: T (n) = T (n/2) + Θ(1) ⇒ θ(log2(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 18 / 47
Sortowanie szybkie
Algorytm sortowania szybkiego (ang. quick sort) opracowanyprzez C.A.R. Hoarea w 1962.
Algorytm QuickSortjest typowym algorytmem rekurencyjnym,pracujacym w oparciu o technike dziel i zwyciezaj.
Algorytm zakłada dekompozycje tablicy na mniejsze podtablice,które łatwiej jest posortowac.
Najczesciej stosowany algorytm sortujacy w praktyce.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 19 / 47
Sortowanie szybkie
IdeaRozdzielic elementy danego ciagu na dwie czesci wzgledempewnego ustalonego elementu, tzw. elementu osiowego (ang.pivot) , tak aby na lewo od niego znajdowały sie elementymniejsze, a na prawo elementy wieksze.
Conquer: Recursively sort the two subarrays.
x x xx ! x! x
Rekurencyjnie posortowac elementy na lewo i na prawo odelementu osiowego.
Połaczyc posortowane podtablice.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 20 / 47
Sortowanie szybkie - przykład
2010-02-16 - 51
Algorytm QuickSort -29 40 2 1 6 18 20 32 23 34 39 41
2 1 6 18 20 23
29
40 32 34 39 41
2
1
6 18 20 23
40
32 34 39 41
1 2 6 18 20 23 29 32 34 39 40 41
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 21 / 47
Sortowanie szybkie
W celu podzielenia tablicy konieczne jest wykonanie dwóchoperacji:
znalezienie elementu osiowego i podzieleniu tablicy na dwiepodtablice.przejrzeniu tablicy w celu umieszczenia jej elementów wewłasciwych podtablicach.
Wybór dobrego elementu osiowego nie jest zadaniem łatwym –(obie podtablice powinny miec zblizona wielkosc).Najczesciej stosowane strategie wyboru elementu osiowego:
wybranie pierwszego elementu tablicy.wybranie elementu znajdujacego sie posrodku tablicy.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 22 / 47
Sortowanie szybkie - procedura podziału
Require: tablica A[p..q]1: PARTITION(A,p,q)2: x = A[p]; {element osiowy = A[p]}3: i = p;4: for all j = p + 1 to q do5: if A[j] ≤ x then6: i = i + 1;7: zamien(A[i],A[j]) ;8: end if9: end for
10: zamien (A[p], A[i]) ;11: return i
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 23 / 47
Sortowanie szybkie - procedura podziału, przykład
6 10 13 5 8 3 2 11i j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 47
Sortowanie szybkie - procedura podziału, przykład
6 10 13 5 8 3 2 11i j
6 10 13 5 8 3 2 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 47
Sortowanie szybkie - procedura podziału, przykład
6 10 13 5 8 3 2 11i j
6 10 13 5 8 3 2 11i → j
6 10 13 5 8 3 2 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 47
Sortowanie szybkie - procedura podziału, przykład
6 10 13 5 8 3 2 11i j
6 10 13 5 8 3 2 11i → j
6 10 13 5 8 3 2 11i → j
6 5 13 10 8 3 2 11→ i j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 47
Sortowanie szybkie - procedura podziału, przykład
6 10 13 5 8 3 2 11i j
6 10 13 5 8 3 2 11i → j
6 10 13 5 8 3 2 11i → j
6 5 13 10 8 3 2 11→ i j
6 5 13 10 8 3 2 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 24 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 13 10 8 3 2 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 13 10 8 3 2 11i → j
6 5 3 10 8 13 2 11→ i j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 13 10 8 3 2 11i → j
6 5 3 10 8 13 2 11→ i j
6 5 3 10 8 13 2 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 13 10 8 3 2 11i → j
6 5 3 10 8 13 2 11→ i j
6 5 3 10 8 13 2 11i → j
6 5 3 2 8 13 10 11→ i j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 13 10 8 3 2 11i → j
6 5 3 10 8 13 2 11→ i j
6 5 3 10 8 13 2 11i → j
6 5 3 2 8 13 10 11→ i j
6 5 3 2 8 13 10 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 25 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 3 2 8 13 10 11i → j
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 47
Sortowanie szybkie - procedura podziału, przykład
6 5 3 2 8 13 10 11i → j
2 5 3 6 8 13 10 11i
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 26 / 47
Sortowanie szybkie - algorytm
QuickSort (A, p, r)
Jesli p = r , to koniec
Jesli p < r , to
q = PARTITION(A, p, r).QuickSort(A, p, q-1).QuickSort(A, q+1, r).
Wywołanie: QuickSort(A, 1, n)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 27 / 47
Sortowanie szybkie - Złozonosc pesymistyczna:
Najgorszy przpadek dla algorytmu sortowania szybkiego to ciagdanych juz uporzadkowanych w kolejnosci odwrotnej do pozadanej.
Jesli Split jako medianewybiera zawsze pierwszyelement, to w wynikurozdzielenia, jedna czesc„młodsza” bedzie pusta , adruga „starsza” bedziezawierała o jeden elementmniej niz w poprzednimkroku.Koszt Operacji rozdzielaniadla n elementowego ciaguwynosi n − 1 porównan.
T (n) = T (n − 1) + cnT (n − 1) = T (n − 2) + c(n − 1)T (n − 2) = T (n − 3) + c(n − 2)
...T (2) = T (1) + c(2)T (n) = T (1) + c
∑ni=2 i = O(n2)
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 28 / 47
Sortowanie szybkie - Złozonosc optymistyczna:
Podział jest zawsze perfekcyjnie zbalansowany.Element osiowy jest zawsze po srodku.
T (n) QuickSort (A, p, r)Θ(1) Jesli p = r , to koniec
Jesli p < r , toΘ(n) (1) q = PARTITION(A,p, r).
2 · T (n/2) (2) rekurencyjnie posortuj A[p..q − 1] i A[q + 1..r ].
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 47
Sortowanie szybkie - Złozonosc optymistyczna:
Podział jest zawsze perfekcyjnie zbalansowany.Element osiowy jest zawsze po srodku.
T (n) QuickSort (A, p, r)Θ(1) Jesli p = r , to koniec
Jesli p < r , toΘ(n) (1) q = PARTITION(A,p, r).
2 · T (n/2) (2) rekurencyjnie posortuj A[p..q − 1] i A[q + 1..r ].
T (n) ={
Θ(1) n = 12 · T (n/2) + Θ(n) n > 1
Na podstawie Twierdzenia 1 mozna pokazac, ze powyzsze równanierekurencyjne ma nastepujace rozwiazanie:
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 47
Sortowanie szybkie - Złozonosc optymistyczna:
Podział jest zawsze perfekcyjnie zbalansowany.Element osiowy jest zawsze po srodku.
T (n) QuickSort (A, p, r)Θ(1) Jesli p = r , to koniec
Jesli p < r , toΘ(n) (1) q = PARTITION(A,p, r).
2 · T (n/2) (2) rekurencyjnie posortuj A[p..q − 1] i A[q + 1..r ].
T (n) ={
Θ(1) n = 12 · T (n/2) + Θ(n) n > 1
Na podstawie Twierdzenia 1 mozna pokazac, ze powyzsze równanierekurencyjne ma nastepujace rozwiazanie:
nlogb(a) = nlog2(2) = n1 = n ⇒ (Przypadek2)
T (n) = Θ(n · log2(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 29 / 47
Sortowanie szybkie - Koszt algorytmu
Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = O(n2)
Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = Θ(n · log2(n)).
Złozonosc pamieciowa: O(1).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 30 / 47
Sortowanie szybkie - implementacja
vo id qu ickSor t ( i n t a [ ] , i n t l e f t , i n t r i g h t ) {i f ( l e f t < r i g h t ) {
/ / podz ia ł t a b l i c yi n t m = l e f t ;f o r ( i n t k = l e f t + 1 ; k <= r i g h t ; ++k ) {
i f ( a [ k ] < a [ l e f t ] ) swap ( a[++m] , a [ k ] ) ;}swap ( a [ l e f t ] , a [m] ) ;/ / Rekurencjaqu ickSor t ( a , l e f t , m − 1 ) ;qu ickSor t ( a , m + 1 , r i g h t ) ;
}}vo id swap ( i n t ∗ x , i n t ∗ y ) {
i n t tmp = ∗x ; ∗x = ∗y ; ∗y = tmp ;}
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 31 / 47
Sortowanie przez scalanie
Jeden z pierwszych algorytmów sortowania.
Autor metody: John von Neumann
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 47
Sortowanie przez scalanie
Jeden z pierwszych algorytmów sortowania.
Autor metody: John von NeumannIdea:
Dzielimy zadanie posortowania całego ciagu na dwa podzadania:posortowania jego lewej i prawej połowy.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 47
Sortowanie przez scalanie
Jeden z pierwszych algorytmów sortowania.
Autor metody: John von NeumannIdea:
Dzielimy zadanie posortowania całego ciagu na dwa podzadania:posortowania jego lewej i prawej połowy.Gdy obie czesci tworza juz ciagi uporzadkowane, wtedy scalamy jeotrzymujac rozwiazanie.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 32 / 47
Sortowanie przez scalanie - przykład
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 33 / 47
Sortowanie przez scalanie - algorytm
MergeSort A[1..n]
Jesli n = 1, to koniec
Jesli n ≥ 2, rekurencyjnie posortuj A[1..n/2] i A[n/2+1..n].
Scal obie połowy A w jedna posortowana tablice.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 34 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 1
8 9 12 18 20Najmniejszy nieprzetworzony: 8
Minimum z 1 i 8 1
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 35 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 7
8 9 12 18 20Najmniejszy nieprzetworzony: 8
Minimum z 7 i 81 7
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 36 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 11
8 9 12 18 20Najmniejszy nieprzetworzony: 8
Minimum z 11 i 81 7 8
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 37 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 11
8 9 12 18 20Najmniejszy nieprzetworzony: 9
Minimum z 11 i 91 7 8 9
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 38 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 11
8 9 12 18 20Najmniejszy nieprzetworzony: 12
Minimum z 11 i 121 7 8 9 11
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 39 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 14
8 9 12 18 20Najmniejszy nieprzetworzony: 12
Minimum z 14 i 121 7 8 9 11 12
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 40 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 14
8 9 12 18 20Najmniejszy nieprzetworzony: 18
Minimum z 14 i 181 7 8 9 11 12 14
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 41 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: 16
8 9 12 18 20Najmniejszy nieprzetworzony: 18
Minimum z 16 i 181 7 8 9 11 12 14 16
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 42 / 47
Sortowanie przez scalanie - Operacja scalania
Zapamietujemy pozycje najmniejszego elementu w kazdejposortowanej połówce.
Wstawiamy najmniejszy z dwóch wskazywanych elementów dotablicy pomocniczej.
Operacje powtarzamy dopóty, dopóki nie posortujemy wszystkichelementów.
1 7 11 14 16Najmniejszy nieprzetworzony: -
8 9 12 18 20Nieprzetworzone: 18 i 20
1 7 8 9 11 12 14 16 18 20
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 43 / 47
Sortowanie przez scalanie - implementacja
MergeSort ( i n t A [ ] , i n t l e f t , i n t r i g h t ){
i f ( r i g h t > l e f t ) {mid = ( l e f t + r i g h t ) / 2 ;MergeSort (A, l e f t , mid ) ;MergeSort (A, mid +1 , r i g h t ) ;merge (A, l e f t , mid , r i g h t )
}}
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 44 / 47
Sortowanie przez scalanie - implementacja
vo id merge (T∗ a , i n t l e f t , i n t mid , i n t r i g h t ){
i n t ∗ t = c a l l o c ( r i g h t +1 , s i z e o f ( i n t ) ) ;i n t n = r i g h t − l e f t + 1 ;i n t i = l e f t , j = mid + 1 , k = 0 ;wh i le ( i <= mid && j <= r i g h t ) {
i f ( a [ i ] < a [ j ] ) t [ k ++] = a [ i ++ ] ;e lse t [ k ++] = a [ j ++ ] ;
}wh i le ( i <= mid ) { / / Dolaczanie koncowki p ie rwsze j p o d ta b l i cy
t [ k ++] = a [ i ++ ] ;}wh i le ( j <= r i g h t ) { / / Dolaczanie koncowki d r u g i e j p o d ta b l i cy
t [ k ++] = a [ j ++ ] ;}/ / Kopiowanie t a b l i c y pomocniczejf o r ( k = 0 ; k < n ; ++k ) a [ l e f t + k ] = t [ k ] ;f r e e ( t )
}
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 45 / 47
Sortowanie przez scalanie - Koszt algorytmu
T (n) MergeSort A[1..n]Θ(1) Jesli n = 1, to koniec
2 · T (n/2) Jesli n ≥ 2, rekurencyjnie posortuj A[1..n/2] i A[n/2+1..n].Θ(n) Scal obie połowy A w jedna posortowana tablice.
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 46 / 47
Sortowanie przez scalanie - Koszt algorytmu
T (n) MergeSort A[1..n]Θ(1) Jesli n = 1, to koniec
2 · T (n/2) Jesli n ≥ 2, rekurencyjnie posortuj A[1..n/2] i A[n/2+1..n].Θ(n) Scal obie połowy A w jedna posortowana tablice.
T (n) ={
Θ(1) n = 12 · T (n/2) + Θ(n) n > 1
Na podstawie Twierdzenia 1 mozna pokazac, ze powyzsze równanierekurencyjne ma nastepujace rozwiazanie:
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 46 / 47
Sortowanie przez scalanie - Koszt algorytmu
T (n) MergeSort A[1..n]Θ(1) Jesli n = 1, to koniec
2 · T (n/2) Jesli n ≥ 2, rekurencyjnie posortuj A[1..n/2] i A[n/2+1..n].Θ(n) Scal obie połowy A w jedna posortowana tablice.
T (n) ={
Θ(1) n = 12 · T (n/2) + Θ(n) n > 1
Na podstawie Twierdzenia 1 mozna pokazac, ze powyzsze równanierekurencyjne ma nastepujace rozwiazanie:
nlogb(a) = nlog2(2) = n1 = n ⇒ (Przypadek2)
T (n) = Θ(n · log2(n))
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 46 / 47
Sortowanie przez scalanie - Koszt algorytmu
Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = Θ(n · log2(n))
Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Koszt: T (n) = Θ(n · log2(n)).
Złozonosc pamieciowa: O(1).
Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 2 47 / 47