INF1010 Binære søketrær ++

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

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

INF1010 siste begreper før oblig 2

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

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

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

UNIVERSITETET I OSLO

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

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

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

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

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

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

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

Algoritmer og datastrukturer Eksamen

INF1010. Grensesnittet Comparable<T>

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Eksamen 22. februar 2011

Definisjon av binært søketre

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

UNIVERSITETET I OSLO

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

Algoritmer og datastrukturer Eksamen

Balanserte binære søketræ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

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

INF2220: Forelesning 2

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

INF2220: Forelesning 2

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Binære trær: Noen algoritmer og anvendelser

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Sortering med Comparable og Comparator

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

Definisjon: Et sortert tre

INF2220: Forelesning 1

Algoritmer og datastrukturer Løsningsforslag

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

INF1010 e-postadresser

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Fagnr: A. Ant. vedlegg: 1 (2 sider)

INF2220: Forelesning 1

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

Algoritmer og datastrukturer Løsningsforslag

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

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

UNIVERSITETET I OSLO

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

København 20 Stockholm

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

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

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

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

Velkommen til INF1010

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

INF1000: Forelesning 7

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider)

Lenkelister. Lister og køer.

EKSAMEN med løsningsforslag

2 Om statiske variable/konstanter og statiske metoder.

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt

INF våren 2017

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF1000: Forelesning 7. Konstruktører Static

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

Rekursjon. Binærsøk. Hanois tårn.

UNIVERSITETET I OSLO

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Lenkelister og beholdere av lenkelister

Algoritmer og Datastrukturer IAI 21899

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

UNIVERSITETET I OSLO

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 INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Transkript:

INF1010 Binære søketrær ++ Programeksempler med insetting, gjenfinning av noder i et binært søketre samt eksempler på hvordan lage en liste av et binærtre.

Hva må du kunne om binære søketrær i INF1010 Lage programmer som 1. bygger opp et binært søketre (sette inn objekter) 2. finner igjen et objekt i et binært søketre 3. traverserer hele treet (f.eks. skriver ut alle objektene) 4. gjør om et binært søketre til en sortert liste 5. gjør om en usortert liste til et binært søketre (samme som 1.) Du skal også kunne gjøre rede for tilstandspåstandene som ligger til grunn for at en datastruktur skal være et binært søketre. Vil du vite mer om binære søketrær, kan denne wikipediaartikkelen være et greit utgangspunkt: http://en.wikipedia.org/wiki/binary_search_tree michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 2

Tilstandspåstander et binært søketre (BST) består av 0 til n knuter (noder) For alle knuter i et BST gjelder: en knute har en konstant verdi og en compareto-metode som er veldefinert når knuten sammenlignes med andre knuter en knute har pekere til to BST (subtrær), v og h. alle knutene i venstre subtre (hvis ikke tomt) har verdier som er mindre enn eller lik knutens verdi basert på returverdien til knutens compareto-metode. alle knutene i høyre subtre har verdier som er større enn eller lik knutens verdi basert på returverdien til knutens compareto-metode. michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 3

Programeksempel klassestruktur interface BTNodeRolle <T>{ int compareto(t e ) ; void skrivut ( ) ; } class Node <T extends BTNodeRolle <T>> { Node<T> venstre, høyre ; T denne; Node (T t ) { denne = t ; } } void leggtiltre (Node <T> inn ) Node<T> finnidenneellerunder (Node <T> likdenne ) void skrivut ( ) michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 4

