ADT Tabulka
Datová struktura, která umožňuje vkládat a později vybírat informace podle identifikačního klíče. Mohou být: pevně definované (LUT Look Up Table) s proměnným počtem položek Konvence: Tabulka k klíč, kterým identifikujeme položku A k adresní klíč tj. adresa položky (ve většině případů je to index Hledání v tabulkách parametry: S délka hledání položky (počet položek, které je nutno prozkoumat) T průměrná délka hledání (m je počet přístupů do tabulky) A průměrná délka prohledávání za předpokladu rovnoměrného přístupu (n je počet obsazených položek tabulky) P tzv. plnění tabulky(podíl obsazených položek)
Rozdělení tabulek podle způsobu organizace tabulky s přímým přístupem obyčejné vyhledávací tabulky tabulky se sekvenčním přístupem tabulky s rozptýlenými položkami
Tabulky s přímým přístupem k Ak je prosté zobrazení, každá položka tabulky má své místo jednoznačně určené hodnotou Ak přímo odvozenou z k Optimální implementace tabulky je pomocí pole indexy jsou přímo klíče v tabulce S=T=A=1 Výhody: rychlý přístup jednoduchá implementace Nevýhody: Velikost tabulky je daná rozsahem klíče, pro praktické účely bývá většinou neúnosná Řídké pole nerovnoměrný počet klíčů vzhledem k rozsahu tabulky. Příklady: Telefonní síť klíčem je telefonní číslo uživatele Telefonní seznam klíčem je jméno
Vyhledávací tabulky Vyhledává se podle hodnoty klíče Pořadí položek může být: definované (uspořádané) náhodné Strategie vyhledávání: 1. sekvenční 2. binární 3. Fibonacciho 4. kombinované Výhoda: plnění vyhledávacích tabulek může být až 100% Nevýhoda časově náročné vyhledávání (může být až lineární) Sekvenční vyhledávání Položky v tabulce mohou být neuspořádané Princip spočívá v postupném porovnávání klíčů položek s hledaným klíčem až do nalezení shody, popř. nalezení konce tabulky
Výhoda: snadná implementace a časově nenáročná modifikace tabulky (implementace jako pole (popř. jako seznam), přidává se na konec pole, díry po odebrání prvků se vyplňují posledním prvkem v případě implementace polem) Binární vyhledávání lze použít v případě, že jsou položky tabulky seřazeny podle hodnoty klíče Princip: porovnat hledaný klíč s klíčem uprostřed tabulky, pokud není shoda, hledat v levé popř. v pravé polovině tabulky (v závislosti na hodnotě klíče) Fibonacciho vyhledávání Princip: stejný jako u binárního vyhledávání, testované prvky však nevolíme uprostřed, ale v poměru Fibonacciho čísel Složitost: stejná jako u binárního vyhledávání, ale prvky na začátku jsou nalezeny rychleji Pro efektivní hledání se snažíme, aby tabulka měla F n -1 prvků, kde F n je určité Fibonacciho číslo Fibonacciho posloupnost:
Prvky Fibonacciho posloupnosti: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 99, Př. Nalezení prvku na pozici 26 v tabulce o 54 prvcích.
Hledání podle sekundárního klíče Invertovaný soubor (indexovaný soubor) jedná se o tabulku seřazenou podle sekundárního klíče, data tvoří primární klíč (nebo přímo index v původní tabulce) invertovaný seznam invertovaný soubor implementovaný jako zřetězený seznam nebo
Vícerozměrné vyhledávání vyhledávání podle více klíčů realizujeme vícenásobným přístupem
tabulky s rozptýlenými položkami používají se v případě, že rozsah klíče N >> rozsah tabulky pro určení pozice v tabulce, na kterou máme uložit položkus klíčem k, používáme rozptylovací funkce (hash-funkci) A k =h(k), která klíči k jednoznačně přiřazuje klíč A k může se stát, že pro různé položky k 1 k 2 platí, že h(k 1 )= h(k 2 ) tzv. synonymické položky (dochází ke kolizi) Při návrhu a implementaci hash-tabulky je nutné vzít v úvahu: jak definovat rozptylovací funkci jak řešit ukládání synonymických položek
Požadavky na rozptylovací funkci: 2. Pro každé k je jednoznačně definovaná (a v přijatelném čase vyčíslitelná) 3. Vytváří minimální počet kolizí (minimum synonym) 4. Pravděpodobnostní rozdělění Ak=h(k) na intervalu <0, p- 1> je rovnoměrné - lze využít pseudonáhodné funkce (randomizační funkce) Realizace h(k): hash funkci i=h(k) je možné realizovat následujícími způsoby: i je částí k i je částí operace nad k i je zbytkem po dělení rozsahem tabulky p i je zbytkem po děleni N, N je nejbližší menší prvočíslo než hodnota p i je dán váhovým součtem částí kde a i jsou váhy jednotlivých částí k i klíče k
Tabulky s otevřeným rozptýlením
Tabulky s otevřeným rozptýlením a vnitřním zřetězením
Tabulky s uzavřeným rozptýlením a vnějším zřetězením
Metoda rozptýlených indexů