Hledat:

Invia.cz Eurovíkendy Kanárské ostrovy Dominikánská republika Madeira Last minute Vydělávejte peníze s INVIA.CZ
 

2-3 strom

2-3 strom je druh stromu, který se označuje v počítačové terminologii jako B-strom obsahující pouze uzly s dvěma nebo třemi potomky. Všechna data stromu jsou uložena v listech ve stejné hloubce, proto se 2-3 strom řadí mezi vyvážené stromy. Hloubka 2-3 stromu s n prvky se pohybuje v rozmezí mezi log3n a log2n, podle použité struktury. Tomu odpovídá i náročnost operací jako je vyhledávání, vkládání a odebírání dat z 2-3 stromu. 2-3 stromy jsou izometrické k AA stromům, tzn. jsou to ekvivalentní datové struktury. Jinými slovy, pro každý 2-3 strom existuje alespoň jeden AA strom s prvky ve stejném pořadí.

Ukázka uzlu se dvěma potomky
Ukázka uzlu se dvěma potomky
Ukázka uzlu se třemi potomky
Ukázka uzlu se třemi potomky

Obsah

[editovat] Historie

Vyvážené stromy se objevují v různých podobách, využívají se v datových strukturách pracujících na bázi seznamů nebo databází, kde se pracuje s operacemi vyhledávání, přidávání a mazání záznamů. Jako první představil 2-3 strom v roce 1970 John Hopcroft, bylo to vylepšení vyváženého binárního stromu. Později Rudolf Bayer a Ed McCreight zobecnili 2-3 strom pod pojmem B-strom, který byl dále zjednodušen do formy černo-červeného stromu.

[editovat] Pravidla 2-3 stromu

1) Všechny cesty od Kořene k listům jsou stejně dlouhé.
2) Data jsou zapsána v listech v poslední úrovni stromu.
3) Listy jsou seřazeny podle klíče z leva (minimum) doprava (maximum).
4) Jestliže vnitřní část uzlu obsahuje jeden klíč, uzel má dva potomky. Pokud vnitřní část uzlu má dva klíče, uzel má tři potomky. V případě listu uzel nemá žádné potomky.

[editovat] Možné organizace stromu

1) Strom je prázdný.
2) Uzel nemá žádné potomky, v tom případě je listem.
3) Vnitřní část uzlu obsahuje jedno pole s klíčovým atributem. Uzel má dva potomky.
4) Vnitřní část uzlu obsahuje dva klíčové atributy. Uzel má tři potomky.

Obrázek 1: Obecná struktura rozložení klíčů ve 2-3 stromu
Obrázek 1: Obecná struktura rozložení klíčů ve 2-3 stromu

Vnitřní uzly neobsahují uvnitř data, ale obsahují některé informace o tom co je uloženo v jejich potomcích (podstromech). Tak jak je to zobrazeno na obrázku 1, kde levá vnitřní část pole (min S2) obsahuje minimální klíč ležící v prostředním podstromu (S2) a pravá vnitřní část uzlu (min S3) obsahuje minimální klíč ležící v pravém podstromu (S3). Stejně jako je tomu s uzlem se dvěma potomky.

Při vkládání a mazání dat z 2-3 stromu je zapotřebí upravovat strukturu stromu, přizpůsobovat klíče v uzlech podle složení klíčů v listech a popřípadě měnit hloubku tohoto vyváženého stromu. U 2-3 stromu není zapotřebí tak často vyvažovat strom jako u binárního stromu, protože všechny listy jsou na stejné úrovni. Avšak je zapotřebí daleko častěji vyvažovat 2-3 strom než b-strom nebo 2-3-4 strom, kde je možné mít daleko více potomků u jednoho uzlu.

[editovat] Příklady 2-3 stromu

Orázek 2: Příklad 2-3 stromu se strukturou stromu, která obsahuje převážně uzly se dvěma potomky. Zeleně jsou označeny uzly, modře větve
Orázek 2: Příklad 2-3 stromu se strukturou stromu, která obsahuje převážně uzly se dvěma potomky. Zeleně jsou označeny uzly, modře větve
Obrázek 3: Příklad 2-3 stromu, který obsahuje převážně uzly s třemi potomky. Zeleně jsou označeny uzly, modře větve
Obrázek 3: Příklad 2-3 stromu, který obsahuje převážně uzly s třemi potomky. Zeleně jsou označeny uzly, modře větve



