Hozzon létre egy kiegyensúlyozott bináris kereső fába egy patak egészek

szavazat
10

Most fejeztem be egy állásinterjúra, és én küzd ezzel a kérdéssel, amely úgy tűnik, hogy nekem, mint egy nagyon kemény kérdés, amely egy 15 perces interjút.

A kérdés az volt: Írjon egy függvény, ami adott egy patak egész (rendezetlen), épít egy kiegyensúlyozott keresési fa. Most, akkor nem várja meg a bemenet végét (ez egy stream), így meg kell, hogy egyensúlyt a fa menet közben.

Az első válasz az volt, hogy egy piros-fekete fa, ami természetesen nem a munkát, de azt kell feltételezni, hogy nem várod, hogy végre egy piros-fekete fa 15 perc alatt.

Tehát, van-e egyszerű megoldás erre a problémára nem vagyok tisztában?

Kösz,

Dave

A kérdést 29/08/2011 22:25
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
3

AA fák egy kicsit egyszerűbb, mint a Red-Black fákat, de nem tudtam végrehajtani az egyik ki a fejem tetején.

Válaszolt 29/08/2011 22:28
a forrás felhasználó

szavazat
9

É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ű:

  1. Válassz egy véletlen számot hozzárendelni az újonnan hozzáadott elem.
  2. Helyezze az elemet a BST standard BST behelyezés.
  3. 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!

Válaszolt 29/08/2011 22:33
a forrás felhasználó

szavazat
1

Az egyik legegyszerűbb kiegyensúlyozott bináris keresés fa BB (α) -fa. Kiválasztotta az állandó α, amely azt mondja, hogy mennyi kiegyensúlyozatlan lehet a fát kap. Mindenkor #descendants(child) <= (1-α) × #descendants(node)meg kell tartani. Bánsz vele, mint a normál bináris keresési fa, de ha a képlet nem vonatkozik az egyes node már, akkor csak újjáépíteni, hogy része a fa a semmiből, úgy, hogy az tökéletesen kiegyensúlyozott.

Az amortizált időt összetettsége inszerciós vagy deléciós még mindig O (log N), ugyanúgy, mint egyéb kiegyensúlyozott bináris fák.

Válaszolt 29/08/2011 22:49
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more