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

Like dokumenter
UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF2220: Forelesning 2

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer. Dagens plan

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

INF2220: Forelesning 2

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

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

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

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

Notater til INF2220 Eksamen

INF Algoritmer og datastrukturer

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

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

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

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

Algoritmer og datastrukturer Løsningsforslag

INF1020 Algoritmer og datastrukturer GRAFER

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

IN Algoritmer og datastrukturer

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

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

Balanserte binære søketrær

... Dagens plan. Prioritetskø ADT

Definisjon av binært søketre

INF Algoritmer og datastrukturer

Algoritmer og Datastrukturer

INF Algoritmer og datastrukturer

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

Algoritmer og Datastrukturer

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

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

Det matematisk-naturvitenskapelige fakultet

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

KONTINUASJONSEKSAMEN

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

Algoritmer og Datastrukturer IAI 21899

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

Korteste vei i en vektet graf uten negative kanter

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

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

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

INF2220: Time 4 - Heap, Huffmann

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

UNIVERSITETET I OSLO

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

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

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

PG4200 Algoritmer og datastrukturer Forelesning 7

Lars Vidar Magnusson

København 20 Stockholm

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

Løsningsforslag til INF110 h2001

Algoritmer og Datastrukturer

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

Binære trær: Noen algoritmer og anvendelser

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

KONTINUASJONSEKSAMEN

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

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

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

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

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF2220: Forelesning 1

Oppgave 1. Sekvenser (20%)

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

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

Løsningsforslag eksamen INF1020 høsten 2005

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

UNIVERSITETET I OSLO

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

LO118D Forelesning 12 (DM)

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

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

INF2220: Forelesning 1

Algoritmer og datastrukturer Eksamen

Vanlige datastrukturer. I dette lysarksettet

Kap 9 Tre Sist oppdatert 15.03

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF1010 Binære søketrær ++

Algoritmer og Datastrukturer

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

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

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

UNIVERSITETET I OSLO

Transkript:

INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer Oppgave 1 LØSNINGSFORSLAG Betrakt følgende vektede, urettede graf: V 1 V Eksamen i INF100 1. desember 004 V V 4 V 4 V V Ragnar Normann Vi skal bruke V 4 som startnode og bruke Prims algoritme til å lage et minste spenntre Vi skal tegne spenntreet og liste nodene i den rekkefølgen de ble valgt av algoritmen Ark 1 av Eksamen 1.1.004 Eksamen 1.1.004 Ark av INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer Utgangspunktet er: V 1 V V 1 V V V 4 V V V 4 V 4 4 V V V V Hittil valgte noder: V 4, V Hittil valgt node: V 4 Nærmeste nabonode til V 4 er V, så vi velger den og får: V 1 V V V 4 V spenntreet er V V 1 V V V 4 V 4 4 V V V V Hittil valgte noder: V 4, V Hittil valgte noder: V 4, V, V Eksamen 1.1.004 Ark av Eksamen 1.1.004 Ark 4 av

INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer V 1 V V V 4 V V 1 V V V 4 V 4 4 V V V V Hittil valgte noder: V 4, V, V spenntreet er V 1 V 1 V V V 4 V Hittil valgte noder: V 4, V, V, V 1 spenntreet er V V 1 V V V 4 V 4 4 V V V V Hittil valgte noder: V 4, V, V, V 1 Hittil valgte noder: V 4, V, V, V 1, V Eksamen 1.1.004 Ark av Eksamen 1.1.004 Ark av INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer V 1 V V V 4 V 4 V V V 1 V V V 4 V 4 V V Hittil valgte noder: V 4, V, V, V 1, V spenntreet er V V 1 V V V 4 V 4 V V Hittil valgte noder: V 4, V, V, V 1, V, V spenntreet er V V 1 V V V 4 V 4 V V Hittil valgte noder: V 4, V, V, V 1, V, V Hittil valgte noder: V 4, V, V, V 1, V, V, V Eksamen 1.1.004 Ark av Eksamen 1.1.004 Ark av

INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer V 1 V V V 4 V 4 V V En helt riktig besvarelse av oppgave 1 kan se slik ut: Hittil valgte noder: V 4, V, V, V 1, V, V, V a) Spenntreet blir: V 1 V Eneste ikke valgte node er Det endelige spenntreet blir: V V 4 V V 1 V V V V V 4 V 4 b) Rekkefølgen nodene ble valgt i: V V V 4, V, V, V 1, V, V, V, Nodene ble valgt i denne rekkefølgen: V 4, V, V, V 1, V, V, V, Eksamen 1.1.004 Ark av Eksamen 1.1.004 Ark 10 av INF100 Algoritmer og datastrukturer Oppgave a a) Vi skal bygge opp en heap ved å legge inn tallene: 0,,,, 10 og Som kladd tar vi ett tall om gangen 0 INF100 Algoritmer og datastrukturer Oppgave a b) Så skal vi gjøre deletemin to ganger: 0 0 0 0 0 Til slutt legger vi inn og får som svar 0 0 Den siste heapen holder som svar 0 Eksamen 1.1.004 Ark 11 av Eksamen 1.1.004 Ark 1 av

INF100 Algoritmer og datastrukturer MERK: INF100 Algoritmer og datastrukturer Heretter skal vi med «binærtre» mene et objekt av klassen BinTree Oppgave b La n betegne antall noder i heapen, la h betegne høyden på heapen og anta at h = 0 når n = 1 (og at h = 1 når n = 0) a) Ordningskravet : Ingen node kan ha større verdi enn noen av sine barn Strukturkravet : En heap er et komplett binærtre, dvs. at alle nivåer er helt fulle, (muligens) med unntak av siste nivå som skal være fylt fra venstre mot høyre b) h = log n for n 1 c) n min = h for h 0 n max = h+1 1 for h 0 Eksamen 1.1.004 Ark 1 av Oppgave c Vi skal finne antall noder i binærtreet t som har mindre verdi enn c Det gjør vi ved å gå rekursivt gjennom t og telle I tomme trær er antallet 0 Hvis vi finner en node med verdi c, vet vi at ingen av nodene i dette subtreet kan ha mindre verdi enn c, så da avbryter vi rekursjonen Ellers har vi funnet en node som skal telles med, og fortsetter letingen i barna til noden int countless( BinTree t, Comparable c ){ if( t == null ) return 0; if( t.data.compareto( c ) < 0 ) return 1 + countless( t.left, c ) + countless( t.right, c ); else return 0; Eksamen 1.1.004 Ark 14 av INF100 Algoritmer og datastrukturer Oppgave d Vi skal sjekke om et binærtre t tilfredsstiller ordningskravet Vi går rekursivt gjennom t Tomme trær tilfredstiller ordningskravet Ellers sjekker vi om verdien i roten er større enn verdien til noen av barna I så fall tilfredsstiller ikke t ordningskravet Ellers tilfredsstiller t ordningskravet hvis, og bare hvis, både venstre og høyre subtre gjør det boolean isheapordered( BinTree t ){ if( t == null ) return true; if( t.hasleftchild() && t.compareto(t.left) > 0 ) return false; if( t.hasrightchild() && t.compareto(t.right) > 0 ) return false; return( isheapordered(t.left) && isheapordered(t.right) ); INF100 Algoritmer og datastrukturer Oppgave e insertnewnode(comparable c) Vi skal sette inn en ny node med bibehold av strukturkravet Hvis treet er tomt, lager vi en rot Hvis current er et venstrebarn, legges noden inn som høyrebarn til currents forelder Ellers må vi gå oppover i treet til vi kommer til en node som ikke er et høyrebarn Hvis dette er roten, blir den nye noden første node på nytt nivå, og den skal settes inn helt nederst til venstre i treet Ellers skal den nye noden settes inn helt nederst til venstre i denne nodens forelders høyre subtre Før innsetting Etter innsetting Eksamen 1.1.004 Ark 1 av Eksamen 1.1.004 Ark 1 av

INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer private BinTree insertnewnode( Comparable c ){ BinTree parenttonext; //hjelpevariabel BinTree newnode = new BinTree( c ); if( isempty() ) root = newnode; else if( current.isleftchild() ){ newnode.parent = current.parent; newnode.parent.right = newnode; else{ BinTree node = current; while( node.isrightchild() ) node = node.parent; if( node.isroot() ) parenttonext = node.getleftmost(); else parenttonext = node.parent.right.getleftmost(); newnode.parent = parenttonext; parenttonext.left = newnode; current = newnode; size++; return newnode; removelastnode( ) Vi skal fjerne current med bibehold av strukturkravet Hvis current er roten, blir treet tomt, ellers skal vi alltid slette currents forelders peker til current Hvis current er et høyrebarn, blir ny current venstrebarn til gammel currents forelder Ellers må vi gå oppover i treet til vi kommer til en node som ikke er et venstrebarn Hvis dette er roten, blir den nye current noden helt nederst til høyre i treet Ellers blir den nye current noden helt nederst til høyre i denne nodens forelders venstre subtre Etter fjerning Før fjerning Eksamen 1.1.004 Ark 1 av Eksamen 1.1.004 Ark 1 av INF100 Algoritmer og datastrukturer INF100 Algoritmer og datastrukturer private BinTree removelastnode(){ if( isempty() ) return null; // skal aldri forekomme! BinTree returnvalue = current; if( current.isroot() ) root = current = null; else if( current.isrightchild() ){ current.parent.right = null; current = current.parent.left; else { current.parent.left = null; BinTree node = current.parent; while( node.isleftchild() ) node = node.parent; if( node.isroot() ) current = node.getrightmost(); else current = node.parent.left.getrightmost(); size--; return returnvalue; Oppgave f insert(comparable c) Vi legger den nye noden inn på neste ledige plass (nederst) i treet med insertnewnode Så lar vi den nye noden boble opp til den er på rett plass void insert( Comparable c ){ BinTree node = insertnewnode( c ); while(!node.isroot() && node.compareto(node.parent) < 0 ){ swapdata( node, node.parent ); node = node.parent; Eksamen 1.1.004 Ark 1 av Eksamen 1.1.004 Ark 0 av

INF100 Algoritmer og datastrukturer deletemin( ) Først tar vi vare på verdien i roten (returverdien) Så fjerner vi siste node i treet med removelastnode og legger dennes verdi inn i roten Så gjenstår det «bare» å la roten boble ned til den er på rett plass Comparable deletemin(){ Comparable returnvalue = root.data; BinTree temp = removelastnode(); root.data = temp.data; BinTree pointer = root; while( pointer.hasleftchild() ){ BinTree leastchild = pointer.left; if( pointer.hasrightchild() && leastchild.compareto(pointer.right) > 0 ) leastchild = pointer.right; if( pointer.compareto(leastchild) > 0 ) { swapdata( pointer,leastchild ); pointer = leastchild; else break; return returnvalue; Eksamen 1.1.004 Ark 1 av INF100 Algoritmer og datastrukturer Oppgave g Vi skal lage pseudokode for å merge to dynamiske heaper H 1 og H Vi ser først på de to spesialtilfellene (i) H 1 og H har samme høyde, og H 1 har full sisterad H 1 H Ta siste node ut av H, la den bli felles rot for H 1 og H, og la den boble ned til rett plass (ii) H 1 har ett nivå mer enn H, og H har full sisterad H 1 Ta siste node ut av H 1, la den bli felles rot for H 1 og H, og la den boble ned til rett plass I begge tilfelle er tidsforbruket O(log n) Eksamen 1.1.004 Ark av H INF100 Algoritmer og datastrukturer Vi ser så på det generelle tilfellet La n 1 og n betegne antall noder i hhv. H 1 og H Anta, uten tap av generalitet, at n 1 n Den videre strategi er avhengig av høydeforskjellen på H 1 og H : H 1 og H har samme høyde: Flytt noder fra H til H 1 inntil (i) eller (ii) på forrige lysark oppstår Høydeforskjellen er én: Flytt noder fra H 1 til H inntil (i) eller (ii) på forrige lysark oppstår Høydeforskjellen er større enn én: Ta alle nodene ut av H og legg dem inn i H 1 I de to første tilfellene merger vi de to heapene slik det ble beskrevet på forrige lysark Merk at vi alltid fjerner siste node fra en heap slik at metodene vi bruker for å flytte noder fra en heap til en annen er removelastnode og insert Tidsforbruket blir uansett O(n log n 1 ) Eksamen 1.1.004 Ark av