Zhrnutie na Dynamické dátové štruktúry a algoritmy
Dynamické Dátové Štruktúry a Algoritmy: Komplexný Sprievodca
Úvod
Dátové štruktúry sú spôsoby organizácie dát v pamäti, ktoré umožňujú efektívne vkladanie, vyhľadávanie, triedenie a mazanie prvkov. V tomto materiáli sa zameriame na lineárne dátové štruktúry (polia, spájané zoznamy, množiny) a na triediace algoritmy (Merge sort, Quick sort) a techniky vyhľadávania (binárne vyhľadávanie, hašovanie). Materiál je určený pre samoukov (Not attending student) — preto rozkladáme pojmy na menšie časti, uvádzame príklady a praktické použitia.
Definícia: Dynamické dátové štruktúry sú také dátové štruktúry, ktorých veľkosť sa môže počas behu programu meniť; prvky sa dajú pridávať, odoberať alebo prepájať.
Základné pojmy a miery zložitosti
Asymptotická časová zložitosť
- Označenie: $T(n)$, kde $n$ je veľkosť vstupu.
- Používaná notácia: $O(\cdot)$ (horný odhad).
- Typické triedy: $O(1)$, $O(\log n)$, $O(n)$, $O(n\log n)$, $O(n^2)$.
Definícia: Najlepší prípad (best-case), priemerný prípad (average-case) a najhorší prípad (worst-case) opisujú správanie algoritmu vzhľadom na vstup.
Pamäťová zložitosť
- In-place algoritmy: $O(1)$ alebo $O(\log n)$ (rekurzívny zásobník).
- Externé algoritmy alebo pomocné pole: $O(n)$.
Triediace algoritmy (sorting)
Triedenie usporiada prvky podľa kľúča (napr. vzostupne). Sledujeme čas, pamäť a stabilitu.
Merge Sort (Divide and Conquer)
- Postup:
- Rozdelí pole na dve polovice.
- Rekurzívne utriedi obe polovice.
- Spojí (merge) zoradené časti.
- Rekurentný vzťah: $$T(n) = 2T(n/2) + O(n)$$
- Riešenie: $$T(n) = O(n\log n)$$
- Zložitosť: best-case $O(n\log n)$, average-case $O(n\log n)$, worst-case $O(n\log n)$.
- Vlastnosti:
- stabilný
- dodatočná pamäť $O(n)$
- vhodný pre veľké dáta a externé triedenie
Quick Sort
- Postup:
- Vyberie sa pivot.
- Rozdelí prvky na menšie a väčšie ako pivot.
- Rekurzívne triedi časti.
- Priemerný prípad: $$T(n)=2T(n/2)+O(n)$$
- Najhorší prípad: $$T(n)=T(n-1)+O(n)$$
- Zložitosť: best-case $O(n\log n)$, average-case $O(n\log n)$, worst-case $O(n^2)$.
- Vlastnosti:
- nestabilný
- pamäť $O(\log n)$ (rekurzia)
- veľmi rýchly v praxi (dobrá cache lokalita)
Porovnanie Merge Sort vs Quick Sort
| Vlastnosť | Merge Sort | Quick Sort |
|---|---|---|
| Čas (avg) | $O(n\log n)$ | $O(n\log n)$ |
| Čas (worst) | $O(n\log n)$ | $O(n^2)$ |
| Pamäť | $O(n)$ | $O(\log n)$ |
| Stabilita | áno | nie |
| Praktické použitie | externé triedenie | interné triedenie |
Odhady zložitosti — pravidlá
- Iteratívne algoritmy: jeden cyklus → $O(n)$; dva vnorené cykly → $O(n^2)$.
- Rekurzívne algoritmy: používame rekurentné rovnice alebo Master theorem.
- Typický prípad rozdelenia na polovice: $\log n$ úrovní, práca na úrovni $n$ → $O(n\log n)$.
Did you know that pre porovnávacie triedenie platí dolná hranica $\Omega(n\log n)$, t.j. žiadny porovnávací algoritmus nemôže byť asymptoticky rýchlejší?
Vyhľadávanie
Binárne vyhľadávanie
- Podmienka: pole musí byť usporiadané.
- Postup: porovnáme s prostredným prvkom, ak menší → ľavá polovica, ak väčší → pravá polovica; opakujeme.
- Zložitosť: best-case $O(1)$ (prvok je presne v strede), average/worst-case $O(\log n)$.
- Výhody: rýchle vyhľadávanie; Nevýhody: potreba usporiadaného poľa.
Hašovanie (Hashing)
- Myšlienka: pomocou hašovacej funkcie mapujeme kľúč priamo na index tabuľky.
- Postup:
- Na kľúč aplikujeme hašovaciu funkciu.
- Funkcia vráti index v tabuľke.
- Na tomto indexe uložíme alebo vyhľadáme prvok.
- Príklad hašovacej funkcie: $$h(k) = k \bmod m$$ (pre celočíselné kľúče).
- Výhody: takmer konštantný čas operácií.
- Nevýhody: kolízie (dva kľúče môžu mať rovnaký index).
Definícia: Kolízia nastane, keď dva rôzne kľúče mapujú na rovnaký index.
- Riešenie kolízií: hašovanie reťazením — každá pozícia obsahuje zoznam, do ktorého sa pridávajú kolidujúce prvky.
Už máš účet? Prihlásiť sa
Dátové štruktúry – lineárne a triedenie
Klíčová slova: Dátové štruktúry - lineárne a triedenie, Dátové štruktúry - stromy a grafy
Klíčové pojmy: Dynamické dátové štruktúry menia veľkosť počas behu programu, Asymptotická zložitosť sa vyjadruje pomocou $O(\cdot)$, Merge sort má vždy $O(n\log n)$ a je stabilný, Quick sort má priemerný $O(n\log n)$, najhorší $O(n^2)$, Binárne vyhľadávanie vyžaduje usporiadané pole a má $O(\log n)$, Hašovanie poskytuje takmer konštantné operácie, rieši sa kolízia, Spájaný zoznam umožňuje vkladanie O(1) na začiatok, vyhľadanie O(n), Pole poskytuje rýchly priamy prístup, ale pomalé odstránenie, Bitový vektor je efektívny pre malé univerzálne množiny, Pri evaluácii algoritmov sledujeme čas, pamäť a stabilitu