Já osobně si myslím, že nejlepší způsob, jak to udělat, je jít na randomizované binárního vyhledávacího stromu jako treap . To však není zcela zaručeno, že strom bude dáno, ale s vysokou pravděpodobností strom bude mít dobrou rovnováhu faktor. Treap pracuje tak, že každý prvek rozšiřovat stromu s rovnoměrně náhodné číslo, pak zajistí, že strom je binární vyhledávací strom vzhledem ke klíči a hromadu s ohledem na jednotné náhodné hodnoty. Vložení do treap je velmi jednoduchá:
- Vyzvednout náhodné číslo přiřadit nově přidaného prvku.
- Vložte prvek do BST pomocí standardního vložení BST.
- Zatímco klíč nově zajíždí prvku je větší než klíč své mateřské společnosti, provést rotaci stromu přinést nový prvek nad jeho rodiče.
Že poslední krok je jen opravdu těžký, ale pokud jste měli nějaký čas přijít na to na tabuli Jsem si jistý, že byste mohli realizovat tento on-the-fly v rozhovoru.
Další možností, která by mohla fungovat by bylo použít splay strom . Je to jiný typ rychlého BST, který může být realizován za předpokladu, že máte standardní funkce BST vložkou a schopnost dělat strom rotace. Důležité je, že splay strom jsou extrémně rychle v praxi, a je známo, že jsou (až do konstantní faktor) alespoň stejně dobrý jako kterýkoli jiný statický binárního vyhledávacího stromu.
V závislosti na tom, co se rozumí pod pojmem „vyhledávacího stromu,“ můžete také zvážit ukládání celých čísel v některých struktuře optimalizované pro vyhledávání celých čísel. Například, můžete použít bitovou trie pro uložení celých čísel, která podporuje vyhledávání v čase úměrném počtu bitů ve slově stroje. To může být provedena docela pěkně pomocí rekurzivní funkce, aby se podívali na kousky, a nevyžaduje žádný druh rotací. Pokud jste potřebovali k výbuchu mimo implementaci za patnáct minut, a v případě, že tazatel umožňuje odchýlit od standardních binárních vyhledávacích stromů, pak by to mohlo být skvělé řešení.
Snad to pomůže!