Definisjon av binært søketre

Like dokumenter
Definisjon: Et sortert tre

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Binære trær: Noen algoritmer og anvendelser

Et eksempel: Åtterspillet

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Selv-balanserende søketrær

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Et eksempel: Åtterspillet

Flerveis søketrær og B-trær

Binær heap. En heap er et komplett binært tre:

Lars Vidar Magnusson

Datastrukturer for rask søking

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

INF2220: Forelesning 2

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Liste som abstrakt konsept/datatype

Balanserte binære søketrær

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

INF2220: Forelesning 2

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Rekursiv programmering

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

IN Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Trær. En datastruktur (og abstrakt datatype ADT)

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

INF Algoritmer og datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 7

Trær. Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter.

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF2220: Time 12 - Sortering

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

Notater til INF2220 Eksamen

Rekursiv programmering

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert

EKSAMEN med løsningsforslag

Algoritmer og Datastrukturer

Vi skal se på grafalgoritmer for:

INF Algoritmer og datastrukturer

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

INF2220: Forelesning 1

Object [] element. array. int [] tall

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

INF2220: Forelesning 1

Vi skal se på grafalgoritmer for:

Algoritmer og Datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Kap 9 Tre Sist oppdatert 15.03

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Algoritmer og datastrukturer Løsningsforslag

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

UNIVERSITETET I OSLO

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

INF2220: Time 4 - Heap, Huffmann

INF1010 Binære søketrær ++

Hvor raskt klarer vi å sortere?

Binære Søketre. Egenskap. Egenskap : Grafisk. Egenskap : Kjøretid. Egenskap : Kjøretid. Egenskap : Oppsumering. Binære Søketre

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

Logaritmiske sorteringsalgoritmer

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

Uke 5 Disjunkte mengder

Innhold. Innledning 1

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Algoritmer og datastrukturer Løsningsforslag

Lars Vidar Magnusson

Løsnings forslag i java In115, Våren 1998

Løsningsforslag til INF110 h2001

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

Algoritmer og Datastrukturer

PG 4200 Algoritmer og datastrukturer Innlevering 2

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Oppgave 1. Sekvenser (20%)

København 20 Stockholm

INF1010 siste begreper før oblig 2

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Transkript:

Binære søketrær

Definisjon av binært søketre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større eller lik verdien i noden Det binære søketreet er en sortert datastruktur: Nodene oppsøkes i stigende sortert rekkefølge ved en inorder (venstre-roten-høyre) traversering av søketreet

To binære søketrær

Alfabetisk sortert søketre Inorder traversering: Abigail, Abner, Adam, Adela, Agnes, Alex, Alice, Allen, Angela, Arthur, Audrey

Forenklinger i forhold til læreboka Læreboka implementerer binære søketrær med: Generisk ADT som kan lagre 'alt' Både array og pekere For å holde fokus på prinsippene og algoritmene, og ikke på Java, forenkler vi til: Bare implementasjon med pekere Ingen ADT, skreddersyr noder og algoritmer for hvert enkelt problem Noder som bare inneholder enkle data og referanser til venstre og høyre barn

Søking i binært søketre Starter i roten av treet Følger en vei gjennom treet inntil: Verdien vi søker etter er funnet, eller Vi kommer til en bladnode uten å ha funnet verdien det søkes etter Maksimalt antall steg i søking blir lik høyden av treet (lengden av lengste vei fra roten frem til et blad)

Eksempel: Søk etter verdien x = 3

Søking i binært søketre: Implementasjon Implementeres mest effektivt med iterasjon: En while-løkke der vi i hvert steg enten går til høyre eller venstre i treet, Kan også kodes rekursivt: Enklere(?) kode, men langsommere enn iterasjon Enkelt eksempel: Søketre med data som er enkle tegn Java kode: searchtreedemo.java

Søking i binært søketre: Effektivitet Verste tilfelle: Verdien vi søker finnes ikke i treet Søket går langs den lengste veien i treet, fra roten helt ut til et blad Antall steg i worst-case blir lik høyden av treet Konklusjon: Søking i et binært søketre med n noder er O(log n) hvis treet er balansert Men: Søking kan bli O(n) hvis treet degenerer til en skjev «nesten-liste»

