ALGORITMER OG DATASTRUKTURER

Like dokumenter
ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamen i tdt4120 Algoritmer og datastrukturer

Eirik Benum Reksten Hans Olav Norheim. (ja, det kommer nok litt matte nå ja)

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Løsningsforslag til eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i IT1105/TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

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.

Avsluttende eksamen i TDT4125 Algoritmekonstruksjon, videregående kurs (løsningsforslag)

INF2220: Time 12 - Sortering

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Oppgave 1. Sekvenser (20%)

Øvingsforelesning 12 Maks flyt

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

SIF8010 ALGORITMER OG DATASTRUKTURER

UNIVERSITETET I OSLO

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 18. Desember 2000, kl

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

UNIVERSITETET I OSLO

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

UNIVERSITETET I OSLO

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Algdat - Øvingsforelesning. Maks flyt

deeegimnoorrrsstt Sjette forelesning

EKSAMEN med løsningsforslag

Norsk informatikkolympiade runde

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

UNIVERSITETET I OSLO

Sortering i Lineær Tid

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

TDT4105 Informasjonsteknologi, grunnkurs

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

n/b log b n = (lg n) a log b n = n log b a

Avanserte flytalgoritmer

Øvingsforelesning 6. Sorteringsalgoritmer. Martin Kirkholt Melhus Basert på foiler av Kristian Veøy 30/09/14 1

Rundt og rundt og. Trettende forelesning

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

Eksamensoppgave i MA1201 Lineær algebra og geometri

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

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

Algoritmer og Datastrukturer

Notater til INF2220 Eksamen

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

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

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

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

Norsk informatikkolympiade runde

Grådige algoritmer. Lars Vidar Magnusson Kapittel 16. Aktivitetvelgingsproblemet Huffmankoder

Algoritmer og Datastrukturer

Maks Flyt og NPkompletthet

Algdat Eksamensforelesning. Nils Barlaug

Kap.8 Sortering og søking sist oppdatert 16.03

Avsluttende eksamen i TDT4125 Algoritmekonstruksjon, videregående kurs

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2

Algdat-ninja på 60 minutter: Et galskapsprosjekt. Magnus Lie Hetland

Innhold. Innledning 1

Algdat Oppsummering, eksamen-ting. Jim Frode Hoff

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2016

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

Øvingsforelesning 9. Flytnettverk, maksimum flyt og maksimum bipartitt matching. Jon Marius Venstad

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

Pensum: fra boken (H-03)+ forelesninger

UNIVERSITETET I OSLO

Transkript:

Stud. nr: Side 1 av 7 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap LØSNINGSFORSLAG, AVSLUTTENDE EKSAMEN I TDT4120/IT1105 ALGORITMER OG DATASTRUKTURER Mandag 5. desember 2005 Kl. 09.00 13.00 Faglig kontakt under eksamen: Arne Halaas, tlf. 416 61 982 Magnus Lie Hetland, tlf. 918 51 949 Hjelpemidler: Ingen trykte eller håndskrevne hjelpemidler tillatt. Bestemt, enkel kalkulator tillatt. Sensurdato: 5. januar 2006. Resultater gjøres kjent på http://studweb.ntnu.no og sensurtelefon 81548014. Viktig: Les hele oppgavesettet før du begynner. Les oppgaveformuleringene grundig. Det er angitt i poeng hvor mye hver deloppgave teller ved sensur. Gjør nødvendige antagelser der dette er nødvendig. Skriv kort og konsist. Skriv fortrinnsvis i rutene på oppgavearket.

