2002:25
2002:25
2002:25
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
2.5 Återstående algoritmer<br />
De återstående algoritmerna är framför allt träd samt grafer.<br />
2.5.1 Binära träd<br />
När det finns små tal till vänster om noden och stora tal till höger om noden har man ett<br />
binärt sökträd, så kallat eftersom det går så snabbt att söka reda på ett objekt i trädet. Låt oss<br />
säga att vi söker efter 345. Vår algoritm blir följande<br />
• Kolla först rottalet.<br />
• Om talet är 345 har vi funnit vad vi söker.<br />
• Om talet är större än 345 letar vi vidare efter 345 i vänsterträdet.<br />
• Om det är mindre än 345 letar vi vidare i högerträdet.<br />
• ...men om vi når en nullreferens finns inte 345 i sökträdet.<br />
Det här är ju precis samma sak som binär sökning i en sekvens. I båda fallen blir antalet<br />
jämförelser cirka log N. Men binärträdet har två stora fördelar [3].<br />
1. Insättning av nytt objekt kräver bara log N jämförelser mot N/2 för insortering i en<br />
vektor.<br />
2. Trädet kan bli hur stort som helst men arrayens storlek ges i dess deklaration.<br />
Enda problemet med binärträd är att dom kan bli obalanserade, och då försvinner den<br />
snabba sökningen. Ett riktigt obalanserat sökträd med dom tre talen i exemplet har 1 i roten,<br />
17 till höger, 345 till höger om det osv. I vissa fall har binärträd en tendens att bli<br />
obalanserade med tiden, till exempel när nyfödda förs in i ett träd sorterat på personnummer<br />
och då alltid hamnar längst till höger. Och då har trädet blivit en sekvens.<br />
1<br />
Figur 2-10: Obalanserat träd<br />
9<br />
17<br />
345