Selv-balanserende søketrær

Like dokumenter
Definisjon: Et sortert tre

Definisjon av binært søketre

Balanserte binære søketrær

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

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

INF2220: Forelesning 2

INF2220: Forelesning 2

Binære trær: Noen algoritmer og anvendelser

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

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

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

Et eksempel: Åtterspillet

Lars Vidar Magnusson

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

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

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

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

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

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.

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

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

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

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

IN Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

Datastrukturer for rask søking

PG 4200 Algoritmer og datastrukturer Innlevering 2

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

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

Liste som abstrakt konsept/datatype

Notater til INF2220 Eksamen

INF Algoritmer og datastrukturer

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

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

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

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

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

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

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

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

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

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

PG4200 Algoritmer og datastrukturer Forelesning 7

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

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

INF2220: Time 4 - Heap, Huffmann

Kap 9 Tre Sist oppdatert 15.03

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

KONTINUASJONSEKSAMEN

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

Vi skal se på grafalgoritmer for:

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

Algoritmer og Datastrukturer

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

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

Et eksempel: Åtterspillet

Lars Vidar Magnusson

KONTINUASJONSEKSAMEN

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

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

INF2220: Forelesning 1

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

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

INF2220: Forelesning 3

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Hashing: Håndtering av kollisjoner

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

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

INF1010 siste begreper før oblig 2

Algoritmer og Datastrukturer IAI 21899

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Balanserte søketrær. AVL-trær. AVL-trær. AVL-trær høyde AVL AVL. AVL-trær (Adelson-Velskii og Landis, 1962) Splay-trær (Sleator og Tarjan, 1985)

INF1010 Binære søketrær ++

Obligatorisk oppgave 1 INF1020 h2005

Innhold. Innledning 1

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

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Oppgave 1. Sekvenser (20%)

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

Algoritmer og Datastrukturer

Transkript:

Selv-balanserende søketrær Georgy Maksimovich Adelson-Velsky Evgenii Mikhailovich Landis

Søketrær og effektivitet O(log n) effektivitet av binære søketrær kan ikke garanteres Treet til venstre har høyde lik log n Treet til høyre har høyde lik n

Selv-balanserende søketrær Implementerer innsetting og fjerning av verdier slik at ubalanse i treet automatisk rettes opp hvis nødvendig Har alltid O(log n) effektivitet Krever mer komplisert programkode med mye «pekerfikling» Noen varianter av selv-balanserende trær: AVL-tre Red-black tree (Java Collections, læreboken) Splay-tree Scapegoat tree

AVL-trær Første publiserte selv-balanserende binære søketre, oppkalt etter de to oppfinnerne * Er sortert på samme måte som et søketre Krav til balanse: For alle noder i treet skal forskjellen i høyde på nodens venstre og høyre subtre maksimalt være lik 1 Kan bevises at høyden av et AVL-tre alltid er O(log n) * Georgy M. Adelson-Velsky.; Evgenii M. Landis: "An algorithm for the organization of information", Proceedings of the USSR Academy of Sciences, 1962

Treet til venstre er et AVL-tre, alle nodene er i balanse Treet til høyre er ikke et AVL-tre, de to mørke nodene bryter med balansekravet

Balansefaktorer Hver node i et AVL-tre lagrer et heltall som kalles en balansefaktor, i tillegg til data og de to pekerne til høyre og venstre subtre Balansefaktoren er forskjellen i høyde mellom nodens venstre og høyre subtre: Lik 0: Subtrærne er like høye Negativ: Venstre subtre er høyest Positiv: Høyre subtre er høyest

AVL-tre med balansefaktorer Alle nodene i et AVL-tre skal ha balansefaktor lik -1, 0 eller 1

Søking, innsetting og fjerning i AVL-tre Søking i et AVL-tre gjøres på samme måte som søking i et vanlig binært søketre Innsetting og fjerning i AVL-tre: Gjøres først på samme måte som innsetting og fjerning i et vanlig binære søketre Retter deretter opp evt. ubalanse i treet som kan ha oppstått ved innsetting/fjerning av en node Vi skal bare se på hvorledes innsetting i AVL-tre gjøres

Innsetting i AVL-tre Sett inn ny node som i et vanlig søketre Justér balansefaktoren i alle nodene på søkeveien fra roten ned til ny node, slik at den fortsatt er korrekt etter innsetting Hvis en node får balansefaktor lik -2 eller 2, er treet kommet i ubalanse etter innsettingen Ved ubalanse flyttes noder rundt i treet slik at balansen gjenopprettes

Innsetting i AVL-tre: Pivotnoden Pivotnode: Siste node på veien ned til ny node som har balansefaktor som ikke er lik 0 Ved ubalanse er det alltid tilstrekkelig at vi bare justerer balansen i subtreet som har rot i pivotnoden Justeringen gjøres ved å flytter noder i treet med rotasjoner rundt pivotnoden Flere ulike tilfeller som må behandles separat

Tilfelle 1: Det finnes ingen pivotnode Alle noder på søkeveien ned til den nye noden som er satt inn har balansefaktor lik 0 Innsettingen kan ikke forårsake ubalanse, ingen flytting av noder er nødvendig Trenger bare å justere balansefaktoren for alle nodene som ligger på søkeveien

Tilfelle 2: Ny node i pivotnodes minste subtre Det finnes en pivotnode på veien ned til ny node Ny node er satt inn i pivotnodens korteste subtre Kan ikke forårsake ubalanse i treet, trenger ikke flytte noder Justerer balansefaktor for alle noder fra og med pivotnoden og ned til den nye noden som er satt inn

Tilfelle 3: Ny node i pivotnodes høyeste subtre Det finnes en pivotnode på veien ned til ny node Ny node er satt inn i pivotnodens høyeste subtre Pivotnoden blir ubalansert Treet må omstruktureres for å opprettholde AVLegenskapene To (fire) tilfeller av omstrukturering: Enkel rotasjon (to symmetriske tilfeller) Dobbel rotasjon (to symmetriske tilfeller)

Eksempel som krever enkel rotasjon Ny node settes inn i venstre subtre til pivotnodens etterfølger på søkestien:

Enkel rotasjon (symmetrisk for noden p3 til høyre)

Enkel rotasjon: Eksempel

Eksempel som krever dobbel rotasjon Ny node settes inn i høyre subtre til pivotnodens etterfølger på søkestien:

Dobbel rotasjon (symmetrisk for noden p3 til høyre)

Dobbel rotasjon: Eksempel

AVL-trær: Implementasjon og effektivitet Innsetting i AVL-trær krever relativt «fiklete» kode Fjerning med rebalansering er enda verre... Men: Rebalansering er i verste fall en O(log n) operasjon AVL-trær garanterer derfor alltid O(log n) effektivitet for søking, innsetting og fjerning Hvis vi vet at dataene kommer i random rekkefølge (som i svadageneratoren), er det tilstrekkelig å bruke vanlig binært søketre