Kap 9 Tre Sist oppdatert 15.03

Like dokumenter
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

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:

PG4200 Algoritmer og datastrukturer Forelesning 7

Et eksempel: Åtterspillet

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

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.

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

Et eksempel: Åtterspillet

Definisjon av binært søketre

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

Definisjon: Et sortert tre

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

EKSAMEN med løsningsforslag

Lars Vidar Magnusson

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

INF Algoritmer og datastrukturer

Algoritmer og Datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Binære trær: Noen algoritmer og anvendelser

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

INF2220: Forelesning 2

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

INF Algoritmer og datastrukturer

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

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

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

INF Algoritmer og datastrukturer

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

INF2220: Forelesning 1

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

Balanserte binære søketrær

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

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

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

IN Algoritmer og datastrukturer

Et eksempel: Åtterspillet

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

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og Datastrukturer

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

Algoritmer og datastrukturer Løsningsforslag

INF2220: Forelesning 1

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

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

Object [] element. array. int [] tall

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

Sist gang (1) IT1101 Informatikk basisfag. Sist gang (2) Oppgave: Lenket liste (fysisk) Hva menes med konseptuelt og fysisk i forb med datastrukturer?

INF Algoritmer og datastrukturer

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

INF2220: Forelesning 2

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

PG4200 Algoritmer og datastrukturer Forelesning 10

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

Kap.8 Sortering og søking sist oppdatert 16.03

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

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

Algoritmer og Datastrukturer

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

Liste som abstrakt konsept/datatype

Algoritmer og datastrukturer Eksamen

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

LO118D Forelesning 12 (DM)

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Eksempel

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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:

UNIVERSITETET I OSLO

Selv-balanserende søketrær

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

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

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

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 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Notater til INF2220 Eksamen

UNIVERSITETET I OSLO

København 20 Stockholm

Algoritmer og Datastrukturer IAI 21899

Generelle trær BINÆRTRÆR. Binærtrær

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

Disjunkte mengder ADT

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

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

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

INF Algoritmer og datastrukturer

INF1010 siste begreper før oblig 2

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

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

Pensum: fra boken (H-03)+ forelesninger

Sist forelesning snakket vi i hovedsak om trær med rot, og om praktisk bruk av slike. rot. barn

Algoritmer og datastrukturer Løsningsforslag

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

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

Transkript:

Kap 9 Tre Sist oppdatert 15.03 Definere et tre som en datastruktur. Definere begreper knyttet til tre. Diskutere mulige implementasjoner av tre Analysere implementasjoner av tre som samlinger. Diskutere metoder for å gjennomgå tre. Undersøke et eks. med binært tre 1

Tre Et tre er en sammenhengende graf (en graf = mengde av noder og kanter) uten sykler som oppfyller bestemte krav En sti i et tre er en liste av ulike noder der påfølgende noder er forbundet med kanter Et tre er en ikke-lineær struktur definert ved at hver node i treet, unntatt den første noden kalt rot, har eksakt en foreldre. Operasjoner på tre er avhengig av type tre og bruk. 2

Definisjoner En node referer til en lokasjon i treet hvor et element er lagret. I starten av treet fins det en node kalt roten som ikke har en foreldre. 3

Definisjoner Hver node i treet peker på noder kalt barn, som er plassert under i trestrukturen (unntatt nodene på siste nivå ). En node kan ha flere barn (søsken). En node som ikke har noen barn kalles et blad. En node som ikke er rot og som har minst et barn er kalt en intern node. 4

FIGUR 9.1 Tre- terminologi 5

Definisjoner Enhver node plassert under en annen node K og på en sti fra K til denne noden er kalt etterfølgeren til K. Enver node plassert over en annen node L og på en sti fra roten til L er kalt forgjenger til L. Alle barn til samme node er kalt søsken. Et tre der hver node har maksimalt N barn er kalt et N-ary tre, tre av orden N. Et tre der hver node har maksimalt to barn er kalt et binært tre. 6

Definisjoner Et undertre (subtre) til et tre lages ved å velge en node S i treet som rot til undertreet sammen med alle etterfølgere til S og tilhørende kanter. (Kan definere et tre på en rekursiv måte. Se figurer) 7

Definsjoner Hver node i treet er plassert på et bestemt nivå eller dybde i trestrukturen. Nivået til en node er lengden av stien fra roten til noden. Denne stilengden bestemmes ved å telle antall kanter fra roten til noden. Roten er plassert på nivå 0, barn til roten er plassert på nivå 1, barnebarn til roten er plassert på nivå 2 osv. 8

