Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na...
Transcript of Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na...
![Page 1: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/1.jpg)
Algoritmy vyhledávání a řazení
Zatím nad lineární datovou strukturou (polem) …
![Page 2: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/2.jpg)
VyhledáváníVyhledávací problém• je dáno Universum (množina prvků) U• je dána konečná množina prvků X ⊂ U
(vyhledávací prostor)• mějme prvek x ∈ U• vyhledávací problém (Najdi(x,X)) je definován
jako rozhodovací problém: – Najdi(x,X): jestliže x ∈ X, pak najdi=1, jinak
najdi=0
![Page 3: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/3.jpg)
• algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci
• druhy vyhledávacích problémů:– dynamický lexikon
• vyhledávací prostor se v průběhu zpracování mění (vložení, rušení, náhrada prvku)
• příklad: autorský katalog knihovny
– statický lexikon• vyhledávací prostor se v průběhu zpracování
nemění• příklad: telefonní seznam
![Page 4: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/4.jpg)
• pro jednoduchost se omezíme na čísla typu int (univerzum U = int)
• množina X, ve které provádíme hledání, bude reprezentována polem čísel (zatím, poznáme i jiné výhodnější reprezentace, např. strom)
• jako výsledek hledání při programování zpravidla potřebujeme znát index nalezeného prvku (resp. ukazatel)
![Page 5: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/5.jpg)
Sekvenční vyhledávání
• používá se při vyhledávání v poli (seznamu), které je neseřazené
• princip: sekvenčně (v cyklu) procházím prvky pole, dokud prvek nenaleznu nebo neprojdu celé pole
![Page 6: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/6.jpg)
• budeme předpokládat následující pole#define MAX 10 0
int pole [MAX];
• implementujeme vyhledávací funkci, která zjistí, zda je v poli, obsahující n prvků, hledaný prvek x; v kladném případě vrátí funkce index prvku, v případě neúspěchu hodnotu -1
![Page 7: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/7.jpg)
int hledej( int x, int *pole, int n)
/* x je hledaný prvek, n je po čet prvk ů pole */
int i=0;
while(i<n && pole[i]!=x) i++;
return i!=n ? i : -1;
![Page 8: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/8.jpg)
• někdy se implementovalo sekvenční vyhledávání se zarážkou (tzv. sentinel)– pole má o jeden prvek navíc (poslední), do
kterého vložím hledaný prvek– došlo ke zjednodušení podmínky v cyklu
![Page 9: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/9.jpg)
int hledej2( int x, int *pole, int n)
int i=0;
pole[n]=x;
while(pole[i]!=x) i++;
return i!=n ? i: -1;
![Page 10: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/10.jpg)
Vyhledávání binárním půlením
• používá se při vyhledávání v poli, kde jsou prvky seřazeny
• princip: – porovnám hledaný prvek x s prvkem uprostřed
pole pole[i]
– dojde-li ke shodě, prvek je nalezen; je-li x<pole[i], pokračuji v hledání v levé polovině pole bin. půlením, je-li x>pole[i], pokračuji v hledání v pravé polovině pole bin. půlením
– vyhledávání končí neúspěchem, je-li prohledávaná část pole prázdná
![Page 11: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/11.jpg)
int bin_pul( int x, int *pole, int n)
int i,l,p;
l=0; p=n-1;
do
i = (l+p)/2;
if (x<pole[i]) p=i-1; else l=i+1;
while(pole[i]!=x && l<=p);
return pole[i]==x ? i: -1;
![Page 12: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/12.jpg)
• trochu jinak:int bin_pul( int x, int *pole, int n)
int i,l,p;
l=0; p=n-1;
do
i = (l+p)/2;
if (x==pole[i]) return i;
if (x<pole[i]) p=i-1; else l=i+1;
while(l<=p);
return -1;
![Page 13: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/13.jpg)
• binární půlení se někdy vylepšuje jiným výpočtem indexu i (lineární interpolace podle hodnoty hledaného prvku vzhledem k nejmenšímu a největšímu prvku v poli)
i = (p-l)*(x-pole[l])/(pole[p]-pole[l])
![Page 14: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/14.jpg)
Hodnocení algoritmů
• rychlost (kvalitu) algoritmů měříme tzv. složitostí (complexity) :– operační složitostí O(n) – doba trvání
(počet kroků) algoritmu v závislosti na rozměru problému,
• např. na počtu řazených čísel, velikost prohledávacího prostoru
– paměťovou složitostí M(n) – velikost požadované paměti v závislosti na rozměru problému
![Page 15: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/15.jpg)
Hodnocení algoritmů
• rychlost běhu programu závisí na mnoha faktorech– rychlost procesoru, velikost cache, progr.
jazyku, překladači, stylu programování, …
• snažíme se určit rychlost algoritmu bez ohledu na tyto faktory; zajímá nás většinou chování algoritmu pro velké množství vstupních dat
![Page 16: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/16.jpg)
Hodnocení algoritmů
• rychlost (kvalitu) algoritmů měříme tzv. asymptotickou složitostí (complexity)– jak závisí počet kroků algoritmu na počtu
vstupních dat n limitně pro n →∞– snažíme se eliminovat konstanty– složitosti vyjadřujeme tzv. řádem růstu
funkce
![Page 17: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/17.jpg)
Hodnocení algoritmů
Asymptotická horní mez: O-notace • jsou-li dány funkce f(n) a g(n), pak řekneme, že f(n) je nejvýše řádu g(n), f(n) = O(g(n)), jestliže platí
– říkáme také, že f(n) roste maximálně tak rychle jako g(n)
– používáme ji pro vyjádření horní meze růstu až na multiplikativní konstantu
c.g(n) : f(n) nn Nn Rc ≤≥∀∈∃∈∃ ++00 :
![Page 18: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/18.jpg)
Hodnocení algoritmů
Asymptotická dolní mez: Ω-notace • jsou-li dány funkce f(n) a g(n), pak řekneme, že f(n) je nejméně řádu g(n), f(n) = Ω(g(n)), jestliže platí
– říkáme také, že f(n) roste minimálně tak rychle jako g(n)
– používáme ji pro vyjádření dolní meze růstu až na multiplikativní konstantu
c.g(n) : f(n) nn Nn Rc ≥≥∀∈∃∈∃ ++00 :
![Page 19: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/19.jpg)
Hodnocení algoritmů
Asymptotická těsná mez: Θ-notace • jsou-li dány funkce f(n) a g(n), pak řekneme, že f(n) je téhož řádu jako g(n), f(n) = Θ(g(n)), jestliže platí
– říkáme také, že f(n) roste stejně tak rychle jako g(n) až na multiplikativní konstantu
g(n) c f(n) ng :c nn Nn Rcc 210021 )(:, ≤≤≥∀∈∃∈∃ ++
![Page 20: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/20.jpg)
Hodnocení algoritmů
• platí
(g(n)) f(n) O(g(n))f(n) (g(n)) f(n) Ω=∧=⇔Θ=
![Page 21: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/21.jpg)
• např.– 3n2 + 2n + 5 je řádu O(n2)– 5n4 + 3n2 - 3 je řádu O(n4)– 2n + 3 je řádu O(2n)– n! + 3n + 4 je řádu O(n!)
polynomiální
exponenciální
faktoriální
![Page 22: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/22.jpg)
Odhadněte operační složitost:• sekvenčního vyhledávání
O(n)• násobení čtvercových matic o rozměru n
O(n3)• hledání binárním půlením
O(log2n)
![Page 23: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/23.jpg)
• někdy se stanovuje složitost pro různé případy uspořádání vstupních dat:– v nejlepším případě– v průměrném případě
• často je složité statisticky určit tento případ
– v nejhorším případě
• příklad: lineární hledání:– hledaný prvek je na prvním místě v poli– hledaný prvek je uprostřed– hledaný prvek je na konci pole nebo není
přítomen
![Page 24: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/24.jpg)
ŘazeníŘazení:• vytvoření posloupnosti prvků xi, takové,
žexj1 ≤ xj2 ≤,…, ≤ xjn
resp. xj1 ≥ xj2 ≥,…, ≥ xjn
• univerzální algoritmy řazení:– zatřiďováním– výběrem maximálního (minimálního) prvku– záměnou (Bubble Sort)– Quick Sort
![Page 25: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/25.jpg)
Řazení zatřiďováním• do již seřazené posloupnosti vkládáme
každý nový prvek rovnou na správné místo
• vhodné např. pro spojový seznam, nikoliv pro pole
• nutné spojit s operací hledání
![Page 26: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/26.jpg)
Řazení výběrem maximálního (minimálního) prvku
• v poli o n prvcích nalezneme maximální (minimální) prvek a vyměníme jej s posledním (prvním) prvkem
• krok hledání maximálního (minimálního) prvku opakujeme na poli o délce n-1, n-2,…,1
![Page 27: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/27.jpg)
7 2 5
0 1 2 3 4
imax: 0
max: 6
6 3
![Page 28: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/28.jpg)
7 2 5
0 1 2 3 4
imax: 0
max: 6
6 3
![Page 29: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/29.jpg)
7 2 5
0 1 2 3 4
imax: 1
max: 7
6 3
![Page 30: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/30.jpg)
7 2 5
0 1 2 3 4
imax: 1
max: 7
6 3
![Page 31: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/31.jpg)
7 2 5
0 1 2 3 4
imax: 1
max: 7
6 3
![Page 32: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/32.jpg)
2
0 1 2 3 4
imax: 1
max: 7
7 56 3
![Page 33: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/33.jpg)
2
0 1 2 3 4
imax: 1
max: 7
5 76 3
![Page 34: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/34.jpg)
2
0 1 2 3 4
imax: 1
max: 7
5 76 3
![Page 35: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/35.jpg)
2
0 1 2 3 4
imax: 0
max: 6
5 76 3
![Page 36: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/36.jpg)
2
0 1 2 3 4
imax: 0
max: 6
5 76 3
![Page 37: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/37.jpg)
2
0 1 2 3 4
imax: 0
max: 6
5 76 3
![Page 38: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/38.jpg)
2
0 1 2 3 4
imax: 0
max: 6
5 76 3
![Page 39: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/39.jpg)
6 3 7
0 1 2 3 4
imax: 0
max: 6
5 2
![Page 40: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/40.jpg)
6 3 7
0 1 2 3 4
imax: 0
max: 6
5 2
![Page 41: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/41.jpg)
2 3 7
0 1 2 3 4
imax: 0
max: 6
5 6
![Page 42: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/42.jpg)
2 3 7
0 1 2 3 4
imax: 0
max: 6
5 6
![Page 43: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/43.jpg)
2 3 7
0 1 2 3 4
imax: 0
max: 2
5 6
![Page 44: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/44.jpg)
2 3 7
0 1 2 3 4
imax: 0
max: 2
5 6
![Page 45: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/45.jpg)
2 3 7
0 1 2 3 4
imax: 1
max: 5
5 6
![Page 46: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/46.jpg)
2 3 7
0 1 2 3 4
imax: 1
max: 5
5 6
![Page 47: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/47.jpg)
2 5 7
0 1 2 3 4
imax: 1
max: 5
3 6
![Page 48: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/48.jpg)
2 5 7
0 1 2 3 4
imax: 1
max: 5
3 6
![Page 49: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/49.jpg)
2 5 7
0 1 2 3 4
imax: 0
max: 2
3 6
![Page 50: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/50.jpg)
2 5 7
0 1 2 3 4
imax: 0
max: 2
3 6
![Page 51: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/51.jpg)
2 5 7
0 1 2 3 4
imax: 1
max: 3
3 6
![Page 52: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/52.jpg)
2 5 7
0 1 2 3 4
imax: 1
max: 3
3 6
![Page 53: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/53.jpg)
2 5 7
0 1 2 3 4
imax: 1
max: 3
3 6
![Page 54: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/54.jpg)
void razeni_max_prvek( int *pole, int n)
int i,j,index_max,d;
for(i=n-1;i>=1;i--)
index_max = 0;
for(j=1;j<=i;j++)
if(pole[j]>pole[index_max]) index_max=j;
d=pole[index_max]; pole[index_max]=pole[i]; pole[i]=d;
![Page 55: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/55.jpg)
Řazení záměnou (bublinkové řazení)(Bubble Sort)
• porovnáváme postupně v celém poli dva sousední prvky; pokud nejsou ve správném pořadí, zaměníme je
• po tomto kroku je na posledním místě pole největší prvek („probublá” na konec)
• krok algoritmu probublávání aplikujeme na postupně na pole o délce n-1, n-2,…,1
![Page 56: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/56.jpg)
6 3 2
0 1 2 3
7
![Page 57: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/57.jpg)
6
0 1 2 3
porovnám
7 23
![Page 58: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/58.jpg)
6
0 1 2 3
porovnám
7 23
![Page 59: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/59.jpg)
6
0 1 2 3
prohodím
7 23
![Page 60: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/60.jpg)
6
0 1 2 3
prohodím
3 27
![Page 61: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/61.jpg)
7
0 1 2 3
porovnám
26 3
![Page 62: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/62.jpg)
7
0 1 2 3
prohodím
26 3
![Page 63: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/63.jpg)
2
0 1 2 3
prohodím
76 3
![Page 64: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/64.jpg)
2
0 1 2 3
76 3
![Page 65: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/65.jpg)
3 2
0 1 2 3
76
![Page 66: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/66.jpg)
6 3 7
0 1 2 3
porovnám
2
![Page 67: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/67.jpg)
6 3 7
0 1 2 3
prohodím
2
![Page 68: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/68.jpg)
3 6 7
0 1 2 3
prohodím
2
![Page 69: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/69.jpg)
3 6 7
0 1 2 3
porovnám
2
![Page 70: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/70.jpg)
3 6 7
0 1 2 3
prohodím
2
![Page 71: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/71.jpg)
3 2 7
0 1 2 3
prohodím
6
![Page 72: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/72.jpg)
3 2 7
0 1 2 3
6
![Page 73: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/73.jpg)
3 2 7
0 1 2 3
6
![Page 74: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/74.jpg)
3 2 6 7
0 1 2 3
porovnám
![Page 75: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/75.jpg)
3 2 6 7
0 1 2 3
prohodím
![Page 76: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/76.jpg)
2 3 6 7
0 1 2 3
prohodím
![Page 77: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/77.jpg)
2 3 6 7
0 1 2 3
![Page 78: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/78.jpg)
void bublinka( int *pole, int n)
int i,j,d;
for(i=n-1;i>=1;i--)
for(j=0;j<=i-1;j++)
if(pole[j]>pole[j+1])
d=pole[j];
pole[j]=pole[j+1];
pole[j+1]=d;
![Page 79: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/79.jpg)
• bublinkové řazení se dá vylepšit:– pokud jsme při průchodu polem neprovedli
ani jedenkrát záměnu, pole je seřazené a cyklus předčasně ukončíme
– bublání provádíme oběma směry (i k nižším indexům)
Domácí úkol: vylepšete bublinkové řazení
![Page 80: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/80.jpg)
void bublinka2( int *pole, int n)
int i,j,d;
int prohozeno=1;
for(i=n-1;i>=1 && prohozeno;i--)
prohozeno = 0;
for(j=0;j<=i-1;j++)
if(pole[j]>pole[j+1])
prohozeno = 1;
d=pole[j];
pole[j]=pole[j+1];
pole[j+1]=d;
![Page 81: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/81.jpg)
• odhadněte operační složitost bublinkového řazení a řazení výběrem maximálního prvku
O(n2)
![Page 82: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/82.jpg)
• problémy, které lze řešit (vyzkoušením všech možností) v polynomiálním čase, se nazývají P-problémy
• mnoho problémů v polynomiálním čase řešit nelze (mají nepolynomiální složitost)– u některých existuje ale nedeterministický
algoritmus, který je řeší v polynomiálním čase (NP – nedeterministicky polynomiální)
• není znám deterministický algoritmus pro nalezení řešení: NP- úplné problémy (NP- complete)
![Page 83: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/83.jpg)
Bohužel, v ětšina reálných a zajímavýchproblém ů (i dopravních) je NP -úplných
• řeší se přibližnými metodami (heuristikami), metodami umělé inteligence, genetickými algoritmy aj.
![Page 84: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/84.jpg)
Příklad NP problémů
• problém obchodního cestujícího– odvozený: souřadnicová vrtačka
• testování obvodů - úplný test• splnitelnost booleovských formulí• hledání podmnožiny dep• hledání všech cest mezi dvěma body• Hanojské věže
![Page 85: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/85.jpg)
Quick Sort
• nejrychlejší algoritmus řazení• založen na technice řešení problémů
rozděl a panuj (divide and conquer)– oblast řešení se rozdělí na dvě (stejně)
velké oblasti, vyřeší se na každé polovině zvlášť a spojí se do výsledného řešení
![Page 86: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/86.jpg)
Aplikace rozděl a panuj na Quick-Sort1. Vyber pivot – prvek ve středu pole2. Přeskup pole – prvky menší než pivot
přesuň nalevo od něj, prvky větší než pivot přesuň napravo od něj
3. Seřaď část pole nalevo a napravo od pivota
• řazení levé a pravé části pole se provádí stejnou technikou (výběr pivota,…) až k části pole o délce 1
• nelze naprogramovat jinak než rekurzí
![Page 87: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/87.jpg)
void Quick_sort( int l, int r, int *pole)int pivot,d,i,j;if (l < r)
i = l; j = r;pivot = pole[(l+r)/2];do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d; while (i < j);Quick_sort(l,j-1,pole);Quick_sort(i+1,r,pole);
![Page 88: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/88.jpg)
• volání funkceQuick_sort(0,n -1,pole);
• nejrychlejší algoritmus řazení, složitost O(nlog 2n)
• poznámka: často se při řazení nepřehazují prvky, ale vytváří se pole indexů
![Page 89: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/89.jpg)
6 7 3 2 5
0 1 2 3 4
i: 0
j: 4
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 90: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/90.jpg)
6 7 3 2 5
0 1 2 3 4
i: 0
j: 3
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 91: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/91.jpg)
6 7 3 2 5
0 1 2 3 4
i: 0
j: 3
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 92: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/92.jpg)
2 7 3 6 5
0 1 2 3 4
i: 0
j: 3
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 93: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/93.jpg)
2 7 3 6 5
0 1 2 3 4
i: 0
j: 3
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 94: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/94.jpg)
2 7 3 6 5
0 1 2 3 4
i: 1
j: 3
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 95: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/95.jpg)
2 7 3 6 5
0 1 2 3 4
i: 1
j: 3
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 96: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/96.jpg)
2 7 3 6 5
0 1 2 3 4
i: 1
j: 2
pivot: 3 i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 97: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/97.jpg)
2 7 3 6 5
0 1 2 3 4
i: 1
j: 2
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 98: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/98.jpg)
2 3 7 6 5
0 1 2 3 4
i: 1
j: 2
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j) ;
![Page 99: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/99.jpg)
2 3 7 6 5
0 1 2 3 4
i: 1
j: 2
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 100: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/100.jpg)
2 3 7 6 5
0 1 2 3 4
i: 1
j: 2
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 101: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/101.jpg)
2 3 7 6 5
0 1 2 3 4
i: 1
j: 1
pivot: 3i j
l: 0
r: 4
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);
![Page 102: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/102.jpg)
2 3 7 6 5
0 1 2 3 4
i: 1
j: 1
pivot:
l: 0
r: 4
QuickSort(0,0,pole) QuickSort(2,4,pole)
do
while (pole[i] < pivot) i++;while (pole[j] > pivot) j--;if (i < j) d = pole[i];
pole[i] = pole[j]; pole[j] = d;
while (i < j);QuickSort(l,j-1,pole);QuickSort(j+1,r,pole);
![Page 103: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/103.jpg)
Mergesort(řazení slučováním)
1. Rozdělíme řazené pole na poloviny2. Seřadíme každou polovinu3. Obě seřazené poloviny sloučíme
![Page 104: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/104.jpg)
Mergesortvoid Merge_sort( int l, int r, int *pole)// l - levý index, r - pravý index v četn ě
int i,j,k,q;int *s;
if (l>=r) return;q = (l+r)/2;Merge_sort(l,q,pole);Merge_sort(q+1,r,pole);
![Page 105: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/105.jpg)
Mergesort// slu čuji, s je pomocne poles = ( int*)malloc( sizeof( int)*(r-l+1));i = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];// kopirovani pole s zpet do casti pole od indexu lfor(i=0;i<k;i++) pole[l++] = s[i];free(s);
![Page 106: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/106.jpg)
• volání funkcevoid razeni_merge( int n, int pole[])
// n – velikost pole
Merge_sort(0,n-1,pole);
• složitost algoritmu řazení O(nlog 2n)• nevýhoda
– nutnost existence pomocného pole (větší paměťová složitost)
![Page 107: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/107.jpg)
7 6 3 2 5
0 1 2 3 4
l r
l: 0
r: 4
void Merge_sort( int l, int r, int *pole)// l - levý index, r - pravý index v četn ě
int i,j,k,q;int *s;
if (l>=r) return;q = (l+r)/2;Merge_sort(l,q,pole);Merge_sort(q+1,r,pole);
q: 2
![Page 108: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/108.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 0
j: 3
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 0
2s:
![Page 109: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/109.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 1
j: 4
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 1
2 3s:
![Page 110: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/110.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 1
j: 5
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 2
2 3 5s:
![Page 111: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/111.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 1
j: 5
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 2
2 3 5s:
![Page 112: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/112.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 1
j: 5
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 2
2 3 5 6s:
![Page 113: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/113.jpg)
3 6 7 2 5
0 1 2 3 4
i j
i: 1
j: 5
// slu čuji, s je pomocne polei = l; j = q+1;k = 0;while(i<=q && j <= r)
if (pole[i]<pole[j]) s[k++] = pole[i++];else s[k++] = pole[j++];
// kopirovani zbytku poli - probehne jen jeden z cykl uwhile (i<=q) s[k++] = pole[i++];while (j<=r) s[k++] = pole[j++];
k: 2
2 3 5 6 7s:
![Page 114: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/114.jpg)
Poznámky ke složitostem
• lineární– zdvojnásobení velikosti problému vede k
dvojnásobnému času výpočtu– zrychlení počítače 2x urychlí řešení problému 2x
• kvadratická– zdvojnásobení velikosti problému vede k čtyřnásobnému času výpočtu
– zrychlení počítače 2x urychlí řešení problému 1,414x
![Page 115: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/115.jpg)
Poznámky ke složitostem• předpokládejme, že 1 operace trvá 1us, počet
operací je dán vztahem v 1. sloupci• doba výpočtu:
• srovnej: počet atomů ve vesmíru se odhaduje na 1080
a stáří vesmíru na 14 109 let)• zdroj: přednášky ZDT, FIT ČVUT, doc. Kolář
![Page 116: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/116.jpg)
Poznámky ke složitostem• pro malé množství dat, resp. určité
uspořádání dat může být asymptoticky pomalejší algoritmus rychlejší– pokud aplikujeme bublinkové řazení s testem
prohození na seřazenou posloupnost, vykoná se pouze n kroků, ale Quick-Sort vykoná n.log2n vždy
– pro malý rozměr pole u algoritmu Quick-Sort převáží konstanty – režie související s rekurzivním voláním
![Page 117: Algoritmy vyhledávání a řazení · 2016. 2. 23. · • algoritmy vyhledávání závisejí na vyhledávacím prostoru a jeho reprezentaci • druhy vyhledávacích problémů:](https://reader033.fdocument.pub/reader033/viewer/2022053118/609c45593f962d478712b523/html5/thumbnails/117.jpg)
Poznámky ke složitostem• ale vždy existuje určité n0, od kterého bude
asymptoticky rychlejší algoritmus rychlejší bez ohledu na rychlost počítače, jazyk, překladač, …– výkon počítače, překladač, …, mění konstanty
vztahu, které posouvají bod n0