Algorytmy i Struktury Danych. - wozna.org · Drozdek A. C++. Algorytmy i struktury danych....

72
Algorytmy i Struktury Danych. Organizacja wykladu. Problem Sortowania. Bo˙ zena Wo´ zna-Szcze´ sniak [email protected] Jan Dlugosz University, Poland Wyklad 1 Bo˙ zena Wo´ zna-Szcze´ sniak (AJD) Algorytmy i Struktury Danych. Wyklad 1 1 / 35

Transcript of Algorytmy i Struktury Danych. - wozna.org · Drozdek A. C++. Algorytmy i struktury danych....

Algorytmy i Struktury Danych.Organizacja wykładu. Problem Sortowania.

Bozena [email protected]

Jan Długosz University, Poland

Wykład 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 1 / 35

Na całym cyklu wykładów z Algorytmów i Struktur Danychwykorzystano materiały dostepne z nastepujacych witryn:

http://wazniak.mimuw.edu.pl/

http://ocw.mit.edu/courses/

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 2 / 35

Literatura podstawowa

Cormen T.H., Leiserson Ch.E., Rivest R.L. Wprowadzenie doalgorytmów. WNT, Warszawa, 1997.

Dasgupta S., Papadimitriou Ch., Vasirani U. Algorytmy.Wydawnictwo Naukowe PWN, Seria Fundamenta Informatyki,Warszawa 2010.

Banachowski L., Diks K., Rytter W. Algorytmy i struktury danych.WNT, Warszawa, 1996.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 3 / 35

Literatura uzupełniajaca

Drozdek A. C++. Algorytmy i struktury danych. WydawnictwoHelion. Gliwice, 2004.

Sedgewick R. Algorytmy w C++. Wydawnictwo RM. Warszawa,1999.

Sedgewick R. Algorytmy w C++. Grafy. Wydawnictwo RM.Warszawa, 2003.

Piotr Wróblewski. Algorytmy, struktury danych i technikiprogramowania. Wydanie III. Wydawnictwo Helion. Gliwice, 2003.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 4 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.technikami projektowania algorytmów: dziel i rzadz,programowanie dynamiczne, algorytmy zachłanne,przeszukiwanie z nawrotami, heurystyki.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.technikami projektowania algorytmów: dziel i rzadz,programowanie dynamiczne, algorytmy zachłanne,przeszukiwanie z nawrotami, heurystyki.zestawem algorytmów realizujacych zadania typu wyszukiwanie,sortowanie.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.technikami projektowania algorytmów: dziel i rzadz,programowanie dynamiczne, algorytmy zachłanne,przeszukiwanie z nawrotami, heurystyki.zestawem algorytmów realizujacych zadania typu wyszukiwanie,sortowanie.z abstrakcyjnymi strukturami danych i ich implementacjami: stosy,kolejki, listy, drzewa, drzewa poszukiwan binarnych, grafy, kolejkipriorytetowe.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.technikami projektowania algorytmów: dziel i rzadz,programowanie dynamiczne, algorytmy zachłanne,przeszukiwanie z nawrotami, heurystyki.zestawem algorytmów realizujacych zadania typu wyszukiwanie,sortowanie.z abstrakcyjnymi strukturami danych i ich implementacjami: stosy,kolejki, listy, drzewa, drzewa poszukiwan binarnych, grafy, kolejkipriorytetowe.podstawowymi algorytmami grafowymi.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Cel wykładów z algortmów i struktur danych

Wykład jest poswiecony przede wszystkim metodom efektywnegorozwiazywania problemów na komputerze. Jego celem jestzapoznanie z:

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.technikami projektowania algorytmów: dziel i rzadz,programowanie dynamiczne, algorytmy zachłanne,przeszukiwanie z nawrotami, heurystyki.zestawem algorytmów realizujacych zadania typu wyszukiwanie,sortowanie.z abstrakcyjnymi strukturami danych i ich implementacjami: stosy,kolejki, listy, drzewa, drzewa poszukiwan binarnych, grafy, kolejkipriorytetowe.podstawowymi algorytmami grafowymi.problemami obliczeniowo trudnymi: NP-zupełnosc,nierozstrzygalnosc.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 35

Dlaczego warto poznac algorytmy i ich złozonoscobliczeniowa ?

