Algoritmer og Datastrukturer

Like dokumenter
Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

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

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

København 20 Stockholm

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

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

EKSAMEN med løsningsforslag

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

EKSAMEN. Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Algoritmer og Datastrukturer

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

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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:

Algoritmer og Datastrukturer IAI 21899

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

EKSAMEN. Emne: Algoritmer og datastrukturer

Løsningsforslag EKSAMEN

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

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

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

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

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

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

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

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

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

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

UNIVERSITETET I OSLO

INF1010 Binære søketrær ++

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

UNIVERSITETET I OSLO

Binære trær: Noen algoritmer og anvendelser

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

UNIVERSITETET I OSLO

INF2220: Forelesning 2

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Obligatorisk oppgave 1 INF1020 h2005

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

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

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

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

UNIVERSITETET I OSLO

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

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

INF1010 siste begreper før oblig 2

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

Definisjon av binært søketre

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:

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

INF2220: Forelesning 1

Stack. En enkel, lineær datastruktur

Løsningsforslag til INF110 h2001

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

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Løsningsforslag

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

A 1 B 1 D 1 H 1 H 2 D 2 B 2 E 1 E 2 I 1 I 2...

UNIVERSITETET I OSLO

Grunnleggende Datastrukturer

TDT4100 Objektorientert programmering

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Dagens tema INF1010 INF1010 INF1010 INF1010

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

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

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

UNIVERSITETET I OSLO

Lars Vidar Magnusson

INF2220: Forelesning 1

Transkript:

Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Lørdag 15. desember 2001, kl. 09.00-14.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator. Oppgavesettet består av i alt 10 sider, inkludert forside og vedlegg, og er delt i fem hoveddeler som kan løses uavhengig av hverandre. Hver deloppgave er prosentvis vektet. Dette gjenspeiler ikke vanskelighetsgraden, men hvor mye hver enkelt oppgave kommer til å bidra til sluttkarakteren. Hvis ikke annet er angitt, skal programkode skrives i Java, som pseudokode, eller som en kombinasjon. Koden bør være oversiktlig og godt kommentert. Du behøver ikke legge vekt på generelle prinsipper for tilgang til og beskyttelse av data, men kan anta at du har ubegrenset tilgang (friendly access) til alle data og metoder i alle klasseobjekter. Du behøver heller ikke legge vekt på å gjøre koden særskilt robust. Les oppgavetekstene nøye, planlegg arbeidet og disponer tiden før du begynner på besvarelsen. Skriv tydelig! Lykke til! 1

Del 1: Algoritmeanalyse Totalt 20% Oppgave 1.1-20% Under er det beskrevet noen operasjoner på ulike datastrukturer (en tabell er ekvivalent med en Java array). For hver av dem skal du angi arbeidsmengden i O-notasjon, forutsatt at det ikke brukes ekstra hjelpestrukturer. Gjør også rede for eventuelle antagelser og presiseringer. 1. Finne et bestemt element, for eksempel det 7. elementet, i en tabell. 2. Finne et bestemt element, for eksempel nr. 7, i en lenket liste. 3. Skrive ut alle elementene i en enkeltlenket liste i omvendt orden (det siste elementet skrives ut først etc.). 4. Finne et element med en gitt nøkkel i en usortert tabell. 5. Finne et element med en gitt nøkkel i en dobbeltlenket liste. 6. Finne et element med en gitt nøkkel i et binært søketre. 7. Sortere en enkeltlenket liste med reelle tall (float/double). 8. Sortere en tabell med 4242 heltall som alle ligger i intervallet [0 42]. 9. Sortere en tabell med heltall der du vet at 50% av tallene er like. 10. Finne en record med en bestemt nøkkel i en hashtabell. Hvert av delspørsmålene teller likt. Slutt på del 1 Del 2: Trær I Totalt 20% Vi har følgende binærtre: A / \ / \ B C \ / \ D E F Etter en såkalt speiling ser treet ut slik: A / \ / \ C B / \ / F E D En speiling medfører altså at for enhver node i treet vil venstre og høyre subtre bytte plass. Du skal nå implementere to metoder som håndterer slike speilinger. Oppgave 2.1-10% 2