Definisjoner Høyden til et tre er lengden til den lengste stien fra roten til et blad, altså lik største nivåtallet. Høyden til treet på neste lysark er 3. Stien fra roten(a) til bladet(f) har lengde 3. Stien fra roten(a) til bladet (C) har lengde 1. 9

FIGUR 9.2 Stilengde og nivå Eks. på et binært tre 10

Definisjoner Et tre er balansert hvis alle bladene er plassert på samme nivå eller tilnærmet på samme nivå Noen algoritmer definerer balansert tre ved at alle bladene er plassert på nivå h eller på nivå h -1 der h er høyden til treet, h log N n for et tre av orden N. n er her antall noder. For et balansert binært tre (binært tre er et tre der hver node har maks to barn) blir høyden h log 2 n ( sml også analyse for binærsøk der vi så på antall halveringer).maks antall noder på nivå j er 2 j. 11

FIGUR 9.3 Balansert og ubalansert tre 12

Definisjoner Begrepet fullt og komplett tre er relatert til balansering av et tre. Et fullt tre er et tre som er fullt på alle nivåer. Et komplett tre er et tre som enten er fullt eller fullt til siste nivå med blader plassert fra venstre. På neste lysark: Tre a er komplett, men ikke fullt. Tre b er ikke komplett (og dermed ikke fullt) Tre c er fullt (og dermed komplett). 13

FIGUR 9.4 Noen eksempler på komplett tre 14

Kjedet representasjon av tre Hver node kan defineres som objekt av klasse TreNode i analogi med klassen LinearNode vi brukte for kjedet liste For et binært tre kan vi definere en klasse BinærNode som på neste lysark. NB! Operasjonene på det binære treet er metoder i en større klasse BinærTre som inneholder BinærNode (sml. KjedaListe). Operasjonene definerer vi senere. 15

