3.2 Binære søgetræer

Vi betragter nu en implementation af symboltabeller som kombinerer fleksibiliteten af indsættelse i en hægtet liste med effektiviteten af søgning i en ordnet række. Ved at bruge to henvisninger per knude kan vi implementere symboltabeller i et binært søgeræ, som er en af datalogiens mest grundlæggende datastrukturer.

Definition (søgetræsinvariant). Et binært søgetræ (BST) er et binært træ, hvor hver knude indeholder en sammenlignelig nøgle og en tilknyttet værdi, således at hver knudes nøgle er større end nøglerne i knudens venstre undertræ og mindre end nøglerne i knudens højre undertræ.

Anatomy of a binary tree                Anatomy of a binary search tree


Grundlæggende implementation.

Programmet BST.java implementerer APG’en for ordnede symboltabeller ved brug af et binært søgetræ. Vi definerer in privat, indre klasse for træets knuder. Hver knude indeholder en nøgle, en tilknyttet værdi, henvisninger til venstre og højre undertræ og en knudetæller. Venstre henvisning beger på et BST af elementer med mindre nøgler, og højre henvisning peger på et BST af elementer med større nøgler. Instansvariablen N angiver antallet af knuder i undertræet rodfæstet ved knuden. Vi vil se forneden, hvordan dette felt muliggør implementationen af diverse ordningsrelaterede symboltabelsoperationer.

Subtree counts in a BST

Analyse.

Køretiden for algoritmer på binære søgetræer afhænger af træets form, som igen afhænger af rækkefølgen af nøgleindsættelser.

Best case for BST
I mange anvendelser kan man bruge den simple model, at nøglerne indeholder uniform tilfældige værdier, eller (hvilket kommer ud på det samme) at de blev sat ind i uniformt tilfældig rækkefølge.

Påstand.

En vellykket søgning i et binært søgetræ af \(N\) uniformt tilfældige nøgler bruger ~\( 2 \ln N\) (omtrent \(1.39 \operatorname{lg} N\)) sammenligninger i gennemsnit.

Påstand.

Insættelse og forgæves søgning i et binært søgetræ af \(N\) uniformt tilfældige nøgler bruger ~ \(2 \ln N\) (omtrent \(1.39 \operatorname{lg} N\)) sammenligninger i gennemsnit.


Ordningsbaserede metoder og fjernelse.

Binære søgetræer opretholder søgenøglerne i orden. Derfor kan vi implementere metoderne fra programmeringsgrænsefladen for ordnede symboltabeller.

Påstand.

I et binært søgetræ tager søgning, indsættelse, maksimum, minimum, gulv, loft, rangering, selektion, fjernelse af minimum og maksimum, fjernelse og intervaloptælling tid proportional med træets højde i værste fald.