Best zelfbalancerende BST voor het snel invoeren van een groot aantal knooppunten

stemmen
8

Ik ben in staat om meer informatie over een aantal self-balancing kunnen vinden BSTen door middel van verschillende bronnen, maar ik heb niet gevonden een goede beschrijvingen detaillering welke het beste is om te gebruiken in verschillende situaties (of als het echt niet uit).

Ik wil een BSTdie optimaal is voor het opslaan van meer dan tien miljoen knooppunten. De volgorde van het inbrengen van de knooppunten is in principe willekeurig, en ik zal nooit meer knooppunten te verwijderen, zodat het inbrengen tijd is het enige dat zou moeten worden geoptimaliseerd.

Ik ben van plan om het te gebruiken om eerder bezochte spel staten op te slaan in een puzzelspel, zodat ik snel kan controleren of een vorige configuratie is al tegengekomen.

De vraag is gesteld op 05/08/2008 om 16:40
bron van user
In andere talen...                            


4 antwoorden

stemmen
0

De twee zelfbalancerende BSTs waar ik het meest bekend met zijn rood-zwart AVL, dus ik kan niet met zekerheid zeggen of er andere oplossingen zijn beter, maar als ik me goed herinner, rood-zwart heeft een snellere inbrengen en langzamer ophalen in vergelijking met AVL.

Dus als het inbrengen is een hogere prioriteit dan het ophalen, kan rood-zwart een betere oplossing zijn.

antwoordde op 05/08/2008 om 16:50
bron van user

stemmen
3

Rood-zwart is beter dan AVL voor het inbrengen zware toepassingen. Als je relatief uniforme look-up voorzien, dan is rood-zwart is de weg te gaan. Als u een relatief onevenwichtige look-up waar meer recent bekeken elementen hebben meer kans om opnieuw te worden bekeken voorzien, die u wilt gebruiken splayboom .

antwoordde op 05/08/2008 om 16:59
bron van user

stemmen
3

Waarom gebruik maken van een BSTop alle? Vanuit uw beschrijving zal een woordenboek werken net zo goed, zo niet beter.

De enige reden voor het gebruik van een BSTzou zijn als je wilde een lijst van de inhoud van de container in de sleutel volgorde. Het is zeker niet klinken als je wilt om dat te doen, in dat geval gaan voor de hash-tabel. O(1)inbrengen en zoeken, geen zorgen over verwijdering, wat kan beter?

antwoordde op 29/08/2008 om 01:10
bron van user

stemmen
-2

[Hash tabellen] O (1) invoeren en zoeken

Ik denk dat dit verkeerd is.

Allereerst, als de keyspace beperken als beperkt, kon de elementen in een array opslaan en doen een O (1) lineaire aftasting. Of je kan de array shufflesort en doe dan een lineaire scan in O (1) verwachte tijd. Wanneer spul is eindig, spul is gemakkelijk O (1).

Dus laten we zeggen dat uw hash tafel zal elke willekeurige bitreeks op te slaan; het maakt niet veel uit, zolang er is een oneindige set sleutels, die elk zijn eindig. Dan moet je alle bits van elke query en insertie invoer gelezen, anders voeg ik y0 in een lege hash query op y1, y0 en waarbij y1 verschillen op een enkele bitpositie die je niet kijken.

Maar laten we zeggen dat de sleutel lengtes zijn geen parameter. Als uw inbrengen en zoek nemen O (1), in het bijzonder hashing kost O (1) tijd, wat betekent dat je alleen kijkt naar een eindige hoeveelheid uitvoer van de hash-functie (waarvan er waarschijnlijk zijn slechts een eindige uitgang, verleende ).

Dit betekent dat bij een eindig aantal emmers, moet er een oneindig aantal snaren die allemaal dezelfde hash waarde. Stel dat ik een stuk in te voegen, dat wil zeggen ω (1), van deze, en beginnen met het bevragen. Dit betekent dat uw hash tafel heeft om weer op een andere O (1) inbrengen / zoekmechanisme val op mijn vragen te beantwoorden. Welke, en waarom niet gewoon gebruik maken van die direct?

antwoordde op 01/02/2009 om 13:49
bron van user

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