Rozsah strom - Range tree
Rozsah strom | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Typ | strom | ||||||||||||
Vynalezeno | 1979 | ||||||||||||
Vynalezl | Jon Louis Bentley | ||||||||||||
Časová složitost v velká O notace | |||||||||||||
|
v počítačová věda, a rozsah strom je objednaný strom datová struktura držet seznam bodů. Umožňuje, aby byly všechny body v daném rozsahu hlášeno efektivně a obvykle se používá ve dvou nebo vyšších rozměrech. Range stromy byly zavedeny Jon Louis Bentley v roce 1979.[1] Podobné datové struktury objevil Lueker nezávisle,[2] Lee a Wong,[3] a Willard.[4]Strom rozsahu je alternativou k k-d strom. Ve srovnání s k-d stromy, rozsahové stromy nabízejí rychlejší časy dotazů (v Velká O notace ) ale horší skladování , kde n je počet bodů uložených ve stromu, d je rozměr každého bodu a k je počet bodů hlášených daným dotazem.
Bernard Chazelle vylepšil to na čas dotazu a prostorová složitost .[5][6]
Datová struktura
Strom rozsahu na sadě 1rozměrných bodů je vyvážený binární vyhledávací strom v těchto bodech. Body uložené ve stromu jsou uloženy v listech stromu; každý vnitřní uzel ukládá největší hodnotu obsaženou v jeho levém podstromu. Strom rozsahu na množině bodů v d-dimensions je a rekurzivně definované víceúrovňový binární vyhledávací strom. Každá úroveň datové struktury je binární vyhledávací strom na jedné z d-dimensions.The first level is a binary search tree on the first of the d-souřadnice. Každý vrchol proti tohoto stromu obsahuje přidruženou strukturu, která je (d-1) -rozměrný strom rozsahu na posledním (d−1) - souřadnice bodů uložených v podstromu proti.
Operace
Konstrukce
Jednorozměrný strom rozsahu na sadě n points je binární vyhledávací strom, ve kterém lze vytvořit čas. Stromy rozsahu ve vyšších dimenzích jsou konstruovány rekurzivně konstrukcí vyváženého binárního vyhledávacího stromu na první souřadnici bodů a poté pro každý vrchol proti v tomto stromu budování (d-1) -rozměrný strom rozsahu v bodech obsažených v podstromu proti. Konstrukce stromu rozsahu tímto způsobem by vyžadovala čas.
Tuto konstrukční dobu lze u stromů s 2-dimenzionálním rozsahem zlepšit na .[7]Nechat S být soubor n 2-rozměrné body. Li S obsahuje pouze jeden bod, vrací list obsahující tento bod. Jinak vytvořte přidruženou strukturu S, jednorozměrný strom rozsahu na y- souřadnice bodů v S. Nechat Xm být mediánem X- souřadnice bodů. Nechat SL být množina bodů s X-coordinate less than or equal to Xm a nechte SR být množina bodů s X-souřadnice větší než Xm. Rekurzivně konstrukt protiL, dvourozměrný strom rozsahu SL, a protiR, dvourozměrný strom rozsahu SR. Vytvořte vrchol proti s levým dítětem protiL a pravé dítě protiRPokud seřadíme body podle jejich y-coordinates at the start of the algorithm, and keep this ordering when splitting the points by their X-coordinate, we can construct the associated structures of each subtree in linear time. Snižuje to čas na konstrukci 2-dimenzionálního stromu rozsahu na , a také zkracuje čas na konstrukci a d-dimenzionální strom rozsahu do .
Rozsahové dotazy
A rozsah dotazu na stromě rozsahu hlásí množinu bodů, které leží uvnitř daného intervalu. Chcete-li nahlásit body, které leží v intervalu [X1, X2], začneme hledáním X1 a X2. U nějakého vrcholu ve stromu vyhledávací cesty k X1 a X2 se rozcházejí. Nechat protirozdělit být posledním vrcholem, který mají tyto dvě cesty hledání společné. Pro každý vrchol proti ve vyhledávací cestě z protirozdělit na X1, pokud je hodnota uložena na proti je větší než X1, nahlásit každý bod v pravém podstromu proti. Li proti je list, uveďte hodnotu uloženou v proti pokud je uvnitř intervalu dotazu. Podobně hlášení všech bodů uložených v levých podstromech vrcholů s hodnotami menšími než X2 podél vyhledávací cesty z protirozdělit na X2a nahlásit list této cesty, pokud leží v intervalu dotazu.
Vzhledem k tomu, že rozsahový strom je vyvážený binární strom, vyhledávací cesty k X1 a X2 mít délku . Hlášení všech bodů uložených v podstromu vrcholu lze provádět v lineárním čase pomocí libovolného traversal strom algoritmus. Z toho vyplývá, že čas na provedení dotazu na rozsah je , kde k je počet bodů v intervalu dotazu.
Rozsah dotazů v d-rozměry jsou podobné. Místo hlášení všech bodů uložených v podstromech vyhledávacích cest proveďte (d-1) -rozměrový dotaz rozsahu na přidruženou strukturu každého podstromu. Nakonec bude proveden 1-rozměrný rozsahový dotaz a budou hlášeny správné body. Protože a d-dimenzionální dotaz se skládá z (d-1) -dimenzionální dotazy na rozsah, z toho vyplývá, že čas potřebný k provedení a d-dimenzionální rozsah dotazu je , kde k je počet bodů v intervalu dotazu. To lze snížit na pomocí varianty částečné kaskádování.[2][4][7]
Viz také
Reference
- ^ Bentley, J.L. (1979). „Problémy s rozložitelným vyhledáváním“. Dopisy o zpracování informací. 8 (5): 244–251. doi:10.1016/0020-0190(79)90117-0.
- ^ A b Lueker, G. S. (1978). Msgstr "Datová struktura pro dotazy na ortogonální rozsah". 19. výroční sympozium o základech informatiky (sfcs 1978). s. 28–21. doi:10.1109 / SFCS.1978.1.
- ^ Lee, D. T .; Wong, C. K. (1980). "Kvintární stromy: Struktura souborů pro vícerozměrné databázové systémy". Transakce ACM v databázových systémech. 5 (3): 339. doi:10.1145/320613.320618.
- ^ A b Willard, Dan E. Super-b- algoritmus stromu (Technická zpráva). Cambridge, MA: Aiken Computer Lab, Harvard University. TR-03-79.
- ^ Chazelle, Bernard (1990). „Dolní hranice pro vyhledávání ortogonálních rozsahů: I. Případ hlášení“ (PDF). ACM. 37: 200–212.
- ^ Chazelle, Bernard (1990). „Dolní hranice pro vyhledávání ortogonálních rozsahů: II. Aritmetický model“ (PDF). ACM. 37: 439–463.
- ^ A b de Berg, Mark; Cheong, Otfried; van Kreveld, Marc; Overmars, Mark (2008). Výpočetní geometrie. doi:10.1007/978-3-540-77974-2. ISBN 978-3-540-77973-5.
externí odkazy
- Rozsahové a segmentové stromy v CGAL, Knihovna algoritmů výpočetní geometrie.
- Přednáška 8: Range Trees Marc van Kreveld.
- Range stromy použitím PAM, paralelní rozšířená knihovna map.