Waarom Binary Search Trees?

stemmen
6

Ik las binary search boom en dacht dat de reden waarom we BST moeten op alle? Al de dingen die voor zover ik weet kan ook te bereiken met behulp van eenvoudige gesorteerde arrays. Voor bijvoorbeeld - Met het oog op een BST met n elementen te bouwen, vergt we n*O(log n)tijd ie O(nlog n)en lookup tijd is O(log n). Maar deze zaak kan ook worden te realiseren met behulp van array. We kunnen een gesorteerde array (nodig hebben O(nlog n)tijd), en lookup tijd dat ook O(log n)wil zeggen binary search algo. Waarom doen we nog een datastructuur helemaal nodig? Zijn er nog andere gebruik / toepassing van BST die hen zo bijzonder maakt?

--Ravi

De vraag is gesteld op 14/10/2010 om 16:28
bron van user
In andere talen...                            


4 antwoorden

stemmen
4

Hoe zit het naargelang inbrengen tijd?

antwoordde op 14/10/2010 om 16:30
bron van user

stemmen
1

In grafische programmering als je object (dat wil zeggen dat een interval te vertegenwoordigen in elke dimensie en niet alleen een punt) kunt u deze toevoegen aan het kleinste niveau van een binaire boom (typisch een octree), waar ze passen in geheel verlengd.

En als je niet de boom / SortedList de O (n) random invoegtijd vooraf een lijst berekenen kan belemmerend langzaam zijn. Invoegtijd in een boom aan de andere kant is slechts O (log (n)).

antwoordde op 14/10/2010 om 16:36
bron van user

stemmen
9

Arrays zijn geweldig als je eenmaal hebt het over schrijven, lezen vele malen type interacties. Het is wanneer je naar beneden om het invoegen, het ruilen, en deletie in die BST echt beginnen te schijnen in vergelijking met een array. Omdat ze knooppunt gebaseerd, in plaats van gebaseerd op een aaneengesloten stuk van het geheugen, de kosten van het verplaatsen van een element in ofwel het verzamelen of uit de collectie snel met behoud van de gesorteerde aard van de collectie.

Zie het als je zou het verschil in invoeging tussen gelinkte lijsten versus arrays. Dit is een simplificatie, maar wijst hij op een aspect van de voordelen die ik hierboven heb opgemerkt.

antwoordde op 14/10/2010 om 16:53
bron van user

stemmen
7

Stel je hebt een array met een miljoen elementen.

U wilt een element in te voegen op plaats 5.

Dus u invoegen aan het einde van de array en vervolgens sorteren.

Laten we zeggen dat de array vol is; Dat is O (NLOG n), hetgeen 1000000 * 6 = 6.000.000 bewerkingen.

Stel je hebt een evenwichtige boom.

Dat is O (log n), plus een beetje voor balancing = 6 + een beetje, noem het 10 operaties.

Dus, heb je gewoon 6.000.000 ops het sorteren van de array besteed. Je wilt dan te vinden dat element. Wat doe jij? binary search - O (log n) - en dat is precies hetzelfde als wat je gaat doen als je zoeken in de boom!

Stel je nu voor dat u wilt -another- element toe te wijzen.

Array is vol! Wat doe jij? opnieuw te verdelen array met n extra elementen en memcpy de partij? je echt wilt memcpy 4mbytes?

In een boom, je voegt een ander element ...

antwoordde op 16/10/2010 om 10:14
bron van user

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