Her skal du implementere en metode som rekursivt bytter om venstre og høyre subtre for alle nodene i treet angitt med referansen rot. Implementer metoden void speile(binnode rot) i klassen BinTre i vedlegget. Eksakt Javakode gir best uttelling. Oppgave 2.2-10% Nå skal du implementere en metode som lager en kopi av et tre som i sin helhet blir en speiling av originalen. Implementer metoden BinNode speiletkopi(binnode rot) i klassen BinTre i vedlegget. Eksakt Javakode gir best uttelling. Slutt på del 2 Del 3: Trær II Totalt 15% Oppgave 3.1-5% Vi har følgende generelle tre: A / \ / \ J B E / \ / H G D / \ / \ C F I Utfør en såkalt levelorder traversering av dette treet. Angi kun rekkefølgen av nodene. Forklar kort og skissemessig hvordan en slik traversering vanligvis implementeres. 3

Oppgave 3.2-10% I vedlegget er det beskrevet en nodeklasse, GenNode,og en treklasse, GenTre, som til sammen representerer et generelt tre, dvs. et tre der hver node kan et vilkårlig antall barn. Merk at det brukes såkalte søskenreferanser, dvs. referanser fra en nodes første barn, til dets andre barn osv. For å angi barna til en node er det da nok å ha en referanse til det første barnet. Fra dette barnet kan vi så gå til det andre, og så til det tredje osv. Søskenreferansen til siste barnet er lik null. Strukturen kan skisseres slik: En annen måte å foreta en levelorder traversering er å la hver node ha en referanse til den neste noden på sitt nivå. Hvis noden er den siste i et nivået, peker referansen på den første noden i neste nivå. Når disse referansene er korrekt satt, gjennomføres traversering ved å følge pekerne til vi kommer til den siste noden. Denne noden sin nestereferanse er lik null. Se figuren under. Nå skal du lage en metode som setter nestereferansene til å peke på riktige noder. Implementer metoden void settnestereferanser() i klassen GenTre i vedlegget. Du skal anta at alle søskenreferansene er korrekt satt. Presis pseudokode gir like god uttelling som eksakt Javakode. Slutt på del 3 4

