INF1010 siste begreper før oblig 2

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

INF1010 Binære søketrær ++

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

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

Velkommen til INF1010

Lenkelister. Lister og køer.

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

Versjon (vil bli endret).

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF1010 e-postadresser

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

Dagens forelesning. INF1010 Datastrukturer Lister og køer Pekerkjedelister Øvelser. Innhold i dette lysarksettet

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

Dagens tema INF1010 INF1010 INF1010 INF1010

Studieaktiviteter i INF1010

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

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

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

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

INF1010. Stein Michael Storleer (michael) Lenkelister

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

UNIVERSITETET I OSLO

Vanlige datastrukturer. I dette lysarksettet

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

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

Algoritmer og Datastrukturer

Definisjon av binært søketre

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

UNIVERSITETET I OSLO

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

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Enkle generiske klasser i Java

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

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

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

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

INF1010. Om pensum INF1010 INF1010 INF1010 INF1010. Det vesentlige er å forstå og kunne lage programmer ved hjelp av eksemplene i bøkene.

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

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

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

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

INF2220: Forelesning 2

Kapittel 9: Sortering og søking Kort versjon

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

Lenkelister og beholdere av lenkelister

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

Algoritmer og datastrukturer Eksamen

Løsningsforslag til INF110 h2001

INF Algoritmer og datastrukturer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

INF2220: Forelesning 2

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

INF Innleveringsoppgave 6

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Kapittel 9: Sortering og søking Kort versjon

INF1010. Grensesnittet Comparable<T>

2 Om statiske variable/konstanter og statiske metoder.

Algoritmer og datastrukturer Eksamen

PG4200 Algoritmer og datastrukturer Forelesning 7

INF1000 HashMap. Marit Nybakken 2. november 2003

INF2220: Forelesning 1

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Binære trær: Noen algoritmer og anvendelser

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

Kapittel 9: Sortering og søking Kort versjon

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

Algoritmer og datastrukturer Eksamen

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

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

Obligatorisk oppgave 1 INF1020 h2005

Algoritmer og datastrukturer Eksamen 22. februar 2011

Kapittel 8: Sortering og søking

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

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

Finne et personobjekt med et gitt navn. Sette personobjekt inn i treet

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

UNIVERSITETET I OSLO

INF Notater. Veronika Heimsbakk 10. juni 2012

Post-it spørsmål fra timen (Arv og subklasser)

Algoritmer og datastrukturer Løsningsforslag

INF2220: Forelesning 1

PG 4200 Algoritmer og datastrukturer Innlevering 2

Lars Vidar Magnusson

INF Algoritmer og datastrukturer

Kapittel 9: Sortering og søking Kort versjon

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

Transkript:

INF1010 siste begreper før oblig 2 Sammenligning. Mer lenkede lister. Forskjellige listeimplementasjoner. Binære trær. Bittelitt om grensesnitt (interface).

Dagens forelesning Flere temaer på grunn av obligatorisk oppgave 2. sammenligning av variable forskjellige modeller for lenkelister litt mer om lenkelister binære søketrær Litt om grensesnitt michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 2

int versus Integer int a, b; Integer aa, bb; a = 7; aa = new Integer ( 7 ) ; b = 7; bb = new Integer ( 7 ) ; i f ( a==b) System. out. println ( l i k ) ; else System. out. println ( ulik ) ; i f ( aa==bb) System. out. println ( l i k ) ; else System. out. println ( ulik ) ; Vi får utskriften: lik ulik Vi skjønner lettere hvorfor ved å tegne en figur av datastrukturen, og undersøke hvordan == og.equals() er definert. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 3

int versus Integer int 7 a 7 Integer aa int 7 b 7 Integer bb == virker tilsynelatende forskjellig for variable av primitive typer (som int) og referansevariable. a==b evalueres til true hvis a og b har samme verdi. a og b har samme verdi (7). aa og bb har ikke samme verdi. (Hint: når variablene er pekere, les == som «peker på det samme som».) Pekervariable inneholder adressen til objektet i primærlageret. Forskjellige objekter har forskjellige adresser og variablene får derfor forskjellige verdier. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 4

