Please enable JavaScript.
Coggle requires JavaScript to display documents.
16. Základní datové struktury (Základní abstraktní datové struktury…
16. Základní datové struktury
Základní abstraktní datové struktury
zásobník
použití: prohledávání do hloubky (!), přerušení, skoky do podprogramů, volání procedur, fcí,...
nejjednodušší typ seznamu
vrchol - přidání/odebrání, LIFO
realizace: programově/obvody
abstr. dynam. dat. str.
implementace
pomocí pole a proměnné
první prvek - dno
proměnná - index vrcholu
pomocí lineárně spoj. seznamu (ukazatelé)
1směrný seznam
první prvek - vrchol --> použiju operaci tail
operace
odebrání O(1)
ověření prázdnosti O(1)
přidání O(1)
prvek na vrcholu zás. O(1)
vytvoření prázdného O(1)
fronta
prioritní fronta
seznam, udpořádán podle priorit (ne příchodu)
reprez. seznamem méně efekt. --> bin. halda
využití: řazení - heapsort, Dijkstr, Jarník
implementace
pole + 2 proměnné
časté vkládání a odebírání - zvyš. indexů - řešení
posun, pokud nutné (pak celé)
kruhové pole (slož.)
posouvat prvku o 1 níže (neefektivní)
vhodná - 3. prom. - počet prvků
pokud známe max. možnou délku
proměnné - index prvního a posledního prvku
lineárně spoj. seznam
1směrný - začátek fronty na začátku a konec na konci
každý uzel - ukazatel na následníka
další typy
obousměrná (odebírat/vkládat na obou koncích)
prioritní
prohledávání do šířky
operace
ověření práznosti O(1)
přidání prvku na konec O(1)
vytvoření O(1)
fronta bez 1. prvku O(1)
první prvek O(1)
zachovává pořadí, FIFO
abstr. dynam. dat. strukt.
využití: fronty zpráv, roura, heapsort
množina
implementace
pomocí hašovací tabulky
téměř konstantní přístup k prvkům - vhodné pro časté vkládání
př.: Java
pomocí vyhledávacího stromu
vhodné pro setřízené množiny
pomocí seznamu
neefektivní (vyhledávání - projít celou)
nejjednoduší
ignoruje pořadí a při vkládání se kontroluje přítomnost stejného prvku
operace
dotaz na prvek x
je množina prázdná
přidání/odebrání prvku
počet prvků (...)
vytvoření
log. složitost O(log n)
negarantuje pořadí, každý prvek max jednou
abstraktní dynam. dat. strukt.
seznam
implementace zásobníku/fronty
implementace
pomocí lineárního (1stranného) spoj. seznamu
základ - záznam obsahující uloženou hodnotu + ukazatel na následující prvek
ukazatel posledního prvku je prázdný
pokud navážeme konec na začátek - kruhový
pokud neznáme dopředu velikost
data na začátek
pomocí oboustranného spoj. seznamu
ukazatelé prvního a poslendího prvku jsou prázdné
procházení oběma směry - v paměti ale 2krát tolik ukazatelů
navíc ukazatel na předchozí prvek
pokud navážeme konec na začátek - kruhový (sentiel - hlídka - první i poslední prvek)
pomocí dynam. pole
nemusíme znát předem počet prvků
+
rychlý přístup k prvkům O(1) - náhodný přístup na index i
v případě potřeby se pole realokuje na dvojnásebek
-
pomalé odebírání a vkládání doprostřed/na začátek - O(n)
duplicity OK
operace na seznamu
přidání prvku
smazání k-tého prvku
vytvoření prázdného O(1)
vložení před/za k-tý prvek
setřízení seznamu
vyhledávání v seznamu
test, zda je seznam prázdný O(1)
první prvek - head O(1)
seznam bez prvního prvku - tail (...)
prvky lineárně
abstraktní dynam. dat. strukt.
prvky nejsou indexovány (ukazatelé) - konkr. - projití celého
časová slož. - vkládání/mazání uprostřed - O(n) - lineární vyhledávání
neumožňuje náhodný přístup
hašovací tabulka
kolize
při pokusu uložení více objektů na = adresu
haš. fce nezaručuje jinou adresu pro jiné obj.
řešení
zřetězením
hodnoty do spoj. seznamů (kolize - na konec)
velké zaplnění - degradace výkonu
otevřenou adresací
hodnoty do pole
vyhledávání
obvykle
kolize
lineární zkoušení
obsazená - o 1 místo dál
nevýhoda - shlukování - nutné sekvenčně procházet
spočítáme adresu
mazání - nutné nahradit volná místa hlídkami
druhotné hašování
dvojce hašov. fcí
inic. adresa
pokud obsazeno - vypočte posun - opět posun...
operace
odstranění O(n)
vložení O(n)
vyhledávání prvku O(n), prům. O(1)
hašovací fce
konzistentně vrací pro stejné objekty stejné adresy
nezaručuje vrácení různé adresy pro různé objekty
celý prostor adres se stejnou prstí
výpočet adresy - rychle
modulární aritmetika
využití - rychlé hledání položky v poli/jiném homogennímt typu
pro získání hodnoty z klíče - adresace
kombinace výhod vyhl. pomocí indexu (O(1)) a procházení seznamu (nízká paměť)
ukládání dvojic klíč - hodnota
příklady použití
Související operace a jejich složitost
Implementace
pojmy
abstr. dat. strukt.
abstr. proměnná
dynam. dat. strukt.
abstr. pole