Algorytmy pozwalaja na pisanie dobrych programów, tzn.programów, które działaja poprawnie i wydajne, sa funkcjonalne,zuzywaja tylko konieczna liczbe zasobów, itp.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznac algorytmy i ich złozonoscobliczeniowa ?

Algorytmy pozwalaja na pisanie dobrych programów, tzn.programów, które działaja poprawnie i wydajne, sa funkcjonalne,zuzywaja tylko konieczna liczbe zasobów, itp.

Algorytmy pozwalaja w sposób formalny mówic o zachowaniuprogramów implementowanych w róznych jezykachprogramowania.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznac algorytmy i ich złozonoscobliczeniowa ?

Algorytmy pozwalaja na pisanie dobrych programów, tzn.programów, które działaja poprawnie i wydajne, sa funkcjonalne,zuzywaja tylko konieczna liczbe zasobów, itp.

Algorytmy pozwalaja w sposób formalny mówic o zachowaniuprogramów implementowanych w róznych jezykachprogramowania.

Najwazniejszymi aspektami algorytmu sa jego poprawnosc izłozonosc obliczeniowa.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznac algorytmy i ich złozonoscobliczeniowa ?

Algorytmy pozwalaja na pisanie dobrych programów, tzn.programów, które działaja poprawnie i wydajne, sa funkcjonalne,zuzywaja tylko konieczna liczbe zasobów, itp.

Algorytmy pozwalaja w sposób formalny mówic o zachowaniuprogramów implementowanych w róznych jezykachprogramowania.

Najwazniejszymi aspektami algorytmu sa jego poprawnosc izłozonosc obliczeniowa.

Złozonosc obliczeniowa algorytmu wyznacza granice pomiedzytym co jest mozliwe do wykonania/ zaimplementowania/zastosowania w rzeczywistosci, a co nie.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Dlaczego warto poznac algorytmy i ich złozonoscobliczeniowa ?

Algorytmy pozwalaja na pisanie dobrych programów, tzn.programów, które działaja poprawnie i wydajne, sa funkcjonalne,zuzywaja tylko konieczna liczbe zasobów, itp.

Algorytmy pozwalaja w sposób formalny mówic o zachowaniuprogramów implementowanych w róznych jezykachprogramowania.

Najwazniejszymi aspektami algorytmu sa jego poprawnosc izłozonosc obliczeniowa.

Złozonosc obliczeniowa algorytmu wyznacza granice pomiedzytym co jest mozliwe do wykonania/ zaimplementowania/zastosowania w rzeczywistosci, a co nie.

Złozonosc obliczeniowa algorytmu to koszt jego realizacji.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 35

Złozonosc algorytmu

Definicja

Złozono sc algorytmu to ilosc zasobów komputera niezbednych dojego wykonania. W zaleznosci od rozwazanego zasobu złozonoscdzielimy na złozono sc czasowa oraz złozono sc pamieciowa .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 7 / 35

Złozonosc algorytmu

Definicja

Złozono sc algorytmu to ilosc zasobów komputera niezbednych dojego wykonania. W zaleznosci od rozwazanego zasobu złozonoscdzielimy na złozono sc czasowa oraz złozono sc pamieciowa .

Złozono sc czasowa to zaleznosc pomiedzy rozmiarem danychwejsciowych a liczba operacji elementarnych (operacjidominujacych) wykonywanych w trakcie przebiegu algorytmu.Operacjami dominujacymi moga byc na przykład: podstawienie,porównanie lub prosta operacja arytmetyczna. Dzieki rozwazaniuoperacji dominujacych analiza złozonosci bedzie zalezna jedynieod algorytmu, a nie od jego implementacji i sprzetu.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 7 / 35

Złozonosc algorytmu

Złozono sc pamieciowa to zaleznosc pomiedzy rozmiaremdanych wejsciowych a ilosca wykorzystanej pamieci. Jako te iloscnajczesciej przyjmuje sie uzyta pamiec maszyny abstrakcyjnej (naprzykład liczbe komórek pamieci maszyny RAM) w funkcjirozmiaru wejscia.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Złozonosc algorytmu

