Algoritmer og Datastrukturer



Like dokumenter
Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer IAI 21899

Algoritmer og Datastrukturer

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

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

Løsningsforslag EKSAMEN

EKSAMEN med løsningsforslag

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

Algoritmer og Datastrukturer

EKSAMEN. Algoritmer og datastrukturer

KANDIDATEN MÅ SELV KONTROLLERE AT OPPGAVESETTET ER FULLSTENDIG

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Norges Informasjonsteknologiske Høgskole

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

UNIVERSITETET I OSLO

EKSAMEN. Emne: Algoritmer og datastrukturer

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

Algoritmer og Datastrukturer

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

Algoritmeanalyse. (og litt om datastrukturer)

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

København 20 Stockholm

Algoritmer - definisjon

Oppgave 1. Sekvenser (20%)

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

UNIVERSITETET I OSLO

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

MED TIDESTIMATER Løsningsforslag

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Ordliste. Obligatorisk oppgave 1 - Inf 1020

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

EKSAMEN. Emne: Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

UNIVERSITETET I OSLO

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

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

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

UNIVERSITETET I OSLO

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

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:

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

EKSAMEN. Objektorientert programmering

TDT4100 Objektorientert programmering

INF1010 notat: Binærsøking og quicksort

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF Seminaroppgaver til uke 3

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Datastrukturer for rask søking

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Kapittel 9: Sortering og søking Kort versjon

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Hva er en algoritme? Har allerede sett på mange algoritmer til nå i IT1101. Forholdet mellom en algoritme og et program. Algoritme program prosess

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

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

UNIVERSITETET I OSLO

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

OPPGAVE 5b og 8b Java Kode

Norges Informasjonsteknologiske Høgskole

KONTINUASJONSEKSAMEN

Korteste vei i en vektet graf uten negative kanter

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Løsningsforslag til INF110 h2001

INF1010 Sortering. Marit Nybakken 1. mars 2004

Eksamen Objektorientert Programmering 2013

Algoritmer og datastrukturer Eksamen 22. februar 2011

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Transkript:

Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator. Oppgavesettet består av i alt 12 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! Del 1: Binære søketrær Totalt 2% 1

Tre nr. 1 og tre nr. 2 er binære søketrær. Oppgave 1.1-5% Tre nr. 1: Sett inn en node med verdi F i tre nr. 1. A B D C E Oppgave 1.2-5% Anta at vi ønsker at tre nr. 1 skal være AVL-balansert etter innsetting av en ny node. Forklar hvorfor treet etter innsetting av F (oppgave 1.1) ikke er AVL-balansert. Foreta en reparasjon av tre nr. 1 etter innsetting av F. Tegn/kommenter hvert trinn i prosessen. Oppgave 1.3-5% Tre nr. 2: Fjern noden med verdi D i tre nr. 2. D B F A C E O G P Oppgave 1.4-5% Anta at vi ønsker at tre nr. 2 skal være AVL-balansert etter fjerning av en node. Forklar hvorfor treet etter fjerning av D (oppgave 1.3) ikke er AVL-balansert. Foreta en reparasjon av tre nr. 2 etter fjerning av D. Tegn/kommenter hvert trinn i prosessen. Slutt på del 1 Del 2: Sortering Totalt 2% En automatisk værstasjon måler lufttemperaturen. Hver måling er nummerert fortløpende etter hvert som de kommer inn, og blir lagret i en indeksert tabell. Måleren er følsom i intervallet 4 til +4 grader. Temperaturer under/over dette gir henholdsvis 4 og +4 grader målt verdi. I vedlegget er det 2

