UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF Innleveringsoppgave 6

UNIVERSITETET I OSLO

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Binære søketrær ++

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

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

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

UNIVERSITETET I OSLO

København 20 Stockholm

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

INF Ekstrainnlevering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Lenkelister. Lister og køer.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

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

Versjon (vil bli endret).

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Definisjon av binært søketre

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Algoritmer og datastrukturer Eksamen 22. februar 2011

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

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

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

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

Definisjon: Et sortert tre

Velkommen til INF1010

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

Obligatorisk oppgave 4: Lege/Resept

UNIVERSITETET I OSLO

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

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

Oppgave 1. Sekvenser (20%)

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

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:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

UNIVERSITETET I OSLO

Vanlige datastrukturer. I dette lysarksettet

Løsningsforslag til INF110 h2001

Algoritmer og Datastrukturer

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

UNIVERSITETET I OSLO

Transkript:

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Eksamensdag: 6. juni 2013 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg: Ingen Tillatte hjelpemidler: Alle trykte og skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Faglærer kommer tidligst etter en time og det er da viktig at du har sett grundig gjennom hele oppgaven og notert deg hva du synes er uklart. Del 1 og 2 henger sammen. Del 3 og 4 kan løses uavhengig av resten, bortsett fra typen til objektene i lenkelistene. Hvis du ikke besvarer del 1 og 2, kan du først skrive ned definisjonen av en enkel klasse som har de samme egenskapene som objektene i beholderen i del 1 og 2. Del 2, 3 og 4 vil avhenge av klassestrukturen du lager i del 1. Derfor er det lurt å vente med å føre inn svaret på del 1 til du er helt sikker på hva som er en hensiktsmessig struktur for å løse resten av oppgaven. Bakgrunn for problemet som skal løses Å telle forekomster av ord i dokumenter, filer, nettsider o.l er i mange sammenhenger interessant informasjon. Dette brukes av søkemotorer på internett, og av litteraturforskere for å studere hvilke ord som brukes mest av en forfatter. Navneforskere lager statistikk over de mest populære navnene. I INF1010 kunne vi tenke oss å lage en oversikt over hvilke variabelnavn som er mest populære når vi programmerer. En frekvensbeholder Du skal blant annet skrive et javaprogram for en slags beholder for å lagre og telle ord eller navn (noe av type String). Beholderen skal i tillegg til å holde rede på hvilke ord som er satt inn, også ha informasjon om hvor ofte et ord er lagt inn. En slik beholder kaller vi en frekvensbeholder, eller kortere en beholder. Datastrukturen i beholderen skal være et binært søketre, hvor hver node i tillegg til pekerne til de to subtrærne også har en peker til et objekt med et ord. Legg merke til at vi kaller dette en beholder, selv om ikke alle objekter som legges inn blir tatt vare på. (Fortsettes på side 2.)

Eksamen i INF1010, 6. juni 2013 Side 2 Del 1 vekt 15% Klassehierarki for objekter som skal inn i beholderen I beholderen skal vi kunne legge inn alle objekter som har en tekststreng som identifiserer objektet. Vi kaller denne tekststrengen id heretter. Beholderen trenger tilgang til objektets id for å kunne ordne objektene alfabetisk og for å kunne bestemme om to objekter er like (har samme id). Altså to egenskaper ved objektene som beholderklassen trenger: objektets id (for å ordne treet) objektets frekvens (for holde rede på antall forekomster av objekter med denne id) Klassene som beskriver objektene får disse egenskapene ved arv fra superklasser og/eller grensesnitt. Oppgave 1a Skriv grensesnitt/superklasse (eller en kombinasjon) slik at at objektene som skal inn i beholderen får de to egenskapene når objektene er instanser av klasser som utvider eller implementerer disse. I del 2 vil vi få behov for en egenskap til. Tar du med denne egenskapen her, kan du bare henvise til denne deloppgaven i svaret på oppgave 2g. Forklar kort (med ord) hvorfor du har valgt som du gjør. Oppgave 1b Skriv to klasser som beskriver objekter som kan legges i beholderen. Den ene skal hete Person og den andre Ord. Et ordobjekt har en tekststreng ord, samt en tekststreng til for å lagre info om hvor ordet kommer fra. Definer klassen slik at når objekter av klassen legges inn i frekvensbeholderen, er det like ord som telles. En person har et fødselsnummer, et fornavn og et etternavn. Definer klassen slik at når objekter av klassen legges inn i frekvensbeholderen, er det like fornavn som telles. I beholderen vil det da bare ligge ett personobjekt for personer med samme fornavn. Vanligvis det første som ble lagt inn. Del 2 vekt 50% Lage en frekvensbeholder Beholderen skal skrives som en klasse og ha en indre nodeklasse med en peker til objektene som settes inn. Nodeobjektene ordnes i et binært søketre (frekvenstreet) alfabetisk etter verdien til objektets id (se oppgave 1). To objekter med samme id regnes som like i beholderen. Dersom flere objekter har samme id, skal frekvensbeholderen bare ta vare på ett av dem. Beholderen har også en peker til rota til frekvenstreet. I tillegg kan beholderen ha variable for antall noder og andre hjelpevariable som vil gjøre programmeringen av metodene enklere. (Fortsettes på side 3.)

Eksamen i INF1010, 6. juni 2013 Side 3 Beholderen har metoder for å sette inn, ta ut og finne igjen objekter. Nodeklassen kan også ha metoder som rekursivt søker i, eller traverserer frekvenstreet, samt hjelpevariable som du mener du trenger. Objektets frekvens svarer til antall objekter med lik id som er satt inn i beholderen. Et objekts frekvens kan være et positivt heltall eller 0. Frekvens lik 0 betyr ingen forekomster av objekter med denne id. Objekter med frekvens 0 skal ikke være synlig utenfor beholderen. Oppgave 2a Skriv javakode for klassen som definerer datastrukturen i beholderen. Ta med den indre klassen og annen datastruktur. Du skal ikke programmere noen metoder i denne oppgaven, hverken i beholderen eller i nodeklassen. (Det kan være lurt å vente med å gjøre ferdig denne deloppgaven til du har skrevet ferdig, eller i hvert fall grundig tenkt igjennom de fleste metodene nedenfor.) Oppgave 2b Skriv metoden settinn i beholderen. Metoden legger et objekt inn i beholderen. Hvis objektet ikke finnes fra før, lages en ny node som har en peker som settes til å peke på objektet, og objektets frekvens settes til 1. Hvis et objekt med samme id finnes i beholderen fra før, økes det gamle objektets frekvens med 1, og det lages ikke noe nytt nodeobjekt, og det nye objektet blir ikke satt inn. Oppgave 2c Tegn datastrukturen i beholderen etter at objekter med disse id-ene er satt inn: nu, ro, gå, ro, is, is, av, yr, ro, nu, er, is, ro, av, is, is Verdien is forekommer 5 ganger. Objektet med id is skal dermed ha frekvens 5 i tegninga. Tegn først en forstørret versjon av dette objektet med navn og typer på variablene. Hvis du bruker en generisk klasseparameter som type for objektene, kan du erstatte den med klassen Ord i tegninga av dette ene objektet. Objektene i treet kan du forenkle, men husk å ha med pekere og verdier for id (ordningskriterium) og frekvens. Husk å tegne inn en peker til rota med navn og type. Hint: I tilfelle du er ustø i alfabetet, så er ordene ovenfor i stigende alfabetisk rekkefølge: av, er, gå, is, nu, ro, yr. Oppgave 2d Skriv en metode fjern som fjerner et objekt fra beholderen. Et objekt fjernes fra beholderen ved at frekvensen til objektet settes til 0. Hvis et objekt som ikke finnes eller har frekvens 0 fjernes, skal det kastes et unntak. Oppgave 2e Skriv metoden finnobjekt(string s) som skal returnere en peker til objektet med id lik s hvis et slikt finnes. (Fortsettes på side 4.)

Eksamen i INF1010, 6. juni 2013 Side 4 Oppgave 2f Skriv metoden maksfrekvens som returnerer frekvensen til objektet (eller objektene) som har den høyeste frekvensen i frekvensbeholderen. (Slutt på oppgave 2f.) De to neste metodene skal returnere 0 eller flere objekter fra frekvensbeholderen. Her kunne vi valgt å returnere disse i en array, HashMap eller lignende, men vi skal i denne oppgaven gjøre det enkelt. Vi utvider definisjonen av objektene i beholderen med en variabel til, en nestepeker, slik at de kan kjedes sammen i lenkelister. I frekvensbeholderen brukes pekeren til å lage lenkelister av objekter i metodene i oppgave 2h og 2i. Returverdien for metodene kan da enkelt være det første objektet i en lenkeliste. Utenfor frekvensbeholderen brukes pekeren til å løpe igjennom listene som disse metodene returnerer. Med begrepet peker til en liste i oppgavene 2h og 2i, menes det samme som en peker til det første elementet i en lenkeliste. Oppgave 2g Ut fra den klassestrukturen du har valgt for objektene i oppgave 1, hvor skal definisjonen av nestepekeren være og hvilken type skal den ha? Oppgave 2h Skriv metoden listallealfabetisk. Metoden returnerer en liste med alle objektene i beholderen sortert i stigende alfabetisk rekkefølge. Oppgave 2i Skriv metoden listordmedfrekvenslik. Metoden har som parameter et heltall. Den returnerer en peker til en liste med objekter som har frekvens lik innparameteren. Lista er ordnet i stigende alfabetisk rekkefølge. Eksempel: Hvis metoden kalles med kallet listordmedfrekvenslik(247) skal lista som returneres innholde alle objekter med frekvens lik 247. Koden i oppgave 2i blir lik koden i 2h. I 2i holder det om du tydelig viser hvor metodene er ulike. Del 3 vekt 15% En del av en testklasse Oppgave 3a Skriv en metode (som kan ligge i en testklasse) som skriver ut en oversikt over frekvenser og id-er i en beholder. Metoden har en parameter som peker på en frekvensbeholder som er ferdig fylt opp. Du skal bare programmere metoden, ikke testklassen. Metoden skal skrive ut en oversikt over frekvensene som forekommer i beholderen. Utskriften skal starte med en linje med maks frekvens etterfulgt av id-er som har denne frekvensen. Så kommer nye linjer etter synkende frekvens. Frekvenser som ikke har noen forekomster skal ikke skrives ut. Oppgave 3b La oss kalle lista som returneres ved et kall på listallealfabetisk for en frekvensliste. (Fortsettes på side 5.)

Eksamen i INF1010, 6. juni 2013 Side 5 Skriv en metode i testklassen som har to frekvenslister som parametre, og som fletter dem sammen til én. Lista som returneres skal fortsatt være alfabetisk sortert. For objekter med id som forekommer i begge innlistene, skal objektet bare forekomme én gang i den sammenflettede lista og dette objektet skal ha frekvens lik summen av frekvensene til de to objektene i innlistene. Del 4 vekt 20% Flette sammen frekvenslister ved hjelp av tråder I denne oppgaven skal du skrive javakode for å flette sammen frekvenslister parallelt ved hjelp av tråder. Du har en tabell (array) kalt allebeholdere av pekere til frekvensbeholderobjekter. Alle frekvensbeholderne er fylt opp. Målet med oppgaven er å hente ut frekvenslister (ved hjelp av listallealfabetisk) fra alle beholderne, flette frekvenslistene sammen to og to, til programmet til slutt sitter igjen med én frekvensliste som er en sammenfletting av alle frekvenslistene som ble hentet ut av allebeholdere. Du kan fritt bruke flettemetoden fra oppgave 3b uten å forklare hvor den bør skrives, også om du ikke har svart på oppgave 3b. Du skal gjøre dette ved hjelp av tråder, slik at flettingen går så raskt som mulig når programmet blir kjørt på en maskin med mange kjerner. Oppgavesett slutt. Lykke til og god sommer! Stein Michael Storleer og Stein Gjessing