Stud. nr: Side 2 av 7 Oppgave 1 (18%) Anta gitt en heltallsvektor V[1 n] a) Finn en mest mulig effektiv algoritme for å avgjøre om det eksisterer en undermengde (et utvalg) av k elementer i V med sum høyst lik ( ) verdien T. Grunntanken er å effektivt finne de k minste tallene i V. Det er flere muligheter: 3 poeng: Bruk SELECT (eller RANDOMIZED-SELECT) for å finne det k-te minste tallet. Da vil også de som er mindre være plassert til venstre for dette, klare til summering. (Om en student oppgis at PARTITION skal brukes i tillegg trekkes det ikke for det.) Kjøretiden blir Θ(n). 2 poeng: Bruk en maks-heap med k elementer og iterer over V (forkast hele tiden det største for å holde størrelsen på k). Kjøretiden blir Θ(n log k) i verste tilfelle og Θ(n) i beste tilfelle. 2 poeng: Legg alle elementene inn i en min-heap og trekk ut de k minste. Kjøretiden blir Θ(n + k log n). 1 poeng: Gå igjennom alle elementene k ganger for å plukke ut det minste av de gjenværende elementene, eller bruk en enkel struktur (sortert eller usortert liste eller tabell) for å plukke ut alle k i én iterasjon. Kjøretiden blir Θ(kn). 1 poeng: Sortér alle elementene og velg de k første. Kjøretiden blir Θ(n log n). (3 poeng) Det er gitt at n/4 k n/2 og at n > 1000. b) Hva er tidskompleksiteten for ditt algoritmeforslag i a) i verste tilfelle (worst case)? Kommer an på valgt løsning i a). (Sett inn n i stedet for k i kjøretidsuttrykkene.) Her gis det kun poeng hvis algoritmen i a) faktisk er en løsning (men det kan gis full score her om løsningen i a) ikke er en god løsning). (2 poeng) c) Skisser kort en så effektiv som mulig algoritme for å finne de k < 6 minste verdiene i V. Man kan rett og slett iterere over V og hele tiden ta vare på de k minste verdiene. Akkurat hvordan man gjør det er ikke essensielt. (En enkel, uordnet tabell kan være en naturlig løsning. Man kan også bruke en heap.) (3 poeng) SORT100(V[i j]) er en gitt O(j i)-metode som sørger for at de inntil 100 minste verdiene i V[i j] blir plassert i sortert rekkefølge i V[i, i+1, i+2,..., i+k], der k = min(i+99, j), mens de øvrige elementene, hvis disse eksisterer, forblir usorterte og plasseres i V[i+k+1, i+k+2, i+k+3,, j].

Stud. nr: Side 3 av 7 d) Hva er tidskompleksiteten til en algoritme som bruker SORT100 gjentatte ganger for å sortere V[1 n], der n er mye større enn 100? Begrunn svaret. Her vil man naturlig sortere 100 og 100 tall. Den totale kjøretiden blir en aritmetisk rekke: n /100 $ "(n #100i) = "(n + (n #100) +...+100 + 0) = "(n 2 ). (Her holder en kort, tekstlig begrunnelse.) i= 0 (5 poeng) Anta nå at heltallsvektoren V[1 n] er sortert. Dersom vi søker etter verdien x i V kan vi undersøke midt-verdien i V i forhold til x og derved eliminere halvparten av V i det fortsatte søket. Binærsøk er en algoritme som gjentar denne operasjonen ved å halvere størrelsen på den resterende sekvensen inntil x enten er funnet eller inntil en kan slå fast at x ikke er blant V-verdiene. e) Skriv en kort, men detaljert, (pseudo)kode for Binærsøk og angi kjøretiden for algoritmen i verste tilfelle. BINARYSEARCH(V, v, l, r) if r < l ERROR( Not found ) mid (l + r) / 2 if V[mid] = v return mid if v < V[mid] return BINARYSEARCH(V, v, l, mid 1) else return BINARYSEARCH(V, v, mid+1, r) (Merk: En iterativ løsning aksepteres også.) Kjøretid: O(log n) (5 poeng) Oppgave 2 (17%) a) La H være den binære haugen (binary heap) [2, 4, 3, 4, 7, 6, 4, 5, 6, 7, 9, _]. Hvordan ser H ut etter at du setter inn verdien 1? (Den siste posisjonen er i utgangspunktet ledig.) H = [1, 4, 2, 4, 7, 3, 4, 5, 6, 7, 9, 6] (3 poeng) b) Vis hvordan en tabell (array) A = [5, 9, 7, 4, 0, 2, 8, 8] ser ut etter hver SWAP-operasjon (ombytting av to tall) fram til fullført sortering ved Quicksort. Den siste verdien (den lengst til høyre) i tabellen (eller deltabellen under betraktning) skal alltid velges som pivot-element. Anta at PARTITION er implementert som oppgitt under. Fyll ut tabellen til høyre. (4 poeng) PARTITION(A, p, r) x A[r] i p 1 for j p to r 1 if A[j] x i i + 1 SWAP(A[i], A[j]) SWAP(A[i + 1], A[r]) return i + 1 5 9 7 4 0 2 8 8 5 7 9 4 0 2 8 8 5 7 4 9 0 2 8 8 5 7 4 0 9 2 8 8 5 7 4 0 2 9 8 8 5 7 4 0 2 8 9 8 5 7 4 0 2 8 8 9

Stud. nr: Side 4 av 7 Merknad til sensur: Denne oppgaven er uheldig formulert, ettersom det ikke er mulig å fullføre Quicksort slik som beskrevet. Om studentene har gjort noe som viser at de har skjønt Quicksort så gis det full uttelling (4 poeng). Løsningen til høyre er en begynnelse på en sortering, der hver SWAP er vist. (Om studenten har skrevet første rekkefølge to ganger er det også riktig.) Stipendiat Smartens hevder å ha klekket ut en sorterings-algoritme som kan ta inn en gyldig binærhaug (binary heap) med n verdier og sortere disse på O(n) tid. Smartens hevder at han unngår den fundamentale Ω(n log n)-tid laveste grense for sammenligningsbasert sortering fordi elementene i den binære haugen allerede er delvis sortert. c) Gi en så overbevisende begrunnelse som mulig for at Smartens dessverre tar feil. Her kan man ha flere mulige argumenter; for eksempel: Hvis Smartens bruker O(n) tid på en heap kan han bare bruke HEAPIFY først på O(n) tid, og har da brutt Ω(n log n)-grensen. Anta at halvparten av verdiene er like (og minimale). Den andre halvparten vil da være totalt usorterte i en haug (og man har dermed et nytt sorteringsproblem av størrelse n/2 O(n)). (10 poeng) Oppgave 3 (15%) Vi har gitt 3 vektorer A[1 n], B[1 n], C[1 n], alle med verdier som er fødselsdatoer på formen "ddmmåå", f.eks.: A[1342] = 180368. Vi har som mål å finne ut hvilke datoer som er med i både A, B og C. Du skal lage en enkel og særdeles effektiv algoritme for å framskaffe en vektor D som inneholder disse felles fødselsdatoene. Tenk på konstantleddene i metoden også. a) Beskriv en slik algoritme SNITTABC. Uttrykk algoritmens tidskompleksitet ved Θ-notasjonen. Flere mulige løsninger: Bruk en bitvektor med en bit per mulig dato. Fyll én tom vektor X ved å iterere over A. Fyll en ny vektor Y ved å iterere over B og slå opp X. Svaret finnes så ved å iterere over C og slå opp i Y. En variant av første løsning kan være å bruke hash-tabeller. En tredje mulighet kan være å bruke radiks-sortering og fletting. Løsninger som ikke oppnår Θ(n) vil bli gitt færre poeng. (For eksempel vil en Θ(n log n)-løsning kunne gi inntil 8 poeng.) Kjøretid: Θ(n) (15 poeng) Oppgave 4 (15%) Vi har gitt et olje-transportnettverk N med 6 noder: A (kilde), B, C, D (sluk), E, F, der oljerørenes kapasitet er gitt ved AB:3, AC:3, BC:2, BE:3, CF:2, EF:4, ED:2, FD:3.