Innsetting av ny verdi i binært søketre Starter i roten av treet Følger en vei gjennom treet inntil: Vi kommer til posisjonen der verdien kunne ha ligget som en bladnode hvis den var i treet Setter inn den nye noden som en bladnode på denne posisjonen: Animasjon av innsetting

Rekursiv algoritme for innsetting av en ny verdi x i et binært søketre 1. Hvis roten er lik null: 1.1 Sett inn ny rotnode med verdien x 1.2 Ferdig 2. Hvis x < r, der r er verdien i roten av treet: 2.1 Sett inn x i rotens venstre subtre 2.2 Ferdig 3. Sett inn x i rotens høyre subtre

Rekursivt: Innsetting: Implementasjon Et rekursivt kall for hvert nivå i treet Bunn i rekursjonen når neste node på søkeveien er null, da opprettes ny node og settes inn som et blad Elegant kode (øvingsoppgave) Iterativt: Med en while-løkke der vi i hvert steg enten går til høyre eller venstre i treet Setter inn ny node som et blad, som blir venstre eller høyre barn til sist oppsøkte node i treet Eksempel, data er enkle tegn: searchtreedemo.java

Innsetting: Effektivitet Verste tilfelle: Går den lengste veien som finnes i treet fra roten til et blad Antall steg i worst-case er lik høyden av treet Konklusjon: Innsetting i et søketre med n noder er O(log n) hvis treet er balansert Innsetting blir O(n) hvis treet degenererer til en «nesten-liste»

Innsetting kan gi ubalanse Binært søketre etter innsetting av: (a) K B P D M R (b) B K D P M R (c) B D K M P R

Fjerning av en verdi fra binært søketre Starter i roten av treet Følger en vei gjennom treet inntil vi finner noden som skal fjernes Problem: Fjerning av f.eks. verdien 2 i figuren vil gi et «hull» i treet Kan hende vi må flytte på en annen node slik at den fyller et evt. hull som oppstår når en node skal fjernes

Fjerning av node i binært søketre: Må skille på tre ulike tilfeller 1. Noden som skal fjernes er en bladnode, har hverken venstre eller høyre subtre (nodene med verdier 1, 4 og 9 i figuren) 2. Noden som skal fjernes har ett subtre som er tomt og ett som ikke er tomt (3 og 5) 3. Noden som skal fjernes har noder i både høyre og venstre subtre (2 og 7)

Tilfelle 1: Fjerning av bladnode Sett forgjengernoden til å peke på null Fjerning av verdien 3: Animasjon

Tilfelle 2: Fjerne node med ett tomt subtre Sett forgjengernoden til å peke på fjernet nodes etterfølger Fjerning av verdien 5: Animasjon

Tilfelle 3: Fjerne node med to subtrær Finn største node i venstre subtre (lengst til høyre i subtreet), og flytt denne til posisjonen der noden som skal fjernes står Krever oppdateringer av pekere, flere spesialtilfeller Fjerning av verdien 7, noden med verdi 5 flyttes: Animasjon

Fjerning: Implementasjon Programmeres enklest med iterasjon Vanlig å dele opp i to metoder: 1. Finn noden som skal fjernes, og dennes foreldernode, med et vanlig venstre-høyre søk i det binære treet 2. Behandle de tre ulike tilfellene av fjerning i en egen metode, som returnerer en peker til noden (eller null) som nå står på fjernet nodes plass i treet Fjerningen medfører en del «pekerfikling» for å håndtere alle spesialtilfellene Eksempel: searchtreedemo.java

Fjerning: Effektivitet Verste tilfelle: Søkingen etter noden som fjernes, og deretter denne nodens evt. «erstatter», går den lengste veien fra roten til et blad i treet «Pekerfiklingen» etter at vi har funnet de to nodene avhenger ikke av antall noder i treet, er alltid O(1) Konklusjon: Fjerning i et tre med n noder er O(log n) hvis treet er balansert, men kan bli O(n) hvis treet degenerer Merk at fjerning også kan ødelegge balansen i treet