Løsningsforslag, første og ikke helt komplette utkast (småbugs kan forekomme)! EKSAMEN

Like dokumenter
EKSAMEN. Emne: Algoritmer og datastrukturer

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

EKSAMEN med løsningsforslag

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer

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

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

Løsningsforslag EKSAMEN

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

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

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

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 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.

Algoritmer og Datastrukturer IAI 21899

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

Definisjon av binært søketre

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Binære trær: Noen algoritmer og anvendelser

Oppgave 1. Sekvenser (20%)

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

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

Liste som abstrakt konsept/datatype

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

Norges Informasjonsteknologiske Høgskole

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

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

Algoritmer og datastrukturer Løsningsforslag

Løsningsforslag. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

INF1010 notat: Binærsøking og quicksort

UNIVERSITETET I OSLO

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Norsk informatikkolympiade runde

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

Norsk informatikkolympiade runde

Høgskoleni østfold EKSAMEN

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

ALGORITMER OG DATASTRUKTURER

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

EKSAMEN. Oppgavesettet består av 16 oppgaver. Ved sensur vil alle oppgaver telle like mye med unntak av oppgave 6 som teller som to oppgaver.

UNIVERSITETET I OSLO

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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

INF2220: Forelesning 2

Norges Informasjonsteknologiske Høgskole

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

7) Radix-sortering sekvensielt kode og effekten av cache

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

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

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

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

INF2220: Forelesning 2

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

Norsk informatikkolympiade runde

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

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

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

PG4200 Algoritmer og datastrukturer Forelesning 7

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Notater til INF2220 Eksamen

Datastrukturer for rask søking

Kap.8 Sortering og søking sist oppdatert 16.03

ITF20006 Algoritmer og datastrukturer Oppgavesett 7

Selv-balanserende søketrær

Backtracking som løsningsmetode

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

Algoritmer - definisjon

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

Løsningsforslag for eksamen i fag TDT4120 Algoritmer og datastrukturer Tirsdag 9. desember 2003, kl

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

København 20 Stockholm

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Høgskoleni østfold EKSAMEN. Emne: Innføring i programmering

UNIVERSITETET I OSLO

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

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

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

INF1020 Algoritmer og datastrukturer. Dagens plan

Transkript:

1 Løsningsforslag, første og ikke helt komplette utkast (småbugs kan forekomme)! ESAMEN Emnekode: IT2000 000 Dato: 19. mai 2010 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater aglærer: unnar Misund Oppgavesettet består av sider inklusive denne forsiden. ontroller at oppgaven er komplett før du begynner å besvare spørsmålene. I implementasjonsoppgaver gir Java-kode best uttelling, men godt dokumentert pseudo-kode kan også brukes. jør dine egne forutsetninger hvis du føler behov for det. Oppgavesettet består av 4 oppgaver, med tilsammen 13 deloppgaver. Hver hovedoppgave er vektet, og alle deloppgavene i en oppgave teller likt. Alle oppgavene skal besvares. Ved sensur teller hver deloppgave like mye. arakteren fastsettes dog på basis av en helhetsvurdering av besvarelsen. SRIV TYDELI :-) Sensurdato: 1. juni 2010 arakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. ølg instruksjoner gitt på: www.hiof.no/studentweb

