Obligatorisk oppgave 1 i INF 4130, høsten 2009

Like dokumenter
Obligatorisk oppgave 1 i INF 4130, høsten 2008

Obligatorisk oppgave 2 i INF 4130, høsten 2009

Oblig3 - obligatorisk oppgave nr. 3 (av 3) i INF3350/4350

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

Algoritmer og Datastrukturer

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Fra Python til Java, del 2

Rekursjon. Binærsøk. Hanois tårn.

Ordliste. Obligatorisk oppgave 1 - Inf 1020

INF Obligatorisk innlevering 7

Innlevering 2b i INF2810, vår 2017

UNIVERSITETET I OSLO

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

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

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Hjemmeeksamen 1 i INF3110/4110

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

IN1010 V18, Obligatorisk oppgave 5

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

INF1000-SIKT - Notat om I/O i Java

Rekursjon. Hanois tårn. Milepeler for å løse problemet

UNIVERSITETET I OSLO

Obligatorisk oppgave 5: Labyrint

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

2 Om statiske variable/konstanter og statiske metoder.

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

Dynamisk programmering Undervises av Stein Krogdahl

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF Innleveringsoppgave 6

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

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

MAT-INF 1100: Obligatorisk oppgave 1

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

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

Algoritmer og Datastrukturer

INF Obligatorisk innlevering 5

INF1010 våren 2018 tirsdag 23. januar

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF 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

København 20 Stockholm

UNIVERSITETET I OSLO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

MAT-INF 1100: Obligatorisk oppgave 1

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

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

INF1010 Sortering. Marit Nybakken 1. mars 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Fra problem til program

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

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

INF Notat om I/O i Java

Obligatorisk oppgave 2 - inf

INF Uke 10. Ukesoppgaver oktober 2012

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.)

Eksamen IN1010/INF1010 våren 2018

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Ukeoppgaver 2: sep (INF Høst 2010)

Hvordan angripe en større oppgave? (og hva skal jeg gjøre i oblig 7!?)

UNIVERSITETET I OSLO

Obligatorisk oppgave 2 INF2310 Våren 2018

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

MAT-INF 1100: Obligatorisk oppgave 1

INF 2820 V2015: Obligatorisk innleveringsoppgave 3

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

Presentasjon av oblig 2

INF Algoritmer og datastrukturer

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Binære trær: Noen algoritmer og anvendelser

Transkript:

Obligatorisk oppgave 1 i INF 4130, høsten 2009 Leveringsfrist fredag 2. oktober Institutt for informatikk Krav til innleverte oppgaver ved Institutt for informatikk (Ifi) Ved alle pålagte innleveringer av oppgaver ved Ifi enten det dreier seg om obligatoriske oppgaver, hjemmeeksamen eller annet forventes det at arbeidet er et resultat av studentens egen innsats. Å utgi andres arbeid for sitt eget er både ulovlig og uetisk og kan medføre sterke reaksjoner fra Ifis og Universitetets side, for eksempel utvisning i ett eller flere semestre; se http://www.uio.no/admhb/reglhb/studier/andre-regelverk/fuskesaker.xml. Vær derfor oppmerksom på følgende: Hvis du tar med tekst, programkode, illustrasjoner og annet som andre har laget, må du tydelig merke det og angi hvor det kommer fra. Det er greit å få hint om hvorledes en oppgave kan løses, men dette skal eventuelt brukes som grunnlag for egen løsning og ikke kopieres uendret inn. Du kan bli innkalt til samtale om dine innleveringer. Du må da kunne forklare innholdet i detalj og redegjøre for hvorledes det innleverte arbeidet er blitt til. Gruppearbeid I noen kurs skal det leveres gruppearbeid. Ifi krever da at alle medlemmer av gruppen kan gjøre rede for hovedtrekkene i det innleverte arbeidet. Dessuten må alle ha utført en rimelig del av det hele, og kunne identifisere og svare i detalj for sin del. Samarbeid Disse kravene betyr ikke at Ifi fraråder samarbeid tvert imot, Ifi oppfordrer studentene til å utveksle faglige erfaringer om det meste. Men det kreves som nevnt at man kun leverer besvarelser man har produsert selv. Hvis du er i tvil om hva som er lovlig samarbeid, må du kontakte gruppelærer eller faglærer. http://www.ifi.uio.no/studinf/skjemaer/erklaring.pdf 13. desember 2007 Spesielt gjelder for denne obligatoriske oppgaven: Oppgaven består av to deler, som begge skal løses. Hver student skal levere en egen, selvstendig løsning på oppgavene. Programmene skal skrives i Java, Python eller C/C++, og de skal kommenteres fyldig. Dog kan man snakke med gruppelærer, som kan tillate enkelte andre språk. En leveringsanvisning står til nederst i dokumentet. Før obligene rettes i detalj testes de automatisk mot en rekke testsett, det er derfor viktig at output er nøyaktig som angitt i oppgaveteksten. Det kan komme ytterligere presiseringer om oppgaven eller levering, så følg med! 1

