Binární vyhledávací strom: Porovnání verzí
m robot přidal: id:Pohon biner terurut |
Bez shrnutí editace |
||
Řádek 1: | Řádek 1: | ||
⚫ | |||
[[Soubor:Binary search tree.svg|right|192|thumb|Jednoduchý binární vyhledávací strom]] |
[[Soubor:Binary search tree.svg|right|192|thumb|Jednoduchý binární vyhledávací strom]] |
||
⚫ | |||
* Každý uzel je ohodnocen číslem. |
|||
* Celkové seřazení uzlů je dáno těmito číselnými hodnotami. |
|||
* Levý podstrom uzlu obsahuje pouze hodnoty menší než je hodnota tohoto uzlu. |
|||
* Pravý podstrom uzlu obsahuje pouze hodnoty stejné nebo větší než je hodnota tohoto uzlu. |
|||
Hlavní výhoda binárních vyhledávacích stromů je ta, že příslušný třídicí a vyhledávací algoritmus jako je [[Strom (datová struktura)#Procházení stromem do hloubky|in-order procházení]] může být velmi efektivní. |
|||
Binární vyhledávací stromy jsou zásadní [[datová struktura|datovou strukturou]] při konstrukci daleko [[Abstraktní datový typ|abstraktnějších datových struktur]] jako jsou [[množina|množiny]], [[multi-množina|multi-množiny]]<br />a [[asociované pole|asociovaná pole]]. |
|||
Pokud BST umožňuje duplicity hodnot, pak představuje [[multi-množina|multi-množinu]]. Tento typ stromu využívá nestriktní nerovnost. Všechny hodnoty uzlů v levém podstromu uzlu jsou striktně menší než je hodnota uzlu, ale všechny hodnoty v pravém podstromu jsou buď větší nebo shodné s hodnotou uzlu. |
|||
Pokud BST neumožňuje duplicity hodnot, pak se jedná o strom s unikátními hodnotami, stejně jako [[množina|matematická množina]]. Stromy bez duplicit využívají striktní nerovnost, tedy hodnoty uzlů levého podstromu jsou menší než je hodnota uzlu a pravý podstrom obsahuje pouze hodnoty větší než je hodnota uzlu. |
|||
Uložení duplicitních hodnot právě v pravém podstromu není povinné. Stejně tak je lze uchovávat i v levém podstromu. Lze též užít nestriktní ekvivalenci na obou stranách. Toto řešení sice napomáhá stromu obsahujícímu mnoho duplicit k lepšímu vyvážení, ale zároveň ztěžuje vyhledávání. |
|||
== Operace == |
|||
Všechny operace na binárním stromě využívají několik volání komparátoru, který je podprogramem pro zjištění pořadí dvou hodnot. |
|||
V obecných implementacích BST program při tvorbě stromu běžně poskytuje zpětné volání komparátoru, buď explicitně nebo v jazycích, které podporují polymorfismus hodnotou, kterou lze porovnávat. |
|||
== Vyhledávání ve stromu == |
== Vyhledávání ve stromu == |
||
Řádek 47: | Řádek 66: | ||
[[vi:Cây tìm kiếm nhị phân]] |
[[vi:Cây tìm kiếm nhị phân]] |
||
[[zh:二元搜尋樹]] |
[[zh:二元搜尋樹]] |
||
<br /> |
Verze z 12. 8. 2007, 12:22
Binární vyhledávací strom (BST) je datová struktura založená na binárním stromu, v němž jsou jednotlivé prvky (uzly) uspořádány tak, aby v tomto stromu bylo možné rychle vyhledávat danou hodnotu. To zajišťují tyto vlastnosti:
- Každý uzel je ohodnocen číslem.
- Celkové seřazení uzlů je dáno těmito číselnými hodnotami.
- Levý podstrom uzlu obsahuje pouze hodnoty menší než je hodnota tohoto uzlu.
- Pravý podstrom uzlu obsahuje pouze hodnoty stejné nebo větší než je hodnota tohoto uzlu.
Hlavní výhoda binárních vyhledávacích stromů je ta, že příslušný třídicí a vyhledávací algoritmus jako je in-order procházení může být velmi efektivní.
Binární vyhledávací stromy jsou zásadní datovou strukturou při konstrukci daleko abstraktnějších datových struktur jako jsou množiny, multi-množiny
a asociovaná pole.
Pokud BST umožňuje duplicity hodnot, pak představuje multi-množinu. Tento typ stromu využívá nestriktní nerovnost. Všechny hodnoty uzlů v levém podstromu uzlu jsou striktně menší než je hodnota uzlu, ale všechny hodnoty v pravém podstromu jsou buď větší nebo shodné s hodnotou uzlu.
Pokud BST neumožňuje duplicity hodnot, pak se jedná o strom s unikátními hodnotami, stejně jako matematická množina. Stromy bez duplicit využívají striktní nerovnost, tedy hodnoty uzlů levého podstromu jsou menší než je hodnota uzlu a pravý podstrom obsahuje pouze hodnoty větší než je hodnota uzlu.
Uložení duplicitních hodnot právě v pravém podstromu není povinné. Stejně tak je lze uchovávat i v levém podstromu. Lze též užít nestriktní ekvivalenci na obou stranách. Toto řešení sice napomáhá stromu obsahujícímu mnoho duplicit k lepšímu vyvážení, ale zároveň ztěžuje vyhledávání.
Operace
Všechny operace na binárním stromě využívají několik volání komparátoru, který je podprogramem pro zjištění pořadí dvou hodnot. V obecných implementacích BST program při tvorbě stromu běžně poskytuje zpětné volání komparátoru, buď explicitně nebo v jazycích, které podporují polymorfismus hodnotou, kterou lze porovnávat.
Vyhledávání ve stromu
Hodnoty v uzlech jsou uspořádány tak, že pro každý uzel stromu u platí:
- hodnota uložená v u je větší nebo rovna než hodnota uložená v levém podstromu u
- hodnota uložená v u je menší nebo rovna než hodnota uložená v pravém podstromu u
Pak lze v tomto stromu jednoduchým způsobem vyhledat danou hodnotu h:
- nastav kořen jako aktuální uzel (u)
- pokud je v u uložená hodnota h, algoritmus končí (a vydá u)
- je-li u list, algoritmus končí (hodnota h nebyla ve stromu nalezena)
- hodnota h se porovná s hodnotou v u (nechť je tato hodnota h')
- je-li , do u se uloží levý syn u
- jinak se do u uloží pravý syn u
- pokračuj bodem 2
Rychlost vyhledávání
Rychlost vyhledávání závisí na tom, jak je strom vyvážen. Pro vyhledání dané hodnoty ve stromu jím stačí jednou projít výše uvedeným způsobem. Časová složitost tohoto algoritmu je úměrná výšce stromu. Má-li binární strom n listů, je jeho výška (a tedy i rychlost vyhledávání) rovna minimálně log2 n a maximálně n. Otázka správného vyvážení je z tohoto pohledu kritická a řeší jí například AVL-strom.
Související články