==,.equals() i f ( a == b) Hva blir utskriften av dette System. out. println ( l i k ) ; programmet når datastrukturen ser else System. out. println ( ulik ) ; ut som følger: i f (b == c ) System. out. println ( l i k ) ; String "tre" "fire" else System. out. println ( ulik ) ; a i f ( a. equals (b ) ) System. out. println ( l i k ) ; String "tre" else System. out. println ( ulik ) ; i f ( a. equals ( c ) ) System. out. println ( l i k ) ; else System. out. println ( ulik ) ; b String c String d michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 5

Lenkede lister hvorfor? små mengder (av objekter) ukjent antall (få til noen) varierende antall under kjøring usortert hvis mange objekter: enkel innsetting og uttaking (lifo, fifo) sjelden/aldri søke ut bestemte objekter michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 6

Lenkede lister hvorfor? I INF1010 først og fremst fordi vi skal kunne lage (enkle) datastrukturer med pekere og for at vi skal forstå og selv kunne lage programpakker som Javas Class LinkedList eller Class HashMap. To grunnleggende måter (i Java og andre programmeringsspråk) å håndtere mengder av objekter, enten i et array, eller ved hjelp av lenke-strukturer (f.eks. lenkelister og trær). michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 7

Klassehierarki à la oblig1 class Person { LenkeListe venner ;..... } class { ; Person p; } class LenkeListe { førstelistee, sistelistee ; } void settinn ( le ) { } finn ( String navn) { }...... michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 8

Liste med 4 personer. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 9

Generalisering av lista class { ; Object obj ; } class LenkeListe { førstelistee, sistelistee ; void settinn ( Object o ) { } finn ( String navn) { }...... } Listeelementene kan peke på objekter av hvilken som helst klasse michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 10

Generalisering av lista Object Object Object førstelistee obj obj obj michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 11

Generisk liste med indre klasse class LenkeListe<E> { class { ; E data ; } } førstelistee, sistelistee ; void settinn ( E e ) { } finn ( E pekerpaaobjektliktdette ) { }...... Lenkeliste <Person> personliste = new LenkeListe <Person> ( ) ; Lenkeliste <Ord> ordliste = new LenkeListe <Ord> ( ) ; michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 12

Tilbake til listestrukturen Vi ser bare på listeelementene og hvordan disse kan manipuleres. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 13

Noen metoder kan flyttes til listeelementene fle void settinnsist(...) taut(...) Lliste lista michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 14

Innsetting sist objektorientert måte Ideen er at settinnmetoden er definert inne i listeelementklassen, og at objektet som skal settes inn (pekt på av parameteren e) sendes videre til objekt (!= null) ved å kalle på samme metode i objekt, inntil man når slutten ( == null). class { ; // kan peke på listeelement } void settinnsist ( e ) { i f ( == null ) = e ; else. settinnsist ( e ) ; } // andre metoder og variable Bruk av «sistepeker» er enklere. Motivasjon for å gjøre det slik ser vi når vi kommer til binære søketrær. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 15

I metoden i første listeelement void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e){ if ( == null) = e; else.settinnsist(e); } michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 16

I metoden i andre listeelement void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e){ if ( == null) = e; else.settinnsist(e); } michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 17

I metoden i tredje listeelement void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e) e void settinnsist( e){ if ( == null) = e; else.settinnsist(e); } michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 18

Ferdig. Ingen metode kalt void settinnsist( e) void settinnsist( e) void settinnsist( e) void settinnsist( e) e e e e void settinnsist( e){ if ( == null) = e; else.settinnsist(e); } michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 19

Sorterte lister (f.eks. alfabetisk) Fordel: Enklere/raskere å finne objekter (særlig hvis det vi leter etter ikke er i lista). Ulempe: Mer komplisert å sette inn Ville det være hensiktsmessig å bruke en sortert lenket liste med ett objekt pr. person for å lage en database for Kinas (1.400.000.000 innb.) folkeregister? michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 20