Oppgave 1 (Dynamisk programmering) Problemet Sum Av Utplukk (SAU) er som følger: Man er gitt en sekvens av n positive heltall t 1, t 2,..., t n og et positivt heltall K, og man skal gjøre et utplukk av tallene som har sum nøyaktig K. Eksempel: La n være 5, la tallene være 1, 5, 6, 3, 10 og K = 8. I denne probleminstansen kan vi plukke ut 5 og 3 som har summen 8. Er vi bare interessert i et JA/NEI-svar, kan vi på denne instansen av SAU altså svare JA. Oppgaven er flerdelt for å illustrere dynamisk programmering, med og uten memoisering, slik at forskjellene på de to metodene kommer fram, og slik at vi ser hvordan begge metodene baserer seg på samme rekursive formel. a) For å løse oppgaven med dynamisk programmering kan du bruke en boolsk tabell U med format [1 n] [0 K]. Bruk U som variabelnavn i koden. Angi hva du vil at verdier i denne matrisen skal bety, og angi og begrunn hvilken rekursiv formel du vil basere din dynamiske programmerings-algoritme på. b) Implementer en standard bottom-up dynamisk programmerings-algoritme som løser SAU. Forklar hvorfor du initialiserer tabellen som du gjør. c) Forklar hvordan man kan løse oppgave b) med bare å bruke O(K) plass (altså at plassen man bruker er uavhengig av lengden av tall-sekvensen). d) Skriv en rekursiv, memoisert rutine (top-down) som bruker formelen fra a) til å løse en instans av SAU. Tabellverket kan ha samme dimensjon som angitt i a) over, men du trenger nå tre verdier i hver rute (og du kan f.eks. bruke en INT til det). Forklar hvorfor, og hvordan tabellen må være initialisert når du starter algoritmen. e) Forklar hvorfor det i oppgave d) ikke er like rett fram å redusere plassbehovet som det var i oppgave c). Men anta så at det i d) er ekstremt viktig å redusere plassbruken så mye som mulig og at det ikke er så kritisk med tiden. Hva slags datastruktur ville du da bruke i stedet for den to-dimensjonale tabellen? Forklar! Input Programmet skal lese input fra en angitt fil. Navnet på denne angis til programmet ved oppstart, sammen med navnet for en output-fil. Filen inneholder tallet n deretter tallet K, og til slutt t i -ene (alt heltall, med blanke mellom). Eksempelet over vil altså se slik ut: 5 8 1 5 6 3 10 2

