160 likes | 290 Views
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær. Hans Fr. Nordhaug (Ola Bø). Søketre - ADT Binære søketrær. Binærtrær kan brukes til å implementere effektiv søking
E N D
INF 295 Algoritmer og datastrukturerForelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
Søketre - ADTBinære søketrær • Binærtrær kan brukes til å implementere effektiv søking I binære søketrær gjelder denne egenskapen for enhver node med verdi x i treet: Alle noder i venstre undertre av noden har lavere verdi og alle noder i høyre undertre har høyere verdi • Forutsetter at elementene som lagres i treet kan ordnes på en eller annen måte
Søketre eller ikke søketre? Ikke søketre - bryter ordningsregelen SøketreAlle noder i venstre undertre er mindre og alle noder i høyre undertre er større enn verdien i en gitt node
Operasjoner på binære søketrær • Lages gjerne rekursivt • Ettersom dybden på treet er O(log N) trenger vi ikke å bekymre oss for at stakken flyter over • For å sikre at treet kan ordnes implementerer vi Comparable og følgelig int compareTo() • find • findMin, findMax • insert • remove • printTree • Separasjon av ekstern "driver" og intern rekursiv rutine
find • Fire muligheter • T er tom • T er den vi søker • Den vi søker er mindre enn T - sjekk venstre • Den vi søker er større enn T - sjekk høyre • Hale-rekursjon • Er rekursjon i siste statement i en rutine • Kan og bør alltid erstattes med loop, men ikke her fordi rekursjon gir enklere algoritme uten kostnadssprekk • O(log N)
findMax, findMin • Fortsett mot høyre (venstre) så lenge det går og returnere ytterste node.
insert • Gjør som ved find • Hvis funnet - oppdater, ellers sett inn ny node • Duplikathåndtering • bare lagre en og telle antall (øker plassbehov) • legge duplikater inn i treet (kan gi dype trær) • hvis elementet er en større struktur: liste eller tre
remove • Vanskeligste operasjon • Når noden er funnet: • er noden en blad-node, kan den slettes • har noden ett barn, overlates barnet til nodens forelder • har noden to barn - erstatt nodens data med minste data i høyre undertre, som deretter må slettes. • Lazy deletion • Merket slettet • Fordel ved duplikattelling • Rimelig
Analyse av gjennomsnittstilfellet • Det kan vises at indre path-length er O(NlogN) • Da er gjennomsnittsdybden O(log N) • Sletterutinen er ikke symmetrisk • Treet blir ubalansert ved et stort antall innsettinger/slettinger • Gjennomsnittsdybden nærmer seg rota av N ved N2 innsetting/sletting • Ved høyere antall blir det mer balansert igjen • Hva blir så gjennomsnittet? • I praksis kjøretid på algoritmene O(log N) • Spesialtilfelle: Ferdig sortert input - gir O(N2) fordi binærtreet da degenererer til en kostbar lenket liste.
Balanserte trær • Et balansert tre sikrer kontroll med hvor dypt nodene kommer • Mange mulige algoritmer • Mer komplisert • Lenger kjøretid i gjennomsnitt for oppdateringer • AVL-trær • Alternativ - selvjusterende trær • Hvorfor bruke balanserte trær?