UNIVERSITETET I OSLO

Like dokumenter
1 Hver node er enten rød eller sort. 2 Rota er sort. 3 En rød node kan bare ha sorte barn

UNIVERSITETET I OSLO

København 20 Stockholm

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Eksamen 22. februar 2011

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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.

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

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

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

Oppgave 1. Sekvenser (20%)

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

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

INF1010 Binære søketrær ++

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

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

UNIVERSITETET I OSLO

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Eksamen

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

Eksamen IN1010/INF1010 våren 2018

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

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

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

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag til INF110 h2001

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

UNIVERSITETET I OSLO

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

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

KONTINUASJONSEKSAMEN

Liste som abstrakt konsept/datatype

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

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

INF Algoritmer og datastrukturer

Notater til INF2220 Eksamen

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Transkript:

BOKMÅL Eksamen i : UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet INF1020 Algoritmer og datastrukturer Eksamensdag : Fredag 15. desember 2006 Tid for eksamen : 15.30 18.30 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler : 5 sider 1 side Alle trykte og skrevne Les gjennom hele oppgaven før du begynner å løse den. Kontroller at oppgavesettet er komplett. Dersom du savner opplysninger i oppgaven, kan du selv legge dine egne forutsetninger til grunn og gjøre rimelige antagelser. Gjør i så fall rede for forutsetningene og antagelsene du gjør. Du kan uten videre forklaring gjøre bruk av abstrakte datatyper som er gjennomgått i kurset når du trenger dem. Eksempler på abstrakte datatyper du kan bruke er: Stakk, kø, liste, heap. Husk å skrive såpass hardt at besvarelsen blir mulig å lese på alle gjennomslagsarkene, men ikke legg andre deler av besvarelsen under når du skriver. Over hver oppgave er det angitt hvor stor vekt oppgaven har ved sensur. Husk å disponere tiden i forhold til dette. Oppgave 1 (10%) Du skal i denne oppgaven tegne trær på bakgrunn av følgende sekvens av tall: 1 10 2 9 3 8 4 7 5 6 Tegn trærne du får dersom du ut fra sekvensen (i angitt rekkefølge) bygger opp henholdsvis 1. Et binært søketre 2. Et B-tre av orden 3 (M=3) og L=2 (dette kalles også et 2-3-tre) Du skal i begge tilfelle bare tegne treet du får til slutt.