2 Oppgave 1: 20% A) Hva er effektiviteten i O-notasjon til følgende funksjon (begrunn svaret): (n) = 13 + (14n 2 + log 3 n) / n Leddet med høyest grad er 14n 2 /n = 14n, vi stryker konstanten 14, og vi får O(n), lineær orden. ) orklar kort hva binærsøk er, og redegjør for effektiviteten til slike søk. Et binærsøk forutsetter et sortert mengde. Vi starter med å dele mengden i to like store delder, og finner ut om det vi søker etter må ligge i den «minste» eller «største» mengden. Deretter fortsetter vi å søke på samme måte i den mengden som elementet må befinne i. or hver iterasjon deler vi altså mengden vi søker i to like store deler, og i verste tilfelle finner vi ikke elementet, og har da søkt gjennom et logaritmisk antall delmengder. Ordenen er altså O(log n). C) Implementer metoden void delete(int[] arr, int idx) som sletter element nr idx i tabellen arr. Angi metodens effektivitet, inkludert begrunnelse. void delete(int[] arr, int idx) { // We are not asked to return a new array // We just shift the last part of the array one element left // If idx is last element, we do nothing :) for (int i = idx; i < arr.length-1; i++) { arr[i] = arr[i+1]; Vi kopierer elementene med med indeks større enn idx en plas til venstre, ett for ett. I verste tilfelle er idx lik 0, må vi altså flytte alle elementene...dette gir linær orden, O(n).

3 D) Implementer metoden void delete(listnode head, ListNode tail, ListNode del) som fjerner noden med referansen del i en dobbeltlenket liste der første node er head, og siste node er tail. Du kan anta at del ikke er første eller siste node. Angi metodens effektivitet, inkludert begrunnelse. Se vedlegg. public static void delete(listnode head, ListNode tail, ListNode del) { del.prev.next = del.next; del.next.prev = del.prev; Vi har allerede referansen til element som skal slettes, så vi trenger ikke lete den fram. Dermed trengere vi bare å «bypass»'e den. Dermed blir det konstant orden, O(1). E) etrakt funksjonen void func (int[] arr) { int i = arr.length-1; int j = 0; while(i >= 0) { for (int k = 0; k <= i; k++) { i--; j += arr[k]; Angi funksjonens effektivitet, inkludert begrunnelse. Den ytre løkka går kjøres for hvert element i tabellen. I første gjennomløp kjører den indre løkka N ganger der N er antall elementer i arr. Neste gang kjøres den N-1 ganger, også videre, og siste gang kjøres den 1 gang. Dette gir totalt N+(N-1)+(N-2)+... + 1 ganger, dvs. summen av de N første heltallene, som jo er (N 2 -N)/2, som gir oss kvadratisk orden, O(N 2 ).

4 Oppgave 2: 30% A) oreleser forteller begeistret at han har pønsket ut en genial sorteringsmetode, som ved en kløktig kombinasjon av trær og grafer viser seg å være av lineær orden. Hva tror du om dette? oreleser er på bærtur, det er ikke mulig å finne en sorteringsalgoritme (for en generell input uten spesielle særtrekk) som gir bedre enn loglineær orden, O(NlogN). ) orklar hvordan utvalgssortering foregår. Anvend metoden på følgende sekvens, og illustrer hvert trinn. 13-8 - - 1-9 - 41-18 Diskuter metodens effektivitet. Vi bygger opp en sortert sekvens ved gjentatte ganger finne og ta ut minste element i inputmengden og legge det til på slutten av den sorterte mengden. INPUT SORTERT 13 8-1 9 41 18 13 8 9 41 18 1 13 9 41 18 1 8 13 41 18 1 8-9 41 18 1 8 9-13 41 1 8 9 13 18 1 8 9 13 18-41 Orden er kvadratisk, O(N 2 ), fordi vi for hver innsetting må gå gjennom hele det som er igjen av input, som altså blir lik summen av de N første heltall. C) Implementer metoden ListNode sort(listnode head) som returnerer den første noden i en sortert, dobbeltlenket liste, der nodene er hentet fra listen med start head. Sorteringen skal foregå etter utvalgsprinsippet. orklar hva som eventuelt skjer med den originale input-lista. Se vedlegg. Denne oppgaven kan være litt fiklete hvis man skal dekke alle spesialtilfellene, og en blanding av java/kommentarer/pseudokode kan nok være greiest for de fleste, og vil også gi bra uttelling. Den originale lista blir «ødelagt», fordi disse referansene nå inngår i den sorterte lista, dvs. at prev og next referansene er endret.

public static ListNode sort(listnode head) { // If empty or single item input, return without doing anything :) if (head == null head.next == null) { return head; ListNode sortedhead = null; // eep track of last node in sorted list // Otherwise algorithm will be of cubic order! ListNode sortedtail = new ListNode(); ListNode inputhead = head; while (inputhead!= null) { // ind smallest ListNode curr = inputhead; ListNode smallest = curr; while (curr!= null) { if (curr.val < smallest.val) { smallest = curr; curr = curr.next; // Remove smallest from input if (smallest.next == null && smallest.prev == null) { // Treat single item inputhead = null; else if (smallest == inputhead) { // Treat head as special case inputhead = smallest.next; inputhead.prev = null; else if (smallest.next == null) { // Treat tail as special case smallest.prev.next = null; else { smallest.prev.next = smallest.next; smallest.next.prev = smallest.prev; // Append smallest in sorted list if (sortedhead == null) { // Treat first append as special case smallest.prev = null; smallest.next = null; sortedhead = smallest; sortedtail = smallest; else { sortedtail.next = smallest; smallest.prev = sortedtail; sortedtail = smallest; // Terminate the list sortedtail.next = null; return sortedhead;

Oppgave 3: 20% A) ygg opp en MaxHeap ved å sette inn disse elementene (i gitt rekkefølge): - - Y - - A - Z jern deretter det største elementet. Illustrer de ulike trinnene ved både innsettingene og fjerningen. Sett inn rot: Sett inn og boble opp: / Sett inn Y og boble opp: Y Sett inn, og boble opp: Y / Sett inn A, ingen bobling: Y A

7 Sett inn, bobling opp til rota: Z Y / A Ta ut Z (bytte med sist innsatte,, slette sist inssatt) Y A obler nedover (med største barn) Y A ) ygg opp et AVL-tre (binært, balansert søketre) ved å sette inn følgende elementer (i den gitte rekkefølgen): - - R - T - V - M Illustrer de ulike trinnene i prosessen, og redegjør for hvilke regler du bruker. Sett inn rot:

8 Sett inn, balanse O: / Sett inn R, balanse O: R Sett inn T balanse O: R \ T Sett inn T, R har +2 i balanse (type høyre/høyre): R \ T \ V Må ta en enkel venstre rotasjon: T R V

9 Setter in M, får ubalanse (+2) i, type venstre/høyre T R V / M ørste enkel høyre rotasjon om T R M T \ V Deretter enkel venstre rotasjon om R T \ M V

10 Oppgave 4: 30% Vi har gitt følgende labyrint på matriseform (9 kolonner i x-retning, 7 rader i y-retning, svart markerer blokkerte ruter, grå markerer indeksene for kolonnene og radene): 0 1 2 3 4 0 1 2 3 4 7 8 Den rekursive metoden move kan benyttes for å finne en vei gjennom labyrinten (se vedlegg). A) Hva blir skrevet ut til skjerm ved kallet move(maze, 0, 0, 8, ), der maze er labyrinten over? Du kan stoppe når du har kommet fram til mål. orklar kort hva som skjer videre etter at man har funnet fram til mål første gang. ruk gjerne illustrasjoner. 1: 0,0 2: 0,1 3: 0,2 4: 0,3 : 0,4 : 0, 7: 0, OS: Her er det backtracking! 8: 1, 9: 2, 10: 3, 11: 4, 12: 4,4 13:,4 14:,4 1:,

11 1:, 17: 7, ound! Etter dette fortsetter rekursjon ved å backtracke helt tilbake til start, og kjører rekursjonen via 1,0 og videre. Her kunne det vært lurt å tegne hele labyrinten, og skissere resten av rekursjonen ved å tegne piler eller lignende. ) orklar med tekst og illustrasjoner hvordan labyrinten over kan modelleres som et nettverk. Diskuteter spesielt hvordan vi kan minimere antallet noder. Hver celle har 4 naboer, eller mindre hvis noen av nabocellene er blokkert eller utenfor labyrinten. antenes lengde blir da 1. Dette gir unødvendig mange noder. Det holder med å lage noder av kun de cellene der vi har et «kryss» eller «blindvei», og summere antallet celler imellom som lengden på kantene. La oss kalle nodene for: A (0,0), (2,0), C(,0), D(2,2), E(2,3), (0,), (0,), og H(8,) Dette gir følgende nettverket (inkludert lengden på kantene): A -----2---------4----C / 3 / D 8 1 E ------------11--------H 1

12 C) Vi definerer lengden på en vei gjennom labyrinten som antallet flyttinger fra en celle til en nabocelle. ruk Dijkstras algoritme for å finne korteste vei gjennom labyrinten over (fra 0,0 til 8,), basert på nettverksmodellen du har foreslått i forrige deloppgave. orklar hva som skjer i hvert steg, gjerne ved å bruke en passende tabell. erdigbehandlede noder er streket under Oppdaterte noder (der veien er blir kortere enn før) er uthevet med fet skrift. Ini t 1 2 3 4 7 8 a b c d e f g h ommentarer a : 0 a : 0 a: 2 a: 2 b: b: b: b: d: d: a: a: f: f: f: 1 c: 14 c: 14 Avstanden fra a til a settes til 0. De andre avstandene settes til uendelig, og deres "via"- noden settes til "-" Vi velger noden med kortest avstandsverdi, dvs. a. Dernest oppdaterer vi avstanden til a ("via a") i alle nabonodene som ikke er ferdigbehandlet, dvs,. b og f. Noden a er etter dette ferdig behandlet, og vi markerer med å sette strek under den. Vi velger node b (kortest vei). or alle naboene til b som ikke er ferdigbehandlet, dvs c og d, sjekker vi om veien til a er kortere via b enn den til nå korteste veien, og det er den, og vi oppdaterer. Vi velger en av de med kortest avstand, f.eks. node f. or alle naboer som ikke er ferdigbehanldet (g og h). Vi oppdaterer begge. d har nå kortest avstand. Vi oppdaterer e, men ikke c Vi velger f.eks. c, og må oppdatere h Vi velger f.eks. e, ingen naboer er ubandlet. g har kortest avstand, men ingen ubandlede naboer. kun h gjenstår, og vi er framme!

13 Vedlegg public class ListNode { public int val; public ListNode prev; public ListNode next; public void move(boolean[][] maze, int sx, int sy, int dx, int dy) { // locked cells are initially marked as "false"; // sx/sy represents the current move, // and dx/dy is the destination cell if (!valid(maze, sx, sy)) { // Return if we are outside the labyrint // or the cell value is false return; // Assume we have a global counter, initially set to zero moveno++; System.out.println(""+moveNo+": "+sx+","+sy); if (sx == dx && sy == dy) { System.out.println("ound!"); return; maze[sx][sy] = false; move(maze, sx, sy + 1, dx, dy); move(maze, sx - 1, sy, dx, dy); move(maze, sx, sy - 1, dx, dy); move(maze, sx + 1, sy, dx, dy); Slutt på oppgavesettet.