Binære søketrær Trær er en spesiell form for datastruktur (minner om trær med forgreninger). En liste er et unært tre, dvs. maks en gren (peker) i en forgrening. Et binært tre har maksimalt to grener i en forgrening. Et søketre er et tre hvor objektene er organisert for å optimalisere søking, gjenfinning. I INF1010 vil bruke begrepene tre, binærtre eller søketre og alltid mene et binært søketre med mindre det eksplisitt sies noe annet. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 21

Hvorfor binære søketrær Hvis treet bygges riktig opp, er det mye, mye raskere å finne igjen et bestemt objekt. Vi beholder lenkestrukturens fleksibiltet, og unngår ulempen lenkelista hadde med mange elementer. I stedet for en peker, har binærtreet to, og for å holde dem fra hverandre, kalles de venstre og høyre. Elementene som treet bygges opp av kalles i litteraturen binærtrenode, eller som oftest bare node. Vi kunne gjerne kalt det binærtreelement, men det er litt langt. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 22

Bygge opp et binært søketre klassedefinisjoner class Node { // Object data ; / / peker t i l objektet som hører t i l denne noden // <T> data ; // en bedre mulighet String data ; // identifiserer objektet i dette eksempelet Node venstre, høyre ; // de to pekerne } class Tre { Node rot ; } Den siste klassen holder på hele treet. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 23

Binærtrenode datastruktur ett objekt Node venstre Node høyre martsv Person data martsv martsv Samme objekt tegnet 3 ganger. Nodeobjektet kan peke på et personobjekt. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 24

Binærtrenode datastruktur ett objekt Node venstre Node høyre martsv Object data martsv martsv Samme objekt tegnet 3 ganger. Nodeobjektet kan peke på et hvilket som helst objekt. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 25

Binærtrenode datastruktur ett objekt Node venstre Node høyre martsv data <E> martsv martsv Samme objekt tegnet 3 ganger. Nodeobjektet kan peke på et objekt av type E (generisk). michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 26

Bygge opp et binært søketre innsettingsmetode I dette første eksemplet legger vi settinnmetoden i klassen Node, slik at å sette inn i et binærtreelement (nynode) i hele treet gjøres ved kallet rot.settinnnynode(nynode); Vi forutsetter at objektet data peker på har en metode compareto(), som gir en ordning på objektene (à la String.compareTo()). Gitt to objekter: Object a, b; a.compareto(b) > 0 hvis a > b = 0 hvis a = b < 0 hvis b > a michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 27

class Node { String data ; // identifiserer objektet Node venstre, høyre ; // de to pekerne } settinnnynode (Node nn) { int cmpt = data. compareto(nn. data ) ; i f (cmpt < 0) { // data < nn, nn skal mot høyre i f ( høyre==null ) høyre = nn; else høyre. settinnnynode (nn ) ; } else i f (cmpt > 0) { // data > nn, nn skal mot venstre i f ( venstre==null ) venstre = nn; else venstre. settinnnynode (nn ) ; } // cmpt == 0, her kaster vi nn. } michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 28

Rotkallet (metodekallet i rotobjektet) Node settinnnynode(node nn) rot martsv krigu Node nynode chrifs shaziam rot.settinnnynode(nynode); michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 29

I metoden i objektet «chrifs» Node rot settinnnynode(node nn) martsv krigu Node nynode chrifs shaziam venstre.settinnnynode(nn) michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 30

I metoden i objektet «chrifs» Node rot settinnnynode(node nn) martsv chrifs shaziam krigu Node nynode michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 31

Det nye objektet på rett plass Node rot martsv chrifs shaziam krigu michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 32

Et litt større tre Node tre marishu johnaby ramting daghf kyrrewk odarn thorhw alexso gunnabj simenbu NB! Strukturen avhenger av rekkefølgen objektene settes inn i. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 33

Hva man må vite om grensesnitt før man starter med oblig 2. michael@ifi.uio.no INF1010 17. februar 2011 (uke 7) 34