Del 4: Rekursjon Totalt 20% Et rektangulært brett med ruter er representert ved en boolsk matrise boolean brett[m][n]. En rute brett[i][j] er sort hvis verdien er lik true, og hvit ellers. Antall kolonner er lik M, og antall rader er lik N. Du skal nå studere en algoritme arbeider med et slikt brett som input. Hovedrutinen ser slik ut: int hokus ( boolean brett[][] ) { int antall = 0; for (int i = 0; i < brett.length; i++ ) { for (int j = 0; j < brett[i].length; j++ ) { if ( brett[i][j] ) { antall += pokus ( brett, i, j ); return antall; Den rekursive funksjonen pokus er definert som følger: int pokus ( boolean brett[][], int i, int j ) { brett[i][j] = false; if ( ok (brett, i-1, j ) ) pokus ( brett, i-1, j ); if ( ok (brett, i+1, j ) ) pokus ( brett, i+1, j ); if ( ok (brett, i, j-1) ) pokus ( brett, i, j-1 ); if ( ok (brett, i, j+1) ) pokus ( brett, i, j+1 ); return 1; Vi har også en hjelpefunksjon ok: boolean ok ( boolean brett[][], int i, int j ) { if ( i < 0 j < 0 i >= brett.length j >= brett[i].length!brett[i][j] ) { return false; return true; 5

Oppgave 4.1 10% Gitt følgende 3x4 brett: 3 2 1 0 0 1 2 Håndeksekver metoden for med dette brettet som input. Du kan stoppe når telleren i blir lik 2. Bruk figurer som du synes illustrerer tilstander og utvikling på en god måte. Oppgave 4.2 10% Hva gjør denne algoritmen? Ta utgangspunkt i håndeksekveringen i 4.1, og forklar så presist som mulig hvordan algoritmen virker. Hva er algoritmens orden? Gi en kort begrunnelse. Slutt på del 4 Del 5: Nettverk Totalt 25% Et rettet nettverk kan representeres ved en naboliste, for eksempel slik: Node: A B C D E Naboer: B, C E, C, A D D Oppgave 5.1 5% Tegn nettverket som er representert i lista over, slik at relasjonene mellom nodene kommer tydelig fram. 6

Oppgave 5.2 5% Foreta en dybde først traversering med start i A. Angi både rekkefølgen av nodene og traverseringstreet 1. Oppgave 5.3 5% Foreta en bredde først traversering med start i A. Angi både rekkefølgen av nodene og traverseringstreet. Oppgave 5.4 10% Vi har et urettet nettverk der nodene representerer henholdsvis sort og hvitt. En såkalt sky er en samling sorte noder, der vi fra alle nodene i skyen kan finne en vei med bare sorte noder til en hvilken som helst av de andre nodene i skyen. Nedenfor ser du et eksempel på et nettverk med tre skyer. Beskriv en metode som finner ut hvor mange skyer det er i et gitt nettverk. Anta at hver node har en boolsk variabel farge som er true for sorte noder og false for hvite. Det er tilstrekkelig å bruke klartekst eller pseudokode. Angi metodens kompleksitet inkludert en kort begrunnelse. Slutt på del 5 1 Et traverseringstre består av nodene som inngår i traverseringen. Barna til en gitt node i treet er de av denne nodens naboer man går til under traverseringen. 7

Vedlegg De følgende klassene og metodene brukes i enkelte oppgaver. Du står fritt i å legge til ekstra funksjonalitet i form av datamedlemmer og metoder. Oppgave 2: class BinNode Klassen BinNode representerer en node i et binærtre. class BinNode { // Referanse til barna BinNode venstre; BinNode høyre; char tegn; // Konstruktør, bør brukes i oppgave 2.2 // Ferdig implementert BinNode(char t, BinNode v, BinNode h) { tegn = t; venstre = v; høyre = h; Klassen BinTre inneholder metoder som arbeider på binære trær. class BinTre { // Skal implementeres i oppgave 2.1 // Metoden bytter om på venstre og høyre subtre // i denne noden og i alle etterfølgende noder // Metoden skal være rekursi void speile(binnode rot) { // Skal implementeres i oppgave 2.2 // Metoden lager en speilet kopi av dette treet // og returnerer rota til kopien // Metoden skal være rekursiv BinNode speiletkopi(binnode rot) { 8

Oppgave 3: class GenNode Klassen GenNode representerer en node i et generelt tre. class GenNode { // Referanse til første barn GenNode barn; // Referanse til evt. neste søsken // Hvis denne noden er den siste i rekken av søsken, // er referansen lik null GenNode søsken; // Referanse til neste node på samme nivå i treet // Hvis denne noden er den siste på sitt nivå, // vil neste være første node på etterfølgende nivå // For siste node på siste nivå er neste lik null GenNode neste; Klassen GenTre representerer et generelt tre. class GenTre { // Referanse til rota i treet GenNode rot; // Skal implementeres i oppgave 3.2 // Du skal anta at alle søskenreferansene er korrekt satt // og at rot ikke er lik null void settnestereferanser() { 9

Generelle datastrukturer // Følgende datastrukturer kan anses som ferdig implementert // og kan brukes ved eventuelt behov // Generelt interface for lister public interface Liste { boolean ertom (); void nullstill (); // Vanlig kø public class Fifo implements Liste { void settinn (Object x) { // Setter inn Object taut () { // Fjerner Object sjekkfront () { // Se på frontelementet // Stack public class Lifo implements Liste { void push (Object x) { // Setter inn Object pop () { // Fjerner Object sjekkfront () { // Se på frontelementet Slutt på oppgavesettet 10