2-3 stromy se stejnými daty mohou mít odlišnou strukturu. Pokud 2-3 strom obsahuje převážně uzly se dvěma potomky (větší hloubka stromu) vzrůstá náročnost operací (např. vyhledávání) s 2-3 stromem o n prvcích z O(log3n) na O(log2n).

[editovat] Operace s 2-3 stromem

2-3 stromy se využívají v datových strukturách jako jsou seznamy nebo databáze, kde se pracuje se základními operacemi vyhledávání, vkládání a mazání prvků. Usnadňují tak daleko více práci s daty, než kdybychom měli data uspořádána libovolně v paměti (obtížné vyhledávání) nebo naopak uložená jako seznam v řadě za sebou (obtížné vkládání).

[editovat] Operace vyhledávání

Při vyhledávání dat podle klíče začínáme u Kořene stromu a postupujeme podle klíčových atributů shora dolů.

Obrázek 4: Procházení uzlu se dvěma potomky
Obrázek 4: Procházení uzlu se dvěma potomky
Obrázek 5: Procházení uzlu se třemi potomky
Obrázek 5: Procházení uzlu se třemi potomky

Tímto způsobem pokračujeme, až do poslední úrovně stromu, kde se nachází listy s daty.

[editovat] Operace vkládání

Obrázek 6: Vložení prvku do uzlu se třemi prvky a následné rozdělení uzlu
Obrázek 6: Vložení prvku do uzlu se třemi prvky a následné rozdělení uzlu

Při vkládání nové větve do 2-3 stromu je nutné vyhledat pozici, kam novou větev vložíme. Poté co je nalezena pozice, vložíme větev do příslušného rodiče r.

Pokud se zvýší počet potomků r postupujeme obdobným způsobem směrem nahoru dokud nenarazíme na předka se dvěma potomky nebo na kořen se třemi potomky, kdy se zvýší hloubka 2-3 stromu o jedna, jak je zobrazeno postupně na obrázcích 7, 8, 9, 10.


Při každém vkládání je nutné přizpůsobit dané klíče uzlů podmínkám 2-3 stromu. Pro vkládání je možné využívat i složitější algoritmy, kde se nejdříve přizpůsobí struktura stromu vkládání. Například se přesune prvek (podstrom) do sousední větve, která není tolik zaplněná a tím se usnadní následné vkládání.

[editovat] Operace mazání

Nejprve je nutné vyhledat větev, kterou budeme odebírat. Poté se odebere větev z jejího rodiče r.

Obdobným způsobem se pokračuje směrem nahoru a v případě potřeby se sníží hloubka 2-3 stromu o jedna, jak je to zobrazeno na obrázcích 12, 13, 14, 15, 16.

Operace jakou je vkládání a mazání se dají řešit různými algoritmy. Můžeme například nejdříve změnit strukturu stromu tak, abychom mohli jednoduše vložit nebo vyjmout větev. Můžeme provádět různá přeskupení, abychom využili, co nejvíce uzly se třemi potomky, kde je méně náročné vyhledávání, mazání dat a také jsou zde menší nároky na paměť počítače.

[editovat] Poznámky

Vytvořený 2-3 strom se může lišit od zde uvedených příkladů. Například listy mohou být uzly se dvěma klíči (daty) a data se nemusí vyskytovat jen v listech, ale v každém uzlu. Tímto způsobem se dají snížit nároky na paměť a některé operace se stromem.

[editovat] Související články


[editovat] Externí odkazy v angličtině

 
2-3 strom v jiných jazycích: English, Русский
Tento článek je převzat z české wikipedie - otevřené encyklopedie, originální článek naleznete na adrese: „http://cs.wikipedia.org/wiki/2-3_strom
Stránka byla naposledy upravena v Stránka byla naposledy editována 1. 7. 2008 v 02:56.
Veškerý text je dostupný za podmínek GNU Free Documentation License (Autorské právo pro podrobnosti).
Další služby: Portál | Katalog | Hledej | Zprávy | Počasí | Kurzy | Práce | Slovník | TV | Online hry | Java hry | SMS | Loga a melodie | Chat | Fórum | Kontakt