Złozono sc pamieciowa to zaleznosc pomiedzy rozmiaremdanych wejsciowych a ilosca wykorzystanej pamieci. Jako te iloscnajczesciej przyjmuje sie uzyta pamiec maszyny abstrakcyjnej (naprzykład liczbe komórek pamieci maszyny RAM) w funkcjirozmiaru wejscia.

Im wieksze rozmiary danych wejsciowych tym wiecej zasobów(czasu, pamieci) jest koniecznych do wykonania danegoalgorytmu. Złozonosc algorytmu jest zatem funkcja rozmiarudanych wejsciowych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Złozonosc algorytmu

Złozono sc pamieciowa to zaleznosc pomiedzy rozmiaremdanych wejsciowych a ilosca wykorzystanej pamieci. Jako te iloscnajczesciej przyjmuje sie uzyta pamiec maszyny abstrakcyjnej (naprzykład liczbe komórek pamieci maszyny RAM) w funkcjirozmiaru wejscia.

Im wieksze rozmiary danych wejsciowych tym wiecej zasobów(czasu, pamieci) jest koniecznych do wykonania danegoalgorytmu. Złozonosc algorytmu jest zatem funkcja rozmiarudanych wejsciowych.

Złozonosc algorytmu zalezy nie tylko od rozmiaru ciaguwejsciowego (krótke ciagi jest znacznie łatwiej posortowac nizdługie) ale równiez od rodzaju wejscia (prawie uporzadkowanyciag jest znacznie łatwiej posortowac).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 35

Rodzaje złozonosci

W praktyce rozwaza sie dwa podejscia: rozpatrywanie przypadkównajgorszych (złozono sc pesymistyczna ) oraz zastosowanieokreslonego sposobu usrednienia wszystkich mozliwych przypadków(złozono sc oczekiwana ).

Złozonosc pesymistyczna (ang. worst-case):T (n) = maksymalna ilosc zasobu (pamiec, czas) potrzebna dowykonania algorytmu dla dowolnego wejscia o rozmiarze n.

Złozonosc oczekiwana (ang. average-case):T (n) = oczekiwana ilosc zasobu (pamiec, czas) potrzebna dowykonania algorytmu dla dowolnego wejscia o rozmiarze n.Złozonosc oczekiwana zalezy istotnie od załozenia o rozwazanejprzestrzeni probabilistycznej danych wejsciowych.Przestrzen probabilistyczna danych wejsciowych moze byc bardzoskomplikowana, co powoduje, ze wyznaczenie złozonoscioczekiwanej wymaga bardzo trudnych analiz matematycznych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 9 / 35

Notacja asymptotyczna

Do wyrazania złozonosci stosowany jest opis asymptotycznegowzrostu funkcji:

f(n) = O(g(n))

oznaczajacy, ze f (n) ≤ c · g(n) dla pewnej stałej c.

Gdy g(n) = log(n), to mówimy, ze f (n) jest logarytmiczna.Gdy g(n) = n, to mówimy, ze f (n) jest liniowa.Gdy g(n) = n ∗ log(n), to mówimy, ze f (n) jestliniowao-logarytmiczna.Gdy g(n) = n2, to mówimy, ze złozonosc f (n) jest kwadratowa.Jesli g(n) jest wielomianem, to mówimy o złozonosciwielomianowej dla f (n).Jesli g(n) jest wykładnicza, to mówimy o złozonosci wykładniczejdla f (n).Jesli g(n) jest silnie wykładnicza, to mówimy o złozonosci silniewykładniczej dla f (n).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 10 / 35

Notacja asymptotyczna

Funkcja asymptotycznie niemniejsza od funkcji g(n) to takafunkcja f : N −→ R, dla której istnieja c > 0 i n0 ∈ N, zec · |g(n)| ≤ |f (n)| dla wszystkich n ≥ n0. Zbiór funkcjiasymptotycznie niemniejszych niz g(n) oznaczamy przez Ω(g(n)).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Notacja asymptotyczna

