INF 4130 Svarforslag til «Midterm», 01/

Like dokumenter
UNIVERSITETET I OSLO. Med svar-forslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Søking i strenger. Prefiks-søking Naiv algoritme Knuth-Morris-Pratt-algoritmen Suffiks-søking Boyer-Moore-algoritmen Hash-basert Karp-Rabin-algoritmen

Turingmaskiner.

Prøveeksamen 2006 med svarforslag

INF3/4130 PRØVE-EKSAMEN MED SVARFORSLAG Gjennomgås 1/ , (lille aud.)

Dynamisk programmering Undervises av Stein Krogdahl

Algoritmer og datastrukturer Løsningsforslag

INF 4130 / / Dagens foiler hovedsakelig laget av Petter Kristiansen Foreleser Stein Krogdahl Obliger:

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

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

Stein Krogdahl, Dino Karabeg, Petter Kristiansen. Kenneth A. Berman and Jerome L. Paul.

Dagens stoff er hentet fra kapittel 9 i læreboka, samt kapittel 20.5 (som vi «hoppet over» sist)

6. oktober Dagens program: Første time: Andre time, gjesteforelesning: Uavgjørbarhet. Stein Krogdahl. (Ikke pensum, egne foiler legges ut)

Betinget eksekvering og logiske tester i shell

Dynamisk programmering

INF 3/ oktober : Avslutte Branch and Bound 23.6: Trær og strategier for spill med to spillere

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Matchinger i ikke-bipartite grafer

Notat for oblig 2, INF3/4130 h07

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

MAT1030 Plenumsregning 1

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

MAT1030 Diskret Matematikk

Quicksort. Fra idé til algoritme.

INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere

Dynamisk programmering

Notater til INF2220 Eksamen

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Sekventkalkyle for utsagnslogikk

