Lars Vidar Magnusson

Like dokumenter
Lars Vidar Magnusson

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

Definisjon av binært søketre

Definisjon: Et sortert tre

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

INF2220: Forelesning 2

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

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

INF2220: Forelesning 2

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

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Et eksempel: Åtterspillet

Binære trær: Noen algoritmer og anvendelser

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

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

Selv-balanserende søketrær

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

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

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

INF Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

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

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

INF Algoritmer og datastrukturer

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

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

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

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

INF Algoritmer og datastrukturer

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

Hashtabeller. Lars Vidar Magnusson Kapittel 11 Direkte adressering Hashtabeller Chaining Åpen-adressering

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

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

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.

Kap 9 Tre Sist oppdatert 15.03

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

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

Balanserte binære søketrær

Minimum Spenntrær - Kruskal & Prim

PG4200 Algoritmer og datastrukturer Forelesning 7

Quicksort. Lars Vidar Magnusson Kapittel 7 Quicksort Randomisert Quicksort Analyse av Quicksort

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF2220: Time 12 - Sortering

Et eksempel: Åtterspillet

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Binomialheaper Fibonacciheaper

EKSAMEN med løsningsforslag

Prioritetskøer. Prioritetskøer. Binære heaper (vanligst) Prioritetskøer

INF2220: Time 4 - Heap, Huffmann

Grunnleggende Grafalgoritmer II

Algoritmer og Datastrukturer

Notater til INF2220 Eksamen

Algoritmer og Datastrukturer

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

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

Algoritmer og datastrukturer Eksamen

Algoritmer og Datastrukturer

INF2220: Forelesning 1

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

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

PQ: HEAP. Heap. Er disse heap er? Hvordan implementere heap:

EKSAMEN. Algoritmer og datastrukturer

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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

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

Datastrukturer for rask søking

UNIVERSITETET I OSLO

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

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

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

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

Algoritmer og Datastrukturer IAI 21899

INF1010 Binære søketrær ++

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

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

Divide-and-Conquer II

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

PG 4200 Algoritmer og datastrukturer Innlevering 2

Algoritmer og datastrukturer Løsningsforslag

Rekursiv programmering

Transkript:

Binære Søketrær Lars Vidar Magnusson 14.2.2014 Kapittel 12 Binære Søketrær Søking Insetting Sletting

Søketrær Søketrær er datastrukturer som støtter mange dynamiske sett operasjoner. Kan bli brukt både som dictionary og prioritetskø. Kjøretiden til operasjonene er proposjonal med høyden til treet. I bestefall er kjøretiden Θ(log n). I verstefall er kjøretiden Θ(n). Det finnes mange ulike søketrær. I dennne forelesningen skal vi se på binære søketrær.

Binære Søketrær Binære søketrær er en viktig datastruktur for dynamiske sett. Flere av operasjonene kan implementeres med O(h) kjøretid, hvor h er høyden til treet. Et binært tre representeres som et sett av noder som er lenket sammen med pekere (introdusert i forelesning 9). Hver node inneholder følgende felt. En nøkkel (og eventuelt satelittdata) En peker til venstre subtre En peker til høyre subtre En peker foreldernoden I et binært søketre T peker T.root til rotnoden, og T.root.p = nil.

Hva Gjør et Binært Tre til et Binært Søketre? Det som skiller et binært søketre fra et normalt binært tre er følgende egenskap. Hvis y er i venstre subtre til x, så må y.key x.key Hvis y er i høyre subtre til x, så må y.key x.key

Eksempler på et Binære Søketrær Figurene under viser to binære søketrær. a viser et noenlunde komplett binært søketre b viser et ubalansert binært søketre

Inorder-Tree-Walk Algoritmen Egenskapen til binære søketrær gjør det mulig å skrive ut elementene i sortert rekkefølge ved å utføre en såkalt inorder traversering (inorder tree walk). Hvordan Inorder-Tree-Walk fungerer Sjekk slik at nåværende node x ikke er nil. Skriv ut alle verdiene i venstre subtre rekursivt Skriv ut x Skriv ut alle verdiene i høyre subtre rekursivt

Inorder-Tree-Walk Algoritmen Pseukoden til Inorder-Tree-Walk er listet under. Intuitivt kan vi si at kjøretiden er Θ(n) siden algoritmen skriver ut alle elementene i treet en gang. Fagboka gir et detaljert bevis.

Andre Traverseringer Inorder-Tree-Walk algoritmen travererer det binære treet inorder. Dette gir mening når det er snakk om utskrifter i rekkefølge, men hvis det var snakk om andre operasjoner kan det være fordelaktig med andre traverseringer. Ved å flytte på koden som jobber på nåværende nodes element kan vi oppnå andre traverseringer. Flytter koden før det første rekursive kallet får vi preorder traversering. Flytter koden etter det siste rekursive kallet får vi postorder traversering.