Funkcja asymptotycznie niemniejsza od funkcji g(n) to takafunkcja f : N −→ R, dla której istnieja c > 0 i n0 ∈ N, zec · |g(n)| ≤ |f (n)| dla wszystkich n ≥ n0. Zbiór funkcjiasymptotycznie niemniejszych niz g(n) oznaczamy przez Ω(g(n)).Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcjaf : N −→ R, dla której istnieja c0, c1 > 0 i n0 ∈ N, zec0 · |g(n)| 6 |f (n)| ≤ c1 · |g(n)| dla wszystkich n ≥ n0. Zbiór funkcjiasymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)). Azatem Θ(g(n)) = O(g(n)) ∩ Ω(g(n)).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Notacja asymptotyczna

Funkcja asymptotycznie niemniejsza od funkcji g(n) to takafunkcja f : N −→ R, dla której istnieja c > 0 i n0 ∈ N, zec · |g(n)| ≤ |f (n)| dla wszystkich n ≥ n0. Zbiór funkcjiasymptotycznie niemniejszych niz g(n) oznaczamy przez Ω(g(n)).Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcjaf : N −→ R, dla której istnieja c0, c1 > 0 i n0 ∈ N, zec0 · |g(n)| 6 |f (n)| ≤ c1 · |g(n)| dla wszystkich n ≥ n0. Zbiór funkcjiasymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)). Azatem Θ(g(n)) = O(g(n)) ∩ Ω(g(n)).Przykłady:

1100

· n2 − 2n = Θ(n2)

3n3 + 90n2 − 5n + 6046 = Θ(n3)

n5 + 2n = Θ(2n)

n! = Ω(10n)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 35

Problem Sortowania

Definicja problemuNiech (U,≤) bedzie zbiorem liniowo uporzadkowanym z relacjaporzadkujaca ≤ i niech (a1,a2, . . . ,an) bedzie ciagiem n elementów zU, dla pewnego całkowitego n > 0. Znalezc permutacje (a′

1,a′

2, . . . ,a′

n)taka, ze (a′

1 ≤ a′

2 ≤ · · · ≤ a′

n).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Problem Sortowania

Definicja problemuNiech (U,≤) bedzie zbiorem liniowo uporzadkowanym z relacjaporzadkujaca ≤ i niech (a1,a2, . . . ,an) bedzie ciagiem n elementów zU, dla pewnego całkowitego n > 0. Znalezc permutacje (a′

1,a′

2, . . . ,a′

n)taka, ze (a′

1 ≤ a′

2 ≤ · · · ≤ a′

n).

PrzykładWejscie: 8 2 4 9 3 6 Wyjscie: 2 3 4 6 8 9

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Problem Sortowania

Definicja problemuNiech (U,≤) bedzie zbiorem liniowo uporzadkowanym z relacjaporzadkujaca ≤ i niech (a1,a2, . . . ,an) bedzie ciagiem n elementów zU, dla pewnego całkowitego n > 0. Znalezc permutacje (a′

1,a′

2, . . . ,a′

n)taka, ze (a′

1 ≤ a′

2 ≤ · · · ≤ a′

n).

PrzykładWejscie: 8 2 4 9 3 6 Wyjscie: 2 3 4 6 8 9

Uwaga !

Na U moga składac sie zarówno liczby całkowite lub rzeczywiste, jak iU moze byc zbiorem rekordów, które nalezy posortowac według ichkluczy. Jedynym sposobem ustalenie porzadku jest porównywanieelementów parami. Operacja porównania bedzie operacja dominujacaw wszystkich naszych algorytmach sortujacych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 35

Popularne algorytmy sortowania

Sortowanie przez porównywanie elementów:Sortowanie przez proste wybieranie (ang. selection sort)

Sortowanie przez wstawianie (ang. insertion sort)

Sortowanie babelkowe (ang. bubblesort)

Sortowanie pozycyjne (ang. radix sort)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Popularne algorytmy sortowania

Sortowanie przez porównywanie elementów:Sortowanie przez proste wybieranie (ang. selection sort)

Sortowanie przez wstawianie (ang. insertion sort)

Sortowanie babelkowe (ang. bubblesort)

Sortowanie pozycyjne (ang. radix sort)

Sortowanie metoda dziel i zwyciezajSortowanie przez scalanie (ang. merge sort)

sortowanie szybkie (ang. quicksort)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Popularne algorytmy sortowania

Sortowanie przez porównywanie elementów:Sortowanie przez proste wybieranie (ang. selection sort)

Sortowanie przez wstawianie (ang. insertion sort)