Søk i tilstandsrom. Backtracking (Kap. 10) Branch-and-bound (Kap. 10) Iterativ fordypning. Dijkstras korteste sti-algoritme A*-søk (Kap.

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2015

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

KONTINUASJONSEKSAMEN I FAG ALGORITMER OG DATASTRUKTURER

INF 4130 Oppgavesett 3, 20/ m/løsningsforslag

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgås tirsdag 21. febr. 2012

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

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

3/5/2012. Chart alternativ datastruktur. Fundamentalregelen. Chart-parsing. Bottom-up FORMELL SPRÅKTEORI. Jan Tore Lønning

Oppgave 2: def a (x): x = x + 1 y = 1 + x * 2

MAT1030 Diskret matematikk

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

MAT1030 Diskret matematikk

Øvingsforelesning 5 Python (TDT4110)

MAT1030 Diskret matematikk

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

I Kapittel 3 så vi på hvordan data, som hele tall og reelle tall, kan representeres som bitsekvenser

MAT1030 Plenumsregning 3

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

Det matematisk-naturvitenskapelige fakultet

Øvingsforelesning 5 Python (TDT4110)

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

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

UNIVERSITETET I OSLO

INF2220: Forelesning 2

MAT1030 Diskret Matematikk

Kapittel 4: Logikk (fortsettelse)

MAT1030 Forelesning 4

Norsk informatikkolympiade runde

INF1010 Sortering. Marit Nybakken 1. mars 2004

Oppsummering av Kapittel 3. MAT1030 Diskret matematikk LOGIKK. Logikk. Forelesning 5: Logikk

G høgskolen i oslo. Emnekode:!;_unstiq intelliqens lv 145A Gruppe(r) : Dato: Tillatte

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

UNIVERSITETET I OSLO

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF5830, H2009, Obigatorisk innlevering 2. 1 Oppgave: Unære produksjoner i CKY

Svarforslag til ukeoppgaver til INF 4130

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010

Bottom up parsering (nedenfra-og-opp) Kap. 5 del 1 Intro til parsering nedenfra-og-opp samt LR(0) og SLR(1) grammatikker INF5110 v2006

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

INF2220: Forelesning 7. Kombinatorisk søking

Pattern matching algorithms. INF Algoritmer og datastrukturer. Lokalisering av Substrenger. Brute force

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

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

Avgjørbarhet / Uavgjørbarhet

EKSAMEN med løsningsforslag

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Norsk. Language: English / Norwegian

Hjemmeeksamen 1 i INF3110/4110

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Norsk informatikkolympiade runde

Øvingsforelesning 1 Python (TDT4110)

Norsk informatikkolympiade runde

Finne ut om en løsning er helt riktig og korrigere ved behov

Oppgave 2: def a (x): x = x + 1 y = 1 + x * 2

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

UNIVERSITETET I OSLO

MA3301 Beregnbarhets- og kompleksitetsteori Høsten

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

INF2820 Datalingvistikk V gang, Jan Tore Lønning

Oppgaver til INF 5110, kapittel 5, med svarforslag Gjennomgått torsdag 26. febr Dette er versjon fra 28/7

INF Algoritmer og datastrukturer

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

Norsk informatikkolympiade runde

Transkript:

INF 4130 Svarforslag til «Midterm», 01/11-2011 Oppgave 1 1.a Den generelle reglen blir: Dersom S[i] = [j]: Dersom S[i] [j]: true dersom B[i-1, j-1] = true eller om B[i-1, j-1] = true ellers: false true dersom B[i, j-1] = true ellers: false Initialsiseringen blir som følger: B[0, j] for alle j settes til true, siden den tomme strengen alltid kan oppnås ved fjerninger B[i,0] for i>0 settes til false, siden S-strengen her er lenger enn -strengen, og da er det ikke håp. I eksempelet under ser vi på S = abc og = aacbbcc. Vi ser at det går bra. a a c b b a c ---------------------------------- t t t t t t t t a. t t t t t t t S b.... t t t t c....... t Et program som gjør dette kan være: for j = 0 to.length do { B[0, j] = true; } for i = 1 to S.length do { B[i, 0] = false; } for i = 1 to S.length do { // Rekkefølgen av løkkene er vilkårlig for j = 1 to.length do { if S[i] == [j] then { if B[i, j -1] == true or B[i-1, j -1] == true then { B[i, j] = true; } else { B[i, j] = false;} } else { if B[i, j -1] == true then { B[i, j] = true; } else { B[i, j] = false; } } } } return B[S.length,.length]; 1.b Vi innfører to varianter av true, nemlig: B[i, j] = tu, som betyr at man kan få likhet mellom S[1:i] og [1:j], uten at man behøver å fjerne [j]. Ellers B[i, j] = tm, som betyr at man kan få likhet mellom S[1:i] og [1:j], men da er man nødt til å fjerne [j].

Den generelle reglen blir da: Dersom S[i] = [j]: tu dersom B[i-1, j-1] = tu eller B[i, j] = tm ellers: tm dersom B[i, j-1] = tu ellers: false Dersom S[i] [j]: tm dersom B[i, j-1] = tu elles: false Initialsiseringen blir som følger: B[0, 0] settes til tu, siden de tomme strenger er like (uten noe fjerning) B[0, 1] settes til tm, siden vi kan oppnå den tomme streng ved å fjerne det ene symbolet i [1]. B[0, j] for j>1 settes til false, siden vi måtte fjerne alle (og dermed flere ved siden av hverandre) om vi skulle oppnå den tomme streng. B[i,0] for i>0 settes til false, siden S-strengen her er lenger enn -strengen, og da er det ikke håp. I eksempelet under ser vi på S = abc og = aacbcc. Vi ser at vi her kan få likhet. a a c b c c ------------------------------ tu tm..... a. tu tu tm... S b.... tu tm. c..... tu tu Oppgave 2 For 0 i j n, lar vi c ij være kostnaden av å kutte (del)stokken med endepunkter i og j. Vi kan bruke følgende rekurrensrelasjon, som vi altså fyller ut i en to-dimensjonal tabell c[0,i][0,j]: Initialbetingelsene vil være k ii1 =0. luet er jo å se at dette er det samme som matrisemultiplikasjon, men at det her vil være en litt annen måte å beregne kostnaden på nå vi setter sammen to deler. Her vil det være lengden av den aktuelle stokken, avstanden mellom endepunktene, som vi finner ved p j p i..

Om man heller vil skrive ke, kan det se slik ut: for i = 0 to n-1 do c[i, i1] = 0 // initialbetingelsene (diag=1) for diag = 2 to n do for i = 0 to n-diag do // beregner ihht j = idiag // rekurrensrelasjonen min = // angitt over (finner beste k) tempcut = i // på samme måte som på side for k = i1 to j-1 do // 271 i læreboka temp = c[i,k] c[k,j] (p[j]-p[i]) if temp < min then min = temp tempcut = k fi c[i,j] = min firstcut[i,j] = tempcut Oppgave 3 3.a l.m = 1, l.u = 0. De uavhengige mengdene vil være {l} og, hhv. 3.b v.m = 1 // ne v er selv med v.u = 0 // ne v er ikke med FOR i in v.children DO { v.m = v.m i.u // Er v med, kan vi ikke ta med barna. v.u = v.u max(i.u, i.m) // Er v ikke med, kan vi ta med de barna } // vi ønsker, men behøver ikke ta alle. Det lille vanskelige her blir vel her nå (?) å se at man ikke må ta med alle barn av en ne v som ikke selv er tatt med, men at man kan gjøre det, og at man altså tar med/utelater på den måten som gir høyest verdi; tilsvarende er det ikke om man har tatt med ne v, da kan man ikke ta med noen av barna. 3.c Svaret finner vi ved å ta max(r.u, r.m).

Oppgave 4 4.a 1 2 3 4 5 6 6 6 Omregning av vinduet mulo 3 Match? 1 2 3 123/3 = 41 / 0(m 3) spuriøs match 2 3 4 234/3 = 78 / 0(m 3) spuriøs match 3 4 5 345/3 = 115 / 0(m 3) spuriøs match 4 5 6 456/3 = 152 / 0(m 3) spuriøs match 5 6 6 566/3 = 188,66 / 2(m 3) ikke match 6 6 6 666/3 = 222 / 0(m 3) ekte match stopp 4.b Det forventede antall spuriøse matcher er n/3 om vi gjør n forsøk. Vi gjør seks forsøk, og forventer derfor 6/3=2. De fire spuriøse matchene vi fikk er altså noe i overkant av det forventede antallet. Oppgave 5 5.a For at en heuristikk-funksjon h skal være monoton, må følgende holde: i. For enhver måltilstand X skal vi ha h(x) = 0 ii. For enhver lovlig overgang fra M til N skal vi ha h(m) h(n) cost(m, N). Denne er ikke monoton, for eksempel vil tilstanden HHHHSS_SS, som er en lovlig slutttilstand, ha heuristikk-verdi 2. Et brudd på monotonitetskravet (punkt i). Denne er monoton. La oss kalle heuristikken h, og se på kravene hver for seg: i. Dette kravet er trivielt oppfylt, ettersom det i en måltilstand, uansett hvor den åpne ruten befinner seg, ikke vil være noen hvite brikker til høyre for noen svart brikke. ii. Dette kravet er også oppfylt ettersom et enkeltflytt av kostnad 1 aldri vil endre på heuristikk-verdien, slik at vi alltid vil ha h(n) = h(m) for en overgang fra M til N, og altså h(m) h(n) 1. For et hopp vil vi aldri endre heuristikken med mer enn 1, ettersom vi bare kan hoppe over 1 rute. Vi vil altså ha h(n) h(m) 1. Og altså h(m) h(m) 1 2 h(n) 1.

5.b Ja, professoren kan benytte datterens foreslåtte funksjon. Denne vil også være monoton om delfunksjonene er det. i-kravet er trivielt oppfylt når delfunksjonene er monotone. Vi må vise at ii-kravet også er oppfylt for h når h i -ene er monotone. Vi kan uten tap av generalitet se på bare to av delfunksjonene, h 1 og h 2. nta motsatt, altså at h 1 (M) h 1 (N) cost(m, N), h 2 (M) h 2 (N) cost(m, N), (delfunksjonene monotone) men at h(m) > h(n) cost(m, N). (sammensatt funksjon ikke monoton) La så h(n) være dominert av h 1 og h(m) være dominert av h 2, slik at h(n) = h 1 (N) > h 2 (N) og h(m) = h 2 (M) > h 1 (M), men da vil vi ha h 2 (M) > h 1 (N) cost(m, N) > h 2 (N) cost(m, N), en selvmotsigelse når h2 er monoton i utgangspunktet. Oppgave 6 6.a B B 0, 2 0, 1 0, 1 0, 0 0, 0 0, 0 1, 3 0, 3 1, 2 1, 1 0, 2 1, 1 1, 0 0, 1 1, 0 0, 1 0, 0 0, 1 1, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 6.b Merkene er angitt på treet over. 6.c Nei, for rotnen er merket med. 6.d Ja. Her er det bare å se på det midterste subtreet i treet fra 1.a. Roten av det er riktignok merket med, men man må kompensere for at det her er B som er i trekket, og for den finnes en vinnende strategi.

6.e Ola har rett. For selv om man ser på det dårligste trekket først, så kan det neste man ser på være det beste trekket fra denne situasjonen, og det kan gjøre at man får avskjæring på neste nivå under senere ner. Oppgave 7 7.a 2 3 6 4 7 5 Høyrestiene 3 og 2-7 spleises, vi får 2-3-7. Vi må snu i 2 fordi nullstikravet er brutt. 7.b Vi er altså gitt følgende streng: G Strengen har følgende suffixer: G Som vel skulle gi oss følgende ukomprimerte suffix-tre: * G c

Og altså i komprimert form, som suffix-tre: * G 7.c Vi skal her altså finne shift-avstandene som brukes i Horspool-algoritmen. Det dreier seg bare om å finne (korteste) avstand en bokstav har fra strengens (patterents) ende. G 7 (Nærmeste (eneste) G i avstand 7 fra enden) 2 (Nærmenste i avstand 2 fra enden) 1 (Nærmeste i avstand 1 fra enden) 8 (Endetegnet får ingen lavere verdi fra strengen) {,, Å} \ {G,,,} 8 (Resten får strengens lengde) [slutt]