Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.

Liknende presentasjoner


Presentasjon om: "INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug."— Utskrift av presentasjonen:

1 INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug

2 Søketre - ADT Binæ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

3 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

4 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 N 2 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(N 2 ) fordi binærtreet da degenererer til en kostbar lenket liste.

5 Tilfeldig generert tre

6 Tre etter N 2 tilfeldige sett inn- og slett- operasjoner

7 Binærtre som er balansert i rota

8 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?

9 AVL-trær Et AVL-tre (Adelson-Velskii og Landis) er et binært søketre med balansebetingelse: For hver node i treet må høyden på høyre og venstre undertre ikke være mer enn 1 i forskjell. Høyden er ca 1.4 log(N). Vi bevarer balansen ved innsetting ved hjelp av rotasjoner.

10 Rotasjoner To typer: Enkel rotasjon Dobbel rotasjon (venstre-høyre / høyre-venstre) Fire tilfeller av ubalanse ved innsetting: Venstre undertre av venstre barn Høyre undertre av venstre barn Venstre undertre av høyre barn Høyre undertre av høyre barn

11 Rotasjoner Pga symmetri er det logisk kun to tilfeller: Enkel rotasjon fikser tilfelle 1 og 4. Dobbel rotasjon fikser tilfelle 2 og 3. Demonstrasjon Java applet som viser R-B, Splaying og AVL

12 Splaytre Selvbalanserende tre hvor: En node som er aksessert, er raskt tilgjengelig. Hver tilgang halverer dybden på tilgangsstien. God tilgang gir dårlig rotasjon og omvendt. To situasjoner: Zig-zag – utfør dobbel rotasjon (som AVL). Zig-zig – utfør to enkle rotasjoner samme vei. (Se eksempel forrige slide.)


Laste ned ppt "INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug."

Liknende presentasjoner


Annonser fra Google