Sortowanie babelkowe (ang. bubblesort)

Sortowanie pozycyjne (ang. radix sort)

Sortowanie metoda dziel i zwyciezajSortowanie przez scalanie (ang. merge sort)

sortowanie szybkie (ang. quicksort)

InneSortowanie przez zliczanie (ang. counting sort)

sortowanie przez kopcowanie (ang. heapsort)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 35

Sortowanie przez proste wybieranie

IdeaSortowanie przez wybieranie polega na tym, ze w kazdym krokuznajdujemy najmniejszy element w sortowanym ciagu, po czymprzenosimy ten element na odpowiednia pozycje do ciagu wynikowego(przez zamiane elementów miejscami).Sortowanie odbywa sie w n-1 przebiegach. W i-tym przebieguszukamy i-tego najmniejszego (najwiekszego) elementu.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 14 / 35

Sortowanie przez proste wybieranie

Require: tablica A o rozmiarze nA=[0,. . . ,n-1]

1: for all i = 0 to n − 2 do2: min = i;3: for all j = i + 1 to n − 1 do4: if A[j] < A[min] then5: min = j;6: end if7: j = j + 1;8: end for

zamiana elementu A[min] z elementem A[i] w

tablicy A9: zamiana (A, min, i) ;

10: i = i + 1;11: end for

Ze wzgledu na dwiezagniezdzone petle, zktórych kazda wykonuje siedokładnie n razy, algorytmwymaga n ∗ n porównan,aby posortowac nelementowy ciag, czyli jestw klasie O(n2).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 15 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 0

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 2

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 23 [0,1,2,8,4,3,6,9] 3

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 23 [0,1,2,8,4,3,6,9] 34 [0,1,2,3,4,8,6,9] 4

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 23 [0,1,2,8,4,3,6,9] 34 [0,1,2,3,4,8,6,9] 45 [0,1,2,3,4,8,6,9] 6

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 23 [0,1,2,8,4,3,6,9] 34 [0,1,2,3,4,8,6,9] 45 [0,1,2,3,4,8,6,9] 66 [0,1,2,3,4,6,8,9] 8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

nr iteracji (warto sc i ) Tablica Minimum0 [9,1,6,8,4,3,2,0] 01 [0,1,6,8,4,3,2,9] 1 jest na własciwej pozycji2 [0,1,6,8,4,3,2,9] 23 [0,1,2,8,4,3,6,9] 34 [0,1,2,3,4,8,6,9] 45 [0,1,2,3,4,8,6,9] 66 [0,1,2,3,4,6,8,9] 87 [0,1,2,3,4,6,8,9] 9 jest na własciwej pozycji

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 35

Sortowanie przez proste wybieranie - Przykład

2010-02-16 - 14

Sortowanie przez wybieranie –44 55 12 42 94 18 06 67Klucze

!"#$%&!'(

4455 12 42 94 1806 67i = 2

i = 3

i = 5

i = 6

i = 4

Krokialgorytmu

445512 42 94 1806 67445512 42 941806 67

44 5512 42 941806 6744 5512 42 941806 67

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 17 / 35

Sortowanie przez proste wybieranie - Koszt algorytmu

Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: ciag uporzadkowany w odwrotnej kolejnosci.Koszt:

T (n) = n − 1 + n − 2 + . . .+ 2 + 1 = n(n − 1)/2 = O(n2)

Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: wszystkie permutacje ciagu wejsciowego równieprawdopodobne.Koszt: O(n2).

Złozonosc pamieciowa: O(1).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 18 / 35

Sortowanie przez proste wybieranie - implementacja wC/C++

1 void swap ( i n t data [ ] , i n t i , i n t j )2 3 i n t temp = data [ i ] ;4 data [ i ] = data [ j ] ;5 data [ j ] = temp ;6

1 i n t max( i n t [ ] a , i n t n )2 3 i n t currentMax = 0;4 fo r ( i n t i = 1 ; i <= n ; i ++)5 i f ( a [ currentMax ] < a [ i ] ) currentMax = i ;6 return currentMax ;7

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 19 / 35

Sortowanie przez proste wybieranie - implementacja wC/C++

