Én személy szerint úgy gondolja, hogy a legjobb módja ennek az lenne, hogy menjen egy randomizált bináris kereső fába, mint egy treap . Ez nem feltétlenül garantálja, hogy a fa lesz kiegyensúlyozott, de nagy valószínűséggel a fa lesz egy jó egyensúlyt tényező. A treap működik bővítésére minden eleme a fa egy egyenletesen véletlen számot, majd annak biztosítása, hogy a fa egy bináris keresési fa tekintetében a kulcsokat, és egy halom tekintetében egységes véletlen értékeket. Beszúrás treap rendkívül egyszerű:
- Válassz egy véletlen számot hozzárendelni az újonnan hozzáadott elem.
- Helyezze az elemet a BST standard BST behelyezés.
- Bár az újonnan behelyezett elem kulcsa nagyobb, mint a kulcs a szülő, végre egy fa forgatás, hogy az új elem felett szülő.
Ez az utolsó lépés az egyetlen igazán nehéz, de ha volt egy kis idő, hogy ki egy táblára vagyok benne, hogy meg tudná végrehajtani ezt on-the-fly egy interjúban.
Egy másik lehetőség, hogy működhet az lenne, hogy egy ferde fát . Ez egy másik fajta gyors BST lehet végrehajtani feltételezve, hogy van egy szabványos BST betét funkciót, és a képesség, hogy a fa forgatások. Fontos megjegyezni, hogy ferde fák rendkívül gyors gyakorlatban, és ez ismert, hogy ezek (az a konstans faktor) legalább olyan jó, mint bármely más statikus bináris keresési fa.
Attól függően, hogy mi értendő „keresési fa”, akkor is úgy tárolja a egészek néhány szerkezet optimalizált keresési egészek. Például, ha jönne egy bitenkénti Trie tárolja a számok, amely támogatja a keresési idő arányos a bitek száma egy gépi szó. Ez megvalósítható elég szépen egy rekurzív függvény, hogy nézd át a biteket, és nem igényel semmiféle forgatások. Ha szükséges, a robbanás ki egy végrehajtási tizenöt percen belül, és ha a kérdező lehetővé teszi, hogy eltérjenek a megszokott bináris keresési fák, akkor ez lehet a legjobb megoldás.
Remélem ez segít!