class Ord implements BTNodeRolle <Ord> { private String ordet ; Ord ( String s ) { ordet = s ; } } public int compareto( Ord o) public void skrivut ( ) public class Eksempel1 { public static void main( String [ ] args ) { Node<Ord> = new Node<Ord> (new Ord( ) ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 5

Klassen Ord class Ord implements BTNodeRolle <Ord> { private String ordet ; Ord ( String s ) { ordet = s ; } public int compareto( Ord o ) { return ordet. comparetoignorecase ( o. ordet ) ; } } public void skrivut ( ) { System. out. print ( ordet+" " ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 6

Klassen Node<T> class Node <T extends BTNodeRolle <T>> { Node<T> venstre, høyre ; T denne; Node (T t ) { denne = t ; } } void leggtiltre (Node <T> inn ) Node<T> finnidenneellerunder (Node <T> likdenne ) void skrivut ( ) michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 7

Et Node<Ord>-objekt Tilstand i programmet etter setningen Node<Ord> = new Node<Ord> (new Ord( )); void leggtiltre(node<ord> inn) Node<Ord> finnidenneellerunder(node<ord> likdenne) Node<Ord> void skrivut() Sterkt forenklet: Node<Ord> venstre Ord denne Node<Ord> høyre int compareto(ord o) void skrivut() String ordet Konstruktører: Ord (String s) {ordet = s;} Node (T t) {denne = t;} michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 8

Fra main-metoden Node<Ord> = new Node<Ord> (new Ord( " " ) ) ;. leggtiltre (new Node<Ord> (new Ord( "" ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ;. leggtiltre (new Node<Ord> (new Ord( " " ) ) ) ; michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 9

Settinnmetoden i Node<T> void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 10

Datastruktur ved kall på settinn-metoden (over) og resultat (under) Node<Ord> michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 11

void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 12

void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 13

void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; } michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 14

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 15

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 16

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 17

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 18

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 19

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 20

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 21

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 22

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 23

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 24

Finnmetoden i Node<T> Node<T> finnidenneellerunder (Node <T> likdenne ) { Node<T> fantdette ; int smnlgn = denne. compareto( likdenne. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) fantdette = null ; else fantdette = høyre. finnidenneellerunder ( likdenne ) ; else i f ( smnlgn > 0 ) i f ( venstre == null ) fantdette = null ; else fantdette = venstre. finnidenneellerunder ( likdenne ) ; else // smnlgn == 0, dvs. dette er noden det l e t e s etter fantdette = this ; } return fantdette ; michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 25

Node<Ord> funnet =. finnidenneellerunder (new Node<Ord> (new Ord( " " ) ) ) ; michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 26

funnet. skrivut ( ) ; michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 27

Skrivutmetoden i Node<T> void skrivut ( ) { i f ( venstre!= null ) venstre. skrivut ( ) ; denne. skrivut ( ) ; i f ( høyre!= null ) høyre. skrivut ( ) ; } NB! Rekkefølgen på skrivut-kallene vil forandre rekkefølgen. Metoden som er vist skriver ut objektene i alfabetisk stigende rekkefølge. Hvorfor? michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 28

Fra binærtre til liste Node<Ord> Liste er en enklere struktur å lage en iterator over. michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 29

michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 30

Node<Ord> liste michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 31

Et objekt av klassen Tre<Ord> Svarte nodeobjekter er av den indre klassen Node i Tre Et objekt av klassen Liste<Ord> Grønne objekter er av klassen Ord Røde nodeobjekter er objekter av den indre nodeklassen i Liste michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 32

Oppgaver 1. Snu ulikhetstegnet i settinnmetoden. Hva blir resultatet? Gjør endringer i skrivut, slik at ordningen fortsatt blir alfabetisk. 2. Gjør endringer i innsettingsrekkefølgen. Får dette konsekvenser for utkriften? 3. Hvor mange forskjellige utskrifter kan vi få ved å endre rekkefølgen på de tre skrivkallene i skrivut? 4. Gjør endringer i klassestrukturen, ved å innføre en ny klasse BTre med metodene som manipulerer treet. La Node være en indre klasse uten metoder, men med pekere. (Vanskelig). 5. Hvor mange forskjellige rekkefølger kan vi sette inn de ti ordene i eksemplet og få det samme treet? 6. Hvor mange forskjellige trær kan vi få ved å endre innsettingsrekkefølgen? michael@ifi.uio.no INF1010 3. mai 2012 (uke 18) 33