1 / 16

INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær

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

enid
Download Presentation

INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INF 295 Algoritmer og datastrukturerForelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)

  2. 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

  3. 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

  4. 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

  5. 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)

  6. findMax, findMin • Fortsett mot høyre (venstre) så lenge det går og returnere ytterste node.

  7. 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

  8. Innsetting

  9. 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

  10. sletting ett barn

  11. sletting av node med to barn

  12. 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.

  13. Tilfeldig generert tre

  14. Tre etter N2 tilfeldige sett inn- og slett- operasjoner

  15. Binærtre som er balansert i rota

  16. 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?

More Related