Output JA eller NEI avhengig av om et utplukk med sum K var mulig å gjøre, et mellomrom, K, et mellomrom og deretter selve utplukket som en sekvens av (<t i >,<0/1 avhengig av om t i er med i utvalget>) skal skrives til filen angitt i andre argument til programmet. Eksempel (utplukket består av 5 og 3): JA 8 (1,0)(5,1)(6,0)(3,1)(10,0) Tips til implementasjon For å lese og skrive til/fra fil kan det være greit å bruke henholdsvis java.util.scanner og java.io.printwriter. Følgende eksempel leser ett tall fra input og skriver ut strengen <tall> * 2 = <tallet ganger to> til output på den måten vi vil ha det: public static void main(string[] args) throws FileNotFoundException { Scanner in = new Scanner(new File(args[0])); int input; try { input = in.nextint(); // se dokumentasjon til java.util.scanner for flere eksempler finally { in.close(); int output = input * 2; PrintWriter out = new PrintWriter(new File(args[1])); try { out.printf("%d * 2 = %d\n", input, output); // evt. out.println som flere er vant med finally { out.close(); For å slippe at den rekursive metoden må få med seg alle dataene som parametere i hvert kall, kan den kan passelig ligge inne i et objekt der inputdataene er attributter. Også den arrayen som husker svaret av tidligere kall bør ligge inni her. Dette objektet kan passelig settes opp av en hoved-metode, som også starter selve rekursjonen. Angående uttesting skulle det her være greit å sette opp tastdata selv, men det vil bli lagt ut noen testdata på kurssiden. 3

Oppgave 2 (Trier og suffiks-trær) Trier og suffix-trær er beskrevet i kapittel 20 i læreboka. Skriv et program som bygger et ukomprimert trie-tre fra en samling C av strenger, og som så søker i dette trie-treet for å se om et gitt pattern finnes i C. Vi lar for enkelthets skyld strengene kun bestå av små bokstaver. Innsetningsprosedyren skal gi en feilmelding om den får en streng som er et prefiks av en streng den har fått før (men skal akseptere samme strengen flere ganger). Du kan selv velge hvordan du vil implementere aksess fra en node til dens subnoder. Vanligvis skal jo rett subnode finnes (eller skapes) ut fra neste tegn i inputstrengen, mens alle subtrærne skal aksesseres i sortert rekkefølge ved utskrift av trærne (se under). Vi er ikke voldsomt kritiske til bruk av tid og plass. MEN: Du skal angi hvilke fordeler/ulemper den valgte metoden har. Input Programmet skal lese input fra en angitt fil, denne angis til programmet ved oppstart, sammen med navnet for output-fil. Filen består av ett heltall N og en mengde strenger (ord) adskilt med linjeskift. De N første strengene skal settes inn i trien/suffix-treet, de resterende strengene skal brukes til oppslag i den ferdige datastrukturen. Output Output skal igjen skrives til filen angitt i andre argument til programmet. For hver av de N første strengene skal strengen skrives ut, deretter skal datastrukturen skrives ut slik den ser ut etter innsetting av denne strengen. Den skal skrives ut i prefiks format, med en parentes omkring hvert subtre. Subtrærne skal komme i sortert rekkefølge. Trien i figur 20.8 skal dermed komme ut slik: (al(gorithm)(l))(inter(n(ally)(et))(view))(w(eb)(orld)) For de resterende strengene skal man også skrive ut selve strengen, samt om de ble funnet eller ikke når man gjør et oppslag i datastrukturen man har bygget opp med de N første strengene. Tips til implementasjon Se oppgave 1 angående I/O-håndtering i Java. Angående uttesting skulle det her være svært greit å sette opp testdata selv, men det vil bli lagt ut et datasett på kurssiden. 4

Leveringsanvisning Det skal kun leveres kildekode og ett enkelt PDF-dokument som besvarelse. Kommentarer til besvarelsen som du ønsker å gi kan du legge på starten av PDF dokumentet. Dersom du er klar over en svakhet i algoritmen som slår ut på et spesifikt tilfelle kan du også (hvis du vil, dvs. ønsker tilbakemelding om hvor feilen ligger) legge ved et datasett som demonstrerer dette og henvise til det i besvarelsen. Legg kildekoden (så mange filer du vil, men ikke spre koden over flere mapper) og et dokument kalt oblig1.pdf i en mappe kalt: oblig1_<ditt brukernavn>. Pakk mappa i en tar.gz-fil eller zip-fil med samme navn. For eksempel tar cvzf oblig1_kjetimh.tar.gz oblig1_kjetimh Send fila til: inf4130-1@ifi.uio.no. Dersom du ønsker kan du eventuelt legge ved et plain text-dokument i stedet for PDF, kalt oblig1.txt (men det kan jo konverteres med f.eks. kommandoen a2ps eller a2pdf). [slutt] 5