1 void s e l e c t i o n S o r t ( i n t [ ] a , i n t s ize )2 3 fo r ( i n t n = s ize ; n > 1; n−−)4 5 i n t j = max( a , n−1);6 swap ( a , j , n − 1 ) ;7 8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 20 / 35

Sortowanie przez proste wybieranie - implementacja wC/C++

1 void s e l e c t i o n S o r t ( i n t a [ ] , i n t s ize )2 3 i n t i , j , min , temp ;4 fo r ( i = 0 ; i < s ize −1; i ++)5 6 min = i ;7 fo r ( j = i +1; j < s ize ; j ++)8 9 i f ( a [ j ] < a [ min ] ) min = j ;

10 11 temp = a [ i ] ;12 a [ i ] = a [ min ] ;13 a [ min ] = temp ;14 15

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 21 / 35

Sortowanie przez wstawianie

IdeaSortowanie przez wstawianie odbywa sie w n− 1 przebiegach. W i-tymprzebiegu elementy na pozycjach 1, . . . , (i − 1) sa juz uporzadkowane,a wstawiany i-ty element przepycha sie do przodu na własciwemiejsce, tak by stworzył wraz z innymi ciag uporzadkowany długosci i .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 22 / 35

Sortowanie przez wstawianie - przykład

8 2 4 9 3 6

2 8 4 9 3 6

2 4 8 9 3 6

2 4 8 9 3 6

2 3 4 8 9 6

2 3 4 6 8 9 done

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 23 / 35

Sortowanie przez wstawianie

Require: tablica A o rozmiarze nA=[0,. . . ,n-1]

1: for i = 1 to n − 1 do2: key = A[i];3: j = i − 1;4: while j ≥ 0 and A[j] > key do5: A[j + 1] = A[j];6: j = j − 1;7: end while8: A[j + 1] = key ;9: end for

Ze wzgledu na dwiezagniezdzone petle, zktórych kazda wykonuje siedokładnie n razy, algorytmwymaga n ∗ n porównan,aby posortowac nelementowy ciag, czyli jestw klasie O(n2).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 24 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 9

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 6

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3[1,4,6,3,8,9,2,0] 3

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3[1,4,6,3,8,9,2,0] 3[1,4,3,6,8,9,2,0] 3

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3[1,4,6,3,8,9,2,0] 3[1,4,3,6,8,9,2,0] 3[1,3,4,6,8,9,2,0] 3

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3[1,4,6,3,8,9,2,0] 3[1,4,3,6,8,9,2,0] 3[1,3,4,6,8,9,2,0] 3

6 [1,2,3,4,6,8,9,0] 2

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - Przykład

nr iteracji (warto sc i ) Tablica Rozwazany element0 [9,1,6,8,4,3,2,0] 91 [1,9,6,8,4,3,2,0] 12 [1,6,9,8,4,3,2,0] 63 [1,6,8,9,4,3,2,0] 84 [1,6,8,4,9,3,2,0] 4

[1,6,4,8,9,3,2,0] 4[1,4,6,8,9,3,2,0] 4

5 [1,4,6,8,3,9,2,0] 3[1,4,6,3,8,9,2,0] 3[1,4,3,6,8,9,2,0] 3[1,3,4,6,8,9,2,0] 3

6 [1,2,3,4,6,8,9,0] 27 [1,2,3,4,6,8,9,0] 0

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 35

Sortowanie przez wstawianie - przykład

2010-02-16 - 18

Sortowanie przez wstawianie - przyk44 55 12 42 94 18 06 67Klucze

!"#$%&!'(

44 55 12 42 94 18 06 67i = 2

44 5512 42 94 18 06 67i = 3

44 5512 42 94 18 06 67i = 5

44 5512 42 9418 06 67i = 6

44 5512 42 94 18 06 67i = 4

44 5512 42 941806 67i = 7

44 5512 42 941806 67i = 8

Krokialgorytmu

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 26 / 35

Sortowanie przez wstawianie - Koszt algorytmu

Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: ciag uporzadkowany w odwrotnej kolejnosci.Koszt:

T (n) = 1 + 2 + 3 + . . .+ n − 1 = n(n − 1)/2 = O(n2)

Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: wszystkie permutacje ciagu wejsciowego równieprawdopodobne.Koszt: O(n2).