Oppgave 2 (20%) - 2 - Fra pensum vet vi at rød-sorte trær tilfredsstiller 4 fargekrav: 1. Hver node er enten rød eller sort 2. Rota er sort 3. En rød node kan bare ha sorte barn 4. Alle stier fra rota til en bladnode inneholder nøyaktig like mange sorte noder. Du skal i denne oppgaven skrive en metode som finner informasjon om fargede trær til bruk i feilsøking. Anta at trærne tilfredsstiller følgende interface: interface RedBlack { boolean red(); RedBlack getvsub(); RedBlack gethsub(); \\ true hvis rotnoden er rød, false hvis sort \\ venstre subtre \\ høyre subtre Informasjonen du innhenter om et tre skal ligge i et objekt av følgende klasse: class Count { boolean lastred; boolean valid; int black; Count(){ black = 0; lastred = false; valid = true; \\ true hvis rotnoden i treet er rød \\ true hvis fargekrav 3 og 4 er oppfylt \\ antall sorte noder på grenen med \\ flest sorte noder Du skal kode en metode check som returnerer informasjon om et tre t. Merk at hvis treet er null, er det pr. konvensjon et gyldig rød-sort tre. Et eksempel på hva vi kan bruke metoden til er gitt under, der vi tester om alle fargekravene er oppfylt for et tre. boolean okredblack( RedBlack t ){ if( t!=null && t.red() ) return false; return( check(t).valid ); Count check( RedBlack t){ // Her er din kode Oppgave 3 (15%) Du skal konfigurere et trådløst sensornettverk slik at alle nodene i nettverket skal kunne kommunisere med alle andre noder. Kommunikasjonen mellom to noder trenger ikke være direkte, det er tilstrekkelig at de kan kommunisere indirekte via andre noder. Hver node har en sender som drives av et batteri. Med konfigurering menes at vi skal bestemme hvor mye effekt en nodes sender skal stilles inn på. Effekten til senderen skal fastsettes en gang for alle. Nettverket skal konfigureres slik at det bruker minst mulig effekt fra batteriene samlet sett (dvs. når effektforbruket for alle nodene summeres).

- 3 - Det finnes en tabell for hver node som angir hvor mye effekt man må bruke fra batteriet for å kunne nå hver enkelt av de andre nodene direkte, dvs. uten å gå via mellomliggende noder. For eksempel har node A en tabell der det fremgår at det trengs 20 mw for å nå node B direkte, 33 for å nå node C direkte, osv. (dvs. at hvis node A må kunne nå C direkte, skal senderen minst settes til 33 mw). Effektforbruket er symmetrisk mellom nodene, slik at tabellen for node B angir 20 mw til A osv. Formuler oppgaven som et grafteoretisk problem og forklar hvordan du vil løse det, gjerne med referanse til en kjent algoritme fra pensum. Merk at algoritmen skal terminere med en tabell som viser hva senderen til hver node skal stilles inn på. Oppgave 4 (10%) Gitt følgende interface fra Java.util: public interface List<AnyType> extends Collection<AnyType> { AnyType get( int idx ); AnyType set( int idx, AnyType newval ); void add( int idx, AnyType x ); void remove( int idx ); ListIterator<AnyType> listiterator( int pos ); Her angir idx en indeks i listen. Når vi setter inn et objekt x på indeks idx med add-metoden, øker indeksen til samtlige objekter som ligger etter x i listen. På samme måte minker indeksen med 1 for alle objekter med indeks større enn idx når vi fjerner objektet med indeks idx fra listen. For hver av følgende datastrukturer, angi om den er egnet eller uegnet som datastruktur i en klasse som implementerer liste-interfacet. Dersom den er egnet, angi kompleksiteten til get og add-operasjonene. Dersom den er uegnet, begrunn kort hvorfor. 1. Lenket liste 2. Array 3. Åpen hashing 4. Binært søketre Oppgave 5 (45%) Denne oppgaven refererer til koden for klassene Node og Graf i vedlegget. 5 a Lag en tegning av grafen representert ved følgende Graf-objekt: g = new Graf( 4 ); g.adderkant( g.node(0), g.node(1) ); g.adderkant( g.node(1), g.node(2) ); g.adderkant( g.node(3), g.node(1) ); g.adderkant( g.node(2), g.node(3) ); Kan du foreta en topologisk sortering av grafen? Hvis svaret er ja, angi en topologisk sortering. Hvis svaret er nei, begrunn hvorfor grafen ikke kan gis en topologisk sortering.

- 4-5 b Du skal nå kode en inkrementell grafbygger. Dette er en klasse med metoder for å bygge opp en rettet, asyklisk graf (DAG) ved å legge til kant for kant. Den interne datastrukturen i klassen skal være en representasjon av en topologisk sortering av grafen. Observer spesielt: I kodeskissen til class InkGrafBygger gjengitt på neste side foreslår vi å bruke en ArrayList til den topologiske sortering, men du står fritt til å bruke en annen datastruktur (for eksempel en array av type Node[]) dersom du heller vil det. class Node har en variabel nr som angir nodens plassering i den topologiske sortering. Konstruktøren til InkGrafBygger mottar en graf som ikke har noen kanter. Oppgaven er å kode metoden adderkant i class InkGrafBygger. Forbetingelse til metoden er at pos er en topologisk sortering av grafen. Denne invarianten skal også holde etter at din metode er avsluttet. Din metode skal ikke legge til den nye kanten (fra node fra til node til) dersom dette vil gjøre grafen syklisk. I så fall skal metoden returnere false. I motsatt fall skal kanten legges til og metoden returnere true. Som eksempel på bruk av class InkGrafBygger forsøker vi å bygge opp grafen i oppgave 5 a: InkGrafBygger eks = new InkGrafBygger( new Graf( 4 ) ); System.out.println( eks.adderkant(0,1) ); System.out.println( eks.adderkant(1,2) ); System.out.println( eks.adderkant(3,1) ); System.out.println( eks.adderkant(2,3) ); Disse kodesetningene genererer følgende utskrift: true true true false Merk spesielt at når nodene ligger i en topologisk sortering, vil alle kantene ut fra en node A gå til noder som ligger etter A i den topologiske sorteringen. Dvs. at hvis vi skriver en topologisk sortering fra venstre mot høyre og tegner kantene, går ingen piler bakover. For grafen bygget opp fra setningene over kan en topologisk sortering med kantene tegnet inn se slik ut: 0 3 1 2 Det kan være lurt å tegne figurer som viser ulike tilfeller som din kode må ta hensyn til, og gjerne også figurer som viser hvordan du har løst oppgaven. Dette er spesielt viktig dersom du ikke får tid til å skrive fullstendig kode! Legg vekt på at løsningen din blir så effektiv som du klarer!

- 5 - class InkGrafBygger { List<Node> pos = new ArrayList<Node>(); Graf g; InkGrafBygger( Graf g) { this.g = g; // legg nodene i den kantløse startgrafen inn i en topologisk sortering for( int i=0; i<g.size(); i++ ){ pos.add( i, g.node(i) ); pos.get(i).nr = i; boolean adderkant( int idfra, int idtil ){ return adderkant( g.node(idfra), g.node(idtil) ); boolean adderkant( Node fra, Node til ){ // Her kommer din kode Slutt oppgavetekst

Vedlegg - 6 - class Node implements Comparable{ int id; // id er navnet på noden int nr = UDEFINERT; // nr angir nummer i den topologiske sortering final int UDEFINERT = -1; List<Node> etterf = new ArrayList<Node>(); // etterf angir nabolisten Node( int id ){ this.id = id; void adderkant( Node nynabo ){ etterf.add( 0, nynabo ); public int compareto( Object o ){ Node n = (Node) o; if( nr == n.nr ) return 0; if( nr < n.nr ) return -1; return 1; class Graf implements Iterable<Node> { List<Node> noder = new ArrayList<Node>(); Graf( int antallnoder ){ for( int i=0; i<antallnoder; i++) noder.add( i, new Node( i ) ); Node node( int i ){ return noder.get( i ); void adderkant( Node fra, Node til ){ fra.adderkant(til); int size() { return noder.size(); public java.util.iterator<node> iterator(){ return noder.iterator();