PG 4200 Algoritmer og datastrukturer Innlevering 2

Like dokumenter
PG 4200 Algoritmer og datastrukturer Innlevering 1. Frist: 2.februar kl 21.00

PG4200 Algoritmer og datastrukturer Lab 1. 8.januar I dag skal vi undersøke en rekke velkjente databeholdere i Java:

MED TIDESTIMATER Løsningsforslag

Norges Informasjonsteknologiske Høgskole

Definisjon: Et sortert tre

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

Definisjon av binært søketre

PG4200 Algoritmer og datastrukturer Forelesning 7

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

INF2220: Forelesning 2

Selv-balanserende søketrær

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Binære trær: Noen algoritmer og anvendelser

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

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

INF2220: Forelesning 2

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

Liste som abstrakt konsept/datatype

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

Datastrukturer for rask søking

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

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

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

Algoritmer og Datastrukturer

Oppgave 1. Sekvenser (20%)

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

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

Innhold. Innledning 1

Norges Informasjonsteknologiske Høgskole

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Lars Vidar Magnusson

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

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

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

INF2220: Time 12 - Sortering

INF1010 siste begreper før oblig 2

Binær heap. En heap er et komplett binært tre:

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

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.

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

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

UNIVERSITETET I OSLO

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

PG4200 Algoritmer og datastrukturer Forelesning 10

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

TDT4100 Objektorientert programmering

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

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

N-dronningproblemet Obligatorisk oppgave 1 I120, H-2000

UNIVERSITETET I OSLO

PG4200 Algoritmer og datastrukturer Forelesning 9

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Backtracking som løsningsmetode

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

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

Et eksempel: Åtterspillet

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

INF Algoritmer og datastrukturer

Algoritmer og Datastrukturer

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

INF Algoritmer og datastrukturer

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

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

Pensum: fra boken (H-03)+ forelesninger

København 20 Stockholm

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

PG4200 Algoritmer og datastrukturer forelesning 3. Lars Sydnes 29. oktober 2014

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

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

UNIVERSITETET I OSLO

EKSAMEN. Emne: Algoritmer og datastrukturer

Grunnleggende Datastrukturer

INF1010 Binære søketrær ++

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Hjemmeeksamen 1 i INF3110/4110

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Pensum: fra boken (H-03)+ forelesninger

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Uke 5 Disjunkte mengder

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Algoritmer og datastrukturer E Løkker i Java

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

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Transkript:

PG 4200 Algoritmer og datastrukturer Innlevering 2 Frist: Mandag 21.april 2014 kl 23.55 Utdelt materiale: Se zip-filen innlevering2.zip. Innlevering: Lever en zip-fil som inneholder følgende: PG4200_innlevering_2.pdf: Dokument med kommentarer og drøftinger knyttet til de ulike oppgavene. Tillatte formater: pdf,doc,odt og ren tekst (utf8). measurements.xls: Regneark med målinger. Tillatte formater: xls,ods og ren tekst. Queen.java: Kompilerbar og kjørbar løsning av oppgave 1. WebCrawler.java: Kompilerbar og kjørbar løsning av oppgave 2. BinarySearchTree.java og BinarySeachTreeClient.java: Kompilerbar og kjørbar løsning av oppgave 3. HashTreeSet.java og HashTreeSetClient.java: Kompilerbar og kjørbar løsning av oppgave 4. I oppgave 5 finnes det tre alternativer: Eventuell løsning av alternativ 1 leveres som en skriftlig redgjørelse og et regneark med målinger og analyse i tillegg til kode som viser hvordan målingene ble gjort i PG4200_innlevering_2. pdf og measurements.xls. En eventuell løsning av alternativ 2 leveres som LinkedList. java og LinkedListClient.java. En eventuell løsning alternativ 3 leveres i en fil ved navn SymmetricBoards.java. Når dere følger dette systemet gjør dere rettearbeidet enklere, og dere får dermed raskere tilbakemelding. Dere kan bruke zip-filen innlevering2.zip som et eksempel på hvordan besvarelsen skal organiseres. Grupper: Dere kan levere i frivillig sammensatte grupper på 1-2 personer. 1