Stud. nr: Side 5 av 7 a) Du skal beregne maksimal flyt fra A til D ved den generelle Ford-Fulkerson-metoden. For at svaret ditt skal bli entydig i de tilfeller du har flere stivalg, skal du besøke noder i alfabetisk stigende rekkefølge, dvs. B før C, E før F, etc. Fyll ut, i tabellen nedenfor, de strømforøkende stiene (augmenting paths) i den rekkefølge de blir oppdaget, samt den netto flytøkning stien representerer. Nedenfor er første sti fylt inn. Vær nøye med å følge de beskrevne reglene. (Merk at du ikke nødvendigvis trenger å bruke alle radene i tabellen.) (8 poeng) Strømforøkende sti (augmenting path) Netto flytøkningsbidrag A B C F D 2 A B E D 1 A C B E D 1 A C B E F D 1 b) Hvilke minimale snitt finnes i nettverket over? (Oppgi hvert snitt som en kantliste.) [ED, FD], [BE, CF], [AB, CF] Her er det viktig å få med alle snittene. Har man med 2 snitt får man 5 poeng; har man med 1 snitt får man 3 poeng. (Man får samme uttelling enten bakoverkanter er tatt med eller ikke.) (7 poeng) Oppgave 5 (25%) På en nyttårsfest er det invitert N gutter og N jenter, og arrangøren vil oppnå at så få som mulig får en ikke spesielt ønsket bordkavaler/dame til bords. Det er av den grunn blitt gjennomført en spørreundersøkelse blant deltakerne, og data fra denne er samlet i to matriser G og P. Her er G(i, j) = 0 dersom gutt nr. i ikke spesielt ønsker jente nr. j, j = 1,2,..., N; ellers er G(i, j) = 1. Tilsvarende er P(j, i) = 0 dersom jente nr. j ikke spesielt ønsker gutt nr. i, i = 1, 2,..., N; ellers er P(j, i) = 1. Ønskene er ikke nødvendigvis gjensidige; eksempelvis kan G(5, 19) = 1 mens P(19, 5) = 0. Vi definerer nå Problem PAR: Finn en par-sammensetting som er slik at så få personer som mulig ender opp med å få en ikke spesielt ønsket person til bords. a) Formuler problemet PAR som et Lineær-Programmerings-problem (LP-problem). Du må klart definere de variable, målfunksjonen og kravene. Formulerer dette som et heltallig lineært program: maksimer (G(i, j) + P( j,i)) " f (i, j) slik at N # i, j=1 f (i, j) {0, 1} for alle 1 i, j N,

Stud. nr: Side 6 av 7 N " f (i, j) = 1 for alle 1 i N j=1 N " f (i, j) = 1 for alle 1 j N i=1 Her er f (i, j) = 0 hvis i og j ikke sitter sammen, og 1 ellers. Alle mulige par der G(i, j) + P( j,i) = 0 kan fjernes fra beregningen, ettersom de ikke bidrar til målfunksjonen. Merknad til sensur: Selv om det ikke er akkurat det oppgaven spør etter er det ikke helt urimelig å anta at en match er like dårlig enten den inneholder 1 eller 2 uønskede personer (altså at vi prøver å redusere antallet mismatcher ). En slik tolkning av oppgaven kan gi opp til 10 poeng. (15 poeng) b) Ofte er det slik at spesielle LP-problemer kan løses på en spesiell måte. Hvordan vil du så effektivt som mulig løse PAR-problemet i praksis? (Husk at N kan være vilkårlig stor.) PAR kan formuleres (og løses) som et sirkulasjonsproblem. Legg kanter fra (f.eks.) gutt i til jente j hvis ikke begge misliker hverandre. Sett kostnaden til"(g(i, j) + P( j,i)), øvre kapasitet til 1 og nedre kapasitet til 0. Legg til kilde med én kant til hver av guttene og et sluk med én kant fra hver av jentene (øvre/nedre kapasitet 1/0 og kostnad 0). Legg til en bakoverkant (med kapasitet n og vilkårlig kostnad) fra sluk til kilde. En optimal sirkulasjon vil nå også gi en billigst (dvs. best) mulig matching mellom gutter og jenter (de som gjenstår matches vilkårlig). Problemet kan også løses med mer spesialiserte algoritmer for min-kost-flyt-problemet (ikke pensum), på en måte som ligner løsningen for bipartitt matching ved hjelp av en maks-flytalgoritme (Cormen 26.3). Merk: Vi antar her en sirkulasjonsalgoritme som vil gi heltallig sirkulasjon hvis vi har heltallige kapasiteter. Detaljer rundt dette kreves ikke. Merknad til sensur: Denne oppgaven viste seg å være vanskelig for de aller fleste.ved sensur ble det derfor besluttet å gi hver student den mest lønnsomme vurdering av følgende 2 alternativer: Alternativ 1. Beholde opprinnelig vekt (10 poeng) mest lønnsomt for studenter som har fått mye til på oppgave 5b i forhold til resten av eksamen. Alternativ 2. Se bort fra oppgave 5b og skalere opp vekten på de øvrige oppgavene så de summerer til 100 poeng. (10 poeng) Oppgave 6 (10%) Anta at GLAGNAR er en type datastruktur (en klasse) med 4 attributter/felter, buncha, muncha, cruncha og human. Anta at disse feltene er udefinerte idet objektet opprettes. Anta at zoid er en minimums-heap av GLAGNAR-instanser, der GLAGNAR-instansene sammenlignes basert på sine muncha-attributter. Du er usikker på hva buncha-feltene er satt til for instansene i zoid, men du vet at muncha-feltene er satt til ulike tall. cruncha og human-attributtene for disse instansene er udefinerte. Betrakt følgende pseudokode:

Stud. nr: Side 7 av 7 while zoid.length > 1 pop a fra zoid pop b fra zoid rinds en ny GLAGNAR-instans rinds.muncha a.muncha + b.muncha rinds.cruncha a rinds.human b sett (dvs. push) rinds inn i zoid a) Hva gjør koden? Konstruerer Huffman-trær. (muncha er frekvens, cruncha og human er høyre og venstre barn, og buncha er objektene/tegnene som frekvensene gjelder for). (10 poeng)