Złozonosc pamieciowa: O(1).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 27 / 35

Sortowanie przez wstawianie - implementacja wC/C++

1 void i n s e r t ( i n t [ ] a , i n t n , i n t x )2 3 / / i n s e r t x i n t o a [ 0 . . i −1]4 i n t j ;5 fo r ( j = i − 1; j >= 0 && x < a [ j ] ; j −−)6 a [ j + 1 ] = a [ j ] ;7 a [ j + 1 ] = x ;8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 28 / 35

Sortowanie przez wstawianie - implementacja wC/C++

1 void i n s e r t S o r t ( i n t [ ] a , i n t n )2 3 fo r ( i n t i = 1 ; i < n ; i ++)4 5 / / i n s e r t a [ i ] i n t o a [ 0 : i −1]6 i n s e r t ( a , i , a [ i ] ) ;7 8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 29 / 35

Sortowanie babelkowe

W sortowaniu babelkowym liczby zachowuja sie jak babelki, po kolei,jedna po drugiej ida do góry (lub w prawo). Sortowanie babelkowe jestwykonywane w n − 1 fazach. W fazie i-tej wyznaczany jest i-tynajmniejszy/najwiekszy element.

IdeaSprawdzamy cały ciag od konca. Jezeli trafimy na pareelementów, w której wiekszy poprzedza mniejszy, to zamieniamyje miejscami.

Czynnosc powtarzamy tak długo, az podczas sprawdzania całegociagu, nie zajdzie ani jedna zamiana elementów.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 30 / 35

Sortowanie babelkowe

Require: tablica A o rozmiarze nA=[0,. . . ,n-1]

1: for i = 0 to n − 1 do2: for j = n downto i + 1 do3: if A[j − 1] > A[j] then4: Zamiana(A, j − 1, j);5: end if6: end for7: end for

Ze wzgledu na dwiezagniezdzone petle, zktórych kazda wykonuje siedokładnie n razy, algorytmwymaga n ∗ n porównan,aby posortowac nelementowy ciag, czyli jestw klasie O(n2).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 31 / 35

Sortowanie babelkowe - przykład

2010-02-16 - 24

-

44Klucze

!"#$%&!'(

55

i = 1

42

i = 2

18

i = 4

06

94

i = 3

67

44

1242

18

06

94

67

06 06K r o k i a l g o r y t m u

12 555518

9442

67

44445542

18

6794

12 1206

4455

4218

6794

1206

4455

4218

6794

12

i = 506

4455

4218

6794

12

i = 606

4455

4218

6794

12

i = 7

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 32 / 35

Sortowanie przez wstawianie - Koszt algorytmu

Złozonosc pesymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: ciag uporzadkowany w odwrotnej kolejnosci.Koszt:

T (n) = 1 + 2 + 3 + . . .+ n − 1 = n(n − 1)/2 = O(n2)

Złozonosc optymistyczna:Operacja dominujaca: porównywanie elementów.Wejscie: wszystkie permutacje ciagu wejsciowego równieprawdopodobne.Koszt: O(n2).

Złozonosc pamieciowa: O(1).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 33 / 35

Sortowanie babelkowe - implementacja w C/C++

1 void bubbleSor t ( i n t A [ ] , i n t n )2 3 fo r ( i n t i =0; i <n ; i ++)4 fo r ( i n t j =n−1; j > i ; j −−)5 i f (A [ j ] < A [ j −1]) 6 / / zamiana A[ j −1] z A[ j ]7 i n t temp= A[ j −1];8 A [ j −1] = A[ j ] ;9 A [ j ]= temp ;

10 11

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 34 / 35

Sortowanie babelkowe - implementacja w C/C++

Zmodyfikowany algorytm sortowania babelkowego, któregowykonywanie konczy sie z chwila stwierdzenia, ze dana tablica a jestjuz posortowana.

1 #include <s tdboo l . h>2 void bubbleSor t ( i n t [ ] a , i n t n ) 3 bool done ;4 do 5 done = t rue ;6 fo r ( i n t j = 0 ; j < n ; j ++) 7 i f ( a [ j +1] < a [ j ] ) 8 swap ( a , j , j +1 ) ;9 done = fa lse ;

10 11 12 while ( ! done ) ;13

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 35 / 35