Kjedet implementasjon (2) public class BinærTreNode<T>{ private T element; private BinærTreNode<T> venstre, høyre; /*************************************************** BinærTreNode (T el) { element = el; venstre = null; høyre = null; } }//class 12-16

Kjedet implementasjon (3) Hver node inneholder typisk en referanse til elementet og for hver av de mulige barna. I noen implementasjoner er det også nyttig å ha en peker til foreldrenoden (Feks. i såkalte tråklete tre). 17

TabellimpIementasjon av tre For noen typer av tre, spesielt binære tre kan en beregne plassering av noder når en bruker tabellimplementasjon. Vi antar nå et binært tre. Anta elementene er lagret påfølgende i en tabell kalt tabell der roten lagres som tabell[0]. Bemerk at ikke alle interne noder har maks. antall barn og videre at bladene har ikke noen barn. 18

Tabellimplementasjon (2) Barna til roten lagres påfølgende, først med venstre barn, deretter høyre barn. Tilsvarende for neste nivå. Se neste figur. (i er posisjonen eller indeksen i tabellen) For elementet tabell[i] finner vi eventuelt venstre barn som tabell[2*i+1] og eventuelt høyre barn som tabell[2*(i+1)]. 19

Tabellimplementasjon (3) Foreldren til elementet tabell[i] er gitt ved tabell[(i-1)/2] enten elementet er venstrebarn eller høyrebarn. Dersom treet ikke er komplett eller lite komplett, så vil vi få mange tomme plasser i tabellen. 20

FIGURE 8.5 Beregning av posisjon av foreldre og barn 21

Tabellimplementasjon (4) En annen variant av tabellimplementasjon er modellert etter måten operativsystemet administrerer minne. I stedet for å tildele elementer av treet til tabellposisjoner ved lokasjon i treet, blir tabellposisjonene tildelt kontinuerlig etter FIFO- prinsipp. 22

Tabellimplementasjon (5) Hver node lagrer tabellindekser til hvert barn i stedet for referanser til barna. Fordelen er at elementene lagres kontinuerlig og at vi ikke får unødvendig sløsing av plasser. Men det er mer komplisert ved bl.a. sletting av et element siden resten av elementene da må skiftes for at vi skal ha kontinuerlig lagring. Fig.9.6. 23

FIGUR 9.6 Simulert kjedet strategi for tabellimplementasjon av tre 24

Analyse av tre Antall Noder, n i et fullt binært tre med nivåer 0..k er gitt ved : n k = = + + + = i (geometrisk rekke) Tegn opp! i 0 1 k k+ 1 2 2 2... 2 2 1 Copyright 2005 Pearson Addison-Wesley. All rights reserved. 12-25

Analyse av tre La n være antall noder i et fullt binært tre. Høyden h til et til et fullt binært tre eller til et komplett binært tre med nivåer 0..k er gitt ved: h = k (høyden er det største nivåtallet). Fra forrige formel: n = 2 k+1-1 = 2 h+1-1 Tar logaritmen og får: h+1 = log 2 (n+1) h = log 2 n + 1. Dvs O(logn) Copyright 2005 Pearson Addison-Wesley. All rights reserved. 12-26

Analyse av tre Tre er en nyttig og effektiv måte å implementere samlinger på. I vår analyse av listeimplementasjoner i kap.6 fant vi at forventet antall sml. ved finnoperasjonen var n/2, dvs. O(n) der n er antall elementer. 27

Analyse av tre Hvis vi implementer en ordnet liste ved å bruke et balansert binært tre med tilleggsegenskapen at venstre barn alltid er mindre enn foreldren og videre at foreldren er mindre eller lik høyrebarn, så kan vi forbedre effektiviteten av finn-operasjonen til O(logn) Et slikt tre kalles et binært søketre (Kap.10). Begrunnelsen for resultatet over er at høyden av et slikt balansert binært tre alltid vil være log 2 n når n er antall elementer i treet. 28

Analyse av tre For et balansert tre av orden N med n elementer vil høyden være log N n. Tegn et balansert tre av orden N lik 4 og n = 21. Hva blir høyden? Stemmer formelen? Lag et tre av orden N lik 2 (binært tre) og n = 21. Hva blir nå høyden? Stemmer formelen? For binære søketre (Kap.10) vil vi i verste tilfelle være garantert å søke i en sti fra roten til et blad. 29

Gjennomgang av tre Det er fire hovedalgoritmer for gjennomgang av tre. Preorden gjennomgang Inorden gjennomgang Postorden gjennomgang Nivåorden gjennomgang Vi starter alltid en gjennomgang av tre med roten. 30

FIGUR 9.7 Et binært tre 31

Preorden gjennomgang Preorden er utført ved først å besøke hver node, deretter besøke venstre undertre i preorden og så høyre undertre i preorden. En preorden gjennomgang er: A B D E C 32

Preorden gjennomgang Prinsipp for preorden gjennomgang av et binært tre: besøk noden gjennomgå venstre undertre i preorden gjennomgå høyre undertre i preorden 33

Inorden gjennomgang Inorden gjennomgang er utført ved først å besøke venstre undertre i inorden, deretter besøke noden og så besøke høyre undertre i inorden En inorden gjennomgang av forrige tre gir: D B E A C 34

Inorden gjennomgang Prinsipp for inorden gjennomgang av et binært tre: gjennomgå venstre undertre i inorden besøk noden gjennomgå høyre undertre i inorden 35

Postorden gjennomgang Postorden gjennomgang er utført ved først å gjennomgå venstre undertre i postorden, deretter gjennomgå høyre undertre i postorden og så besøke noden. Gitt det samme treet som før. En postorden gjennomgang er: D E B C A 36

Postorden gjennomgang Prinsipp for postorden gjennomgang av et binært tre: gjennomgå venstre undertre i postorden gjennomgå høyre undertre i postorden besøk noden 37

Nivågjennomgang Nivågjennomgang er utført ved å besøke alle nodene på hvert nivå (søskene) fra venstre mot høyre, et nivå om gangen. Gitt det samme treet. En nivå gjennomgang er: A B C D E 38

Nivå-gjennomgang alg. Opprett en kø Opprett en tom liste Legg roten inn i køen så lenge køen er ikke-tom utfør { ta ut et element fra køen hvis elementet er ikke-null så legg elementet bak i listen legg barna til elementet i køen ellers legg null i listen } Elementene i listen ligger nå i nivårekkefølge. 39

Implementere et binært tre Vi kan se på en felles mengde av operasjoner for binære tre: - fjernvenstreundertre - fjernhøyreundertre - fjernalleelementer - ertom - antall - inneholder - finn - tostring Vi kan ikke definere en leggtil-operasjon før vi har tatt stilling til hvordan treet skal brukes. 40

FIGUR 9.10 Eksempel på et tre for aritmetisk uttrykk med binære operatorer 41