Tree-Search Algoritmen Pseudokoden for Tree-Search algoritmen kan brukes for å utføre spørringer på et binært søketre. Det første kallet til algoritmen blir Tree-Search(T. root, k). Kjøretiden til algoritmen er avhengig av høyden til treet i.e. O(h). Fagboka gir også pseudokode til en iterativ utgave av algoritmen.

Tree-Minimum og Tree-Maximum Algoritmene Egenskapen til binære søketrær gjør at det er svært enkelt å hente ut største og minste verdi. Tree-Minimum og Tree-Maximum algoritmene returnerer henholdsvis det minste og største elementet i treet. Kjøretiden til begge algoritmene er O(h).

Tree-Successor og Tree-Predecessor Algoritmene Hvis vi antar at nøklene er unike, så er etterfølgeren til en node x node y slik at y.key er den minste nøkkelen større enn x.key. Vi kan finne en etterfølger (successor) utifra strukturen på treet i.e. ingen sammenligning av nøkler er nødvendig. Det er to tilfeller: Hvis node x har et høyre subtre (som ikke er nil), så er etterfølgeren minste verdi i høyre subtre. Hvis node x ikke har et høyre subtre må vi gå oppover i treet til vi finner en node som har x i venstre subtre. Forgjengeren (predecessor) operasjonen er symmetrisk med etterfølger operasjonen.

Tree-Successor og Tree-Predecessor Algoritmene Pseudokoden til Tree-Successor er listet under. Kjøretiden til algoritmen er O(h) siden vi enten går opp eller ned i treet i en enkel sti.

Tree-Insert Algoritmen Innsetting i et binært tre er nokså enkelt. Vi må bare traversere nedover i treet til vi finner korrekt plass for det nye elementet. Vi ivaretar to pekere x og y hvor x er gjeldende node som sjekkes og y er foreldernoden til x. Vi går til x.left hvis z.key < x.key og til x.left hvis z.key x.key. Vi har kommet til korrekt posisjon når x = nil. Sett inn det nye elementet z i enten y.left eller y.right.

Tree-Insert Algoritmen Pseudokoden for innsetting i et binært søketre er listet under. Kjøretiden til Tree-Insert er bundet av høyden til treet i.e. O(h).

Tree-Delete Algoritmen Det er litt mer komplisert å slette fra et binært søketre enn det er å legge til nye elementer. Konseptuelt så har vi tre tilfeller når vi skal slette element z: z har ingen barn vi kan bare fjerne den direkte z har et barn vi lar barnet erstatte plassen til z i treet z har to barn vi finner z sin etterfølger y og lar den erstatte z (dette er litt lettere sagt enn gjort). Disse tilfellene er strukturert litt annerledes i algoritmen, men ideen er den samme.

Hjelpefunksjonen Transplant Transplant hjelpefunksjonen gjør det lett å erstatte et subtre med et annet. Gjør u sin forelder til v sin forelder (hvis ikke u er rotnoden hvor v blir den nye roten) Forelderen til u får v som enten venstre eller høyre barn avhengig av hvor u var plasert v.left og v.right blir ikke oppdatert

Tree-Delete Algoritmen Tree-Delete algoritmen har fire ulike tilfeller Hvis z ikke har noe venstre barn så erstatter vi z med det høyre barnet (hvis høyre barn er nil så dekker det tilfellet med ingen barn) Hvis z har bare ett venstre barn så erstatter vi z med det venstre barnet

Tree-Delete Algoritmen Tree-Delete algoritmen har fire ulike tilfeller. Vi har allerede dekt de to tilfellene av med ingen eller et barn. La oss nå se på tilfellet hvor noden som skal fjernes har to barn. Vi finner z sin etterfølger y i høyre subtre. Hvis y sin forelder er z kan vi erstatte z med y og la y sitt høyre barn være som det er.

Tree-Delete Algoritmen Vi har nå dekket tre tilfeller. Det siste tilfellet forekommer når z har to barn, og etterfølgeren y sin forelder ikke er z. Her må vi utføre to steg. Erstatt y med y sitt høyre barn. Erstatt z med y.

Tree-Delete Algoritmen Pseudokoden til Tree-Delete er listet under. Kjøretiden til algoritmen er O(h).

Hvordan Minimere Kjøretiden Vi har sett flere ganger denne forelesningen at kjøretiden til operasjonene på binære søketrær er O(h). I verstefall er denne høyden den samme som antall elementer i treet i.e. O(n). I bestefall er høyden O(log n). I de neste forelesningene skal vi se på alternative søketrær som sørger for at treet er balansert. Fagboka presenterer også en randomisert utgave av binære søketrær som gjør at verstefall kan unngås.