plottet utdrag av en slik serie målinger. I begge deloppgavene kan du anta at dataene du skal bearbeide får plass i internminnet. Oppgave 2.1-1% I denne oppgaven skal du lage en metode som sorterer tabeller som inneholder temperaturmålinger for hvert 1. sekund gjennom et helt år. Ved sorteringen skal du bruke en nøyaktighet på.1 grader, dvs. at temperaturene skal avrundes til 2 desimaler under sorteringen. Ved like temperaturer (etter avrunding) skal det sorteres på stigende løpenummer. Her er et utdrag fra en slik tabell: Løpenr. (indeks) 42 43 44 45 46 47 48 49 Temperatur 2.1421 2.1343 2.1329 2.299 2.1143 2.1239 2.932 2.722 Den sorterte sekvensen blir slik: Løpenr. 45 49 48 46 47 43 44 42 Temperatur 2.3 2.7 2.9 2.11 2.12 2.13 2.13 2.14 Merk at 43 og 44 er like etter avrunding, og dermed kommer 43 før 44 selv om originalmålingene skulle tilsi det omvendte. Implementer metoden sorteravrundet som er skissert i vedlegget. Metodens kompleksitet bør være lavere enn O(NlogN). Eksakt Javakode gir best uttelling. Angi kompleksiteten av metoden i O- notasjon. Oppgave 2.2-1% Neste metode går ut på å sette inn måledataene fortløpende i en allerede sortert struktur. I dette tilfellet er det snakk om langt hyppigere målinger, ca. 1 i sekundet. Det blir derfor snakk om svært store datamengder, og metoden for å oppdatere en slik struktur (sette inn en ny måling) må være så rask som mulig. Denne gangen skal det sorteres på originalverdiene (altså ikke avrundet). Målingene blir foretatt med double presisjon, og du kan anta at ingen målinger er nøyaktig like. Drøft ulike kombinasjoner av datastrukturer og algoritmer som kan anvendes i dette tilfellet, med spesiell vekt på arbeidsmengde i O-notasjon. Uansett valg av datastruktur/algoritme bør det være mulig å oppnå en effektivitetsgevinst ved å ta hensyn til tidligere innsettinger. Lag en skisse (klartekst, ikke kode) av en mest mulig effektiv metode for innsetting av temperaturmålinger i en allerede sortert struktur. Beskriv både datastrukturen og algoritmen, og beregn arbeidsmengden i O-notasjon. Slutt på del 2 3

Del 3, Binærheap Totalt 3% Oppgave 3.1 5% Definisjonen av en binærheap innebærer bla.a. annet at den kan representeres som et komplett binærtre. Hvis vi nummerer nodene i et slikt tre ifølge levelorder, kan vi for enhver node beregne nummeret til foreldernoden og begge barna. Vi antar at nummeret på rota er (null), og at node nr. k ikke er rota i treet og at den har to barn. Hva er nummeret til foreldernoden til node k? Hva er nummeret til venstre barn av node k? Hva er nummeret til høyre barn av node k? Oppgave 3.2 1% Nedenfor finner du en binærheap representert i en tabell: N E M T I R O G L A Tegn det korresponderende binærtreet. Oppgave 3.3 15% I vedlegget finner du et utkast til klassen BinHeap som representerer en binærheap ved hjelp av et standard binærtre med referanser til venstre/høyre barn. Nodene i treet er av typen Node, som du også finner beskrevet i vedlegget. Klassen BinHeap inneholder en metode som bygger opp treet ut fra en heap gitt på tabellform (char[] tabell, jfr. forrige oppgave). Implementer metoden lagtre i klassen BinHeap. Metoden skal benytte den rekursive metoden laggrein, som du også skal implementere. Eksakt kode gir best uttelling. Slutt på del 3 4

Del 4, Algoritmeanalyse Totalt 2% I denne delen skal vi se litt på to sorteringsalgoritmer, lrsort og rimisort. Begge algoritmene sorterer en tabell av vilkårlige heltall i stigende rekkefølge. I vedlegget finner du resultatene av å måle kjøretidene for algoritmene på tabeller av varierende størrelse med tilfeldig sammensatt innhold. Som en sammenlikning er det også tatt med måledata fra tilsvarende kjøringer med standard innsettingssortering. Oppgave 4.1 1% Bruk måledataene til å beregne kompleksiteten i O-notasjon på algoritmene. Oppgave 4.2 1% I vedlegget finner du implementasjonen av de to sorteringsalgoritmene, lrsort og rimisort. Forklar hvordan algoritmene virker, og beregn teoretisk kompleksitet i O-notasjon ut fra implementasjonen. Kommenter forholdet mellom de praktiske testresultatene i oppgave 4.1 og dine teoretiske betraktninger. Slutt på del 4 5

Del 5, Nettverk Totalt 1% Oppgave 5.1-1% Under ser du en skjematisk framstilling av et rettet, vektet nettverk. En * i enden av en kant angir at retningen er mot stjernen. En stjerne i begge ender angir en dobbelt kant. Vektene er angitt som heltall. Nodene er merket med store bokstaver. 7 B -----------------------------*D *\ * \ / \ / \ 1 19 / 3 \ / \ / * 9 / * 2 C--------------*F*-----*G * \ / 2 / / / 4 \ 15 / 3 / / / * * A*--------------E 9 Anvend Dijkstras algoritme for å finne korteste vei fra node A til alle de andre nodene i nettverket. For hvert trinn i algoritmen skal du angi verdien på avstandsfunksjonen for hver node, nodens forrige -referanse, hvilken node som er under behandling, denne nodens naboer og nodene som er ferdigbehandlet. Skriv ut den korteste veien fra A til G. Slutt på del 5 6

Vedlegg Oppgave 2: Eksempel på værdata Her har vi plottet temperaturer målt gjennom et halvt år, over et døgn og gjennom en time. Dette skal ikke brukes direkte i oppgaven, men er ment som en veiledende illustrasjon. Temperaturer 1. halvår 2, målt kl. 12: Temperatur 3 25 2 15 1 5-5 -1 1-Jan 21-Jan 1-Feb 1-Mar 21-Mar 1-Apr 3-Apr 2-May 9-Jun 29-Jun Temperaturer 17/5 2 Temperatur 24 22 2 18 16 14 12 1 : 2:24 4:48 7:12 9:36 12: 14:24 16:48 19:12 21:36 : Temperaturer 17/5 2, kl 6: - 7: 25 Temperatur 2 15 6: 6:7 6:14 6:21 6:28 6:36 6:43 6:5 6:57 7

Oppgave 2: class TempSort Klassen TempSort inneholder metoden sorteravrundet som skal implementeres i oppgave 2.1. Du står fritt til å legge til flere variabler og/eller metoder i denne klassen. class TempSort { // Metoden tar i mot en usortert tabell med double presisjon og // returnerer en float tabell med sorterte temperaturer slik // det er beskrevet i oppgaveteksten. float[] sorteravrundet(double[] tab) {...... Oppgave 3: class Binheap og class Node Klassene brukes til å representere en binærheap med nodereferanser. To av metodene skal implementeres ferdig i oppgave 3.3. Du står fritt til å legge til flere variabler og/eller metoder i klassen BinHeap. class BinHeap { // Denne skal implementeres i oppgave 3.3 // ved hjelp av den rekursive laggrein void lagtre(char[] tre) {... // Rekursiv metode som bygger opp et subtre fra en tabell // Skal implementeres i oppgave 3.3 Node laggrein(/*velg selv passende parametere*/) {...... Node rot;... 8

// Representasjon av Node // Brukes i klassen BinHeap // OBS: Ferdig implementert og klar til bruk class Node { char verdi; Node(char c, Node v, Node h) { verdi = c; vbarn = v; hbarn = h; Node vbarn; Node hbarn; char verdi; Oppgave 4: Tidsmålinger For hver av algoritmene lrsort, rimisort og innsettingssortering har vi tatt tiden det har tatt å kjøre algoritmen på tilfeldig sammensatte tabeller av lengde N. For å få fram egenskapene til funksjonen T(N), dvs. tiden det tar å kjøre algoritmen for et gitt antall elementer N, har vi plottet på tre ulike måter (x-aksen representerer alltid antall elementer, N): 1. Med T(N) som verdier på y-aksen, dvs. de målte verdiene 2. Med T(N) / (N*log 2 N) på y-aksen 3. Med T(N) / N 2 på y-aksen Det viser seg at lrsort er betydelig raskere enn både rimisort og innsettingssortering. Derfor har vi for hver plottemetode i tillegg behandlet lrsort for seg selv. 9

Y-AKSE: T(N), X-AKSE: N rimisort Insettingssortering lrsort lrsort 25 12 2 1 15 8 1 6 5 4 2-5 5 1 5 1 Y-AKSE: T(N) / (N*log 2N), X-AKSE: N rimisort Insettingssortering lrsort lrsort.2.5.15.4.1.5.3.2.1 -.5 5 1 -.1 5 1 Y-AKSE: T(N) / N 2, X-AKSE: N rimisort Insettingssortering lrsort lrsort.25.12.2.1.15.8.1.6.5.4.2 -.5 5 1 5 1 1

Oppgave 4: class Sort Klassen implementerer to sorteringsalgoritmer som sorterer en heltallstabell i stigende rekkefølge. class Sort { void lrsort (int[] tab) { for(int i = tab.length / 2; i >= ; i--) { flytt (tab, i, tab.length); for(int i = tab.length - 1; i > ; i--) { bytt (tab,, i); flytt (tab,, i); void flytt(int[] tab, int i, int n) { int venstre; int tmp; for(tmp = tab[i]; (2*i) + 1 < n; i = venstre) { venstre = (2*i) + 1; if( venstre!= n - 1 && tab[venstre] < tab[venstre+1]) { venstre++; if(tmp < tab[venstre]) { tab[i] = tab[venstre]; else break; tab[i] = tmp; 11

void rimisort (int[] tab) { hokuspokus(tab,, false); void hokuspokus(int[] tab, int i, boolean slutten) { if (i == tab.length-1) { return; if (!slutten) { hokuspokus (tab, i+1, false); if (tab[i] > tab[i+1]) { bytt (tab, i, i+1); hokuspokus(tab, i+1, true); // Felles metode som brukes i begge sorteringsalgoritmene void bytt(int[] tab, int i1, int i2){ int tmp = tab[i1]; tab[i1] = tab[i2]; tab[i2] = tmp; Slutt på oppgavesettet 12