Oppgave 1 I innlevering 1 skulle dere løse n-dronning-problemet. Denne gangen skal dere lage en algoritme for å finne ut hvor mange unike løsninger det finnes av dronning-problemet. Her ser du de fire løsningene av 6-dronning-problemet: Man kan si at dette er 4 varianter av samme løsning: Hvis vi tar utgangspunkt i den første av disse løsningene, kan vi lage de andre løsningene på følgende måte: Den andre fremkommer ved speiling om en vertikal linje. Den tredje løsningen fremkommer ved speiling om en (valgfri) diagonal. Den fjerdel løsningen fremkommer ved 90 rotasjon (i valgfri retning). Vi kan oppsummere dette med å si at 6-dronning-problemet moralsk sett bare har 1 løsning. Definisjon: Vi sier at to løsninger av n-dronningproblemet er likeverdige dersom den ene fremkommer av den andre ved rotasjon og speiling. Hva skal gjøres? (i) Skriv metoder hashcode og equals i en klasse som representerer dronningstillinger (som f.eks klassen Board i Queens.java slik at 2

hvis A,B er to Board-objekter som representerer likeverdige løsninger av dronning-problemet, så vil A.equals(B) returnere true to Board-objekter som representerer likeverdige løsninger av dronningproblemet har samme hash-kode. (ii) Bruk disse metodene til å telle antallet løsninger av dronning-problemet. Du kan gjerne benytte java.util.hashset. Tips Forenklet problemstilling: For å komme i gang kan man starte med en enklere problemstilling. Man kan f.eks. betrakte to løsninger som likeverdige dersom de er vertikalt speilvendte versjoner av hverandre. Dette innebærer f.eks at man vil si at 6-dronning-problemet har to løsninger (jfr. figuren på side 2 Isolér operasjonene: En god start kan være å implementere operasjoner for refleksjon og rotasjon av sjakkbrett. Se f.eks klassen BoardOperations. Vurdering Her vil man kunne få en god del uttelling for løsninger som ikke kommer helt i mål men som likevel er på god vei, f.eks ved å gi en fullverdig løsning av en forenklet problemstilling. Alt materialet til denne oppgaven er pakket sammen i Queens.java, blant annet metoder for å generere løsninger av dronning-problemet. Du står naturligvis fritt til å basere deg på din egen løsning fra innlevering 1. 3

Oppgave 2 Bakgrunn I innlevering 1 skulle man lage en rekursiv web-crawler. I denne innleveringen går oppgaven ut på å lage en ikke-rekursiv løsning. Vi ønsker en fleksibel løsning der det er enkelt å veksle mellom bredde først- og dybde først-søk. Dette kan vi oppnå ved å sjonglere mellom ulike implementasjoner av Register-grensesnittet, som er definert i WebCrawler.java. Hva skal gjøres? (i) Skriv en ikke-rekursiv crawl-metode i klassen WebCrawler. Denne metoden kan gjerne benytte seg av BadFifoRegister. (ii) Skriv ferdig FifoRegister og LifoRegister. Her kan du gjerne bruke standardkomponenter som java.util.hashset. (iii) Skriv to metoder crawldepthfirst og crawlbreadthfirst som gjør henholdsvis dybde først- og bredde først-traversering av world wide web. Vurdering Her er det helt i orden å bruke elementer fra standardbiblioteket java. util, som f.eks HashSet. En idé kan være å la seg inspirere av java.util.linkedhashmap. Det legges vekt på at koden gjør akkurat det dokumentasjonen lover. Bakgrunnsmaterialet til denne oppgaven finnes i filen WebCrawler.java. Du står naturligvis fritt til å bruke din egen løsning fra innlevering 1. 4

Oppgave 3 Gjør ferdig klassen BinarySearchTree. Hva skal gjøres? (i) Skriv ferdig find-metoden, samt metodene height og size. (ii) Skriv ferdig metoden iterator. (iii) Bruk treet i en sorteringsalgoritme som vi kan kalle tree sort: Sett elementene inn i treet og hent dem ut igjen i sortert rekkefølge. Vurdering Det legges vekt på at metodene fungerer slik de skal og at de ikke bruker unødig store ressurser. Spesielt gjelder dette iteratoren. I oppgave 5 legges det opp til at man kan forbedre denne sorteringsalgoritmen. Bakgrunnsmaterialet til denne oppgaven finnes i filen BinarySearchTree.java. Legg merke til at vi krever at BinarySearchTree implementerer SimpleSet. 5

Oppgave 4 Lag en implementasjon HashTreeSet av grensesnittet SimpleSet som følger følgende prinsipper: Objektene lagres i et binært søketre. Objektene ordnes etter hash-kode. Idéen bak dette er at sortering etter hash-kode skal forhindre systematisk ubalanse i treet. Et grunnleggende problem med denne datastrukturen er at to ulike objekter kan slumpe til å ha samme hash-kode. Vi sier at objektene kolliderer. Dette må man forholde seg til. Hva skal gjøres? (i) Bruk BinarySearchTree til å bygge en HashTreeSet-implementasjon. (ii) Undersøk sammenhengen mellom antall elementer, høyde og tidsbruk for søk etter objekter, og vurder om HashTreeSet er en god oppfinnelse. Tips Mål høyde, størrelse og tidsbruk for søk etter objekter. Fremstill målingene grafisk. Sammenlign ytelsen til din implementasjon med ytelsen til implementasjonen TreeSet. Sammenlign med java.util.hashset. Det kan tenkes at oppførselen avhenger av dataene vi lagrer. Man kan f.eks studere Unike tall (Integer) i sortert rekkefølge 6

Unike ord (String) i sortert rekkefølge Unike ord (String) i tilfeldig rekkefølge Dersom man ønsker å teste ut datastrukturen på sorterte og usorterte ord fra det virkelige liv, kan man f.eks ta for seg filene shakespeare_sorted_unique.txt og shakespeare_unique.txt. Disse inneholder 38679 ulike ord. Her bør du bygge videre på BinarySearchTree, enten ved å bruke et BinarySearchTree-objekt, ved arv, eller ved å modifisere klassen. 7

Oppgave 5 Velg ett alternativ. Alternativ 1: Analyse Lag en enkel tree sort-algoritme basert på klassen java.util.treeset. Mål tidsforbruket for sortering med din egen tree sort, tree sort-algoritmen basert på TreeSet, java.util.arrays.sort. Gjør målinger for ulike problemstørrelser, presentér resultatene grafisk og undersøk følgende Hva skjer når man sorterer usorterte lister? Hva skjer når man sorterer allerede sorterte lister? Vil du si at disse algoritmene har kjøretid av orden O(n log n)? Her kan man ha nytte av de vedlagte tekstfilene med ord av William Shakespeare. Alternativ 2: In-place sortering av dobbel-lenket liste Binære trær og dobbeltlenkede lister har en ting felles; nemlig at hver node har minst to pekere. I trær kalles pekerne gjerne left og right. I lister kalles de gjerne previous og next. Dette betyr at vi (når vi ser bort fra 8

ordbruken) kan bygge om dobbel-lenkede lister til binære søketrær. Vi kan faktisk bruke dette til å definere en sorteringsalgoritme: (i) Bygg først om listen til et søketre (ii) Bygg så om søketreet til en sortert liste. Ta gjerne utgangspunkt i LinkedList.java, som er en forenklet versjon av java.util.linkedlist. Alternativ 3: Symmetriske løsninger av dronningproblemet Finn symmetriske løsninger av dronning-problemet. Vi er interessert i to ulike symmetrigrader: 1 (i) 180 rotasjonssymmetri (Symmetri om midtpunktet) (ii) 90 rotasjonssymmetri I 6-dronning-problemet (jfr. oppgave 1) er alle løsningene 180 rotasjonssymmetriske, mens i 5-dronning-problemet har vi f.eks følgende (90 ) rotasjonssymmetriske løsning: 1 Finnes det noen speilingssymmetriske løsninger av dronning-problemet? 9