Avatar billede micjoh10 Nybegynder
26. maj 2005 - 11:37 Der er 6 kommentarer

balance barnary trees

Hvordan laver man koden til at balancere et binært træ?
Avatar billede arne_v Ekspert
26. maj 2005 - 11:43 #1
jeg plejer at lave:
  binært træ -> array -> binært træ
men jeg er ikke datalog så ...
Avatar billede dsj Nybegynder
26. maj 2005 - 11:55 #2
Hvis man bruger et Splay tree, er det slet ikke nødvendigt at balancere træet - splay trees er binære træer, der løbende "balancerer" sig selv. Sagt på en simpel måde, ændres rod-noden løbende, således at den node man sidst havde fat i bliver sat som rod-node. Samtidig flyttes den ene side af den nye rod-nodes børn til den forhenværende rod-node.

Hvis f.eks. du tilgår en node på venstre side af den aktuelle rod-node, sættes denne node som rod-node, hvorefter børnene på den højre side flyttes til den forhenværende rod-nodes venstre side. Ved ikke lige om det er til at forstå :-)

Resultatet er, at træet løbende holder sig nogenlunde balanceret, hvilket i længden er langt billigere end at skulle balancere et helt træ på en gang.
Avatar billede simonvalter Praktikant
26. maj 2005 - 16:25 #3
eller du kan bruge et red-black tree

her er en demo samt source code til den
http://www.ececs.uc.edu/~franco/C321/html/RedBlack/redblack.html

jeg har skrevet en raport om bl.a red-black og binære søgetræer men den har ikke en direkte implementation.. den kigger mere på properties, algortimen, tidskompleksitet m.m men sig til hvis du vil set det.
Avatar billede simonvalter Praktikant
26. maj 2005 - 16:37 #4
jeg kan anbefale dig
Cormen, Leiserson, Rivest, Stein. Introduction to Algorithms, 2nd edition, MIT Press, 2001.
Hvis du vil kigge nærmere på forskellige træer.
Avatar billede burningice Nybegynder
26. maj 2005 - 18:50 #5
Treap er også en mulighed. Der er en artikkel her omkring implementering af en Treap i Java

http://www.nada.kth.se/~snilsson/public/papers/treap/intro.html
Avatar billede burningice Nybegynder
26. maj 2005 - 18:51 #6
Treap bruger en randomized priority queue til at balancere sig selv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester