Datastrukturer och algoritmer 7,5 hp (5DV043), våren 2009 |
|
|
|
||
SyfteSyftet med denna obligatoriska uppgift är att du ska
UppgiftDu ska implementera den abstrakta datatypen tabell på tre olika sätt. Du ska även analysera dina implementationers för- och nackdelar och redovisa både implemenation och analys i en skriven rapport. OBS!
ImplementationGränsytan på den tabell du ska implementera finns i sin helhet i filen Table.java. Dina tabeller ska alltså implementera interfacet Table! I fallen med dynamiska listor nedan ska ni först implementera den abstrakta datypen Lista och sedan implementera tabellen med hjälp av denna lista. Gränsytan till ADT Lista finns i filen List.java och Gränsytan till positionen finns i Pos.java. Tabell konstruerad med hjälp av en statisk ListaUtnyttja den inbyggda array-konstruktionen i språket ("hakparenteserna" [ ] med andra ord...). Bygg sedan tabellen utifrån det så att storleken är statisk och rymmer max tusen element. Se dock till att koden är skriven på ett snyggt sätt så att man bara behöver ändra på ett ställe i koden för att kunna kompilera en tabell med större storlek. Kalla den nya abstrakta datatypen för ArrayTable. Tabell konstruerad med hjälp en dynamisk listaI denna variant ska du konstruera en tabell med hjälp av en dynamisk lista. Du får själv bestämma om listan ska vara enkel- eller dubbellänkad. Kalla den nya abstrakta datatypen för ListTable. Listan ska implementeras som en separat abstrakt datatyp. Tabell konstruerad som Move To Front-listaÄven i denna variant ska du konstruera en tabell med hjälp av en dynamisk struktur, med det tillägget att när du läser av ett element i tabellen (LookUp) ska du flytta detta element först i listan. Det gör listan till en Move To Front-lista. Kalla den nya abstrakta datatypen för MTFTable. Listan ska implementeras som en separat abstrakt datatyp. Frivillig extra uppgiftImplementera tabellen som en hash-tabell eller som ett sorterat träd istället för MTF-lista. Notera att denna extra uppgift kan innehålla teori som vi inte hunnit gå igenom på kursen ännu. Det ingår i uppgiften att själv ta fram den information som behövs för att genomföra den. AnalysI dokumenationen av din obligatoriska uppgift ska du diskutera de olika implementationerna av tabell som du gjort. Analysen ska ske i löpande text och inte i fråga-svar form. Minimikravet för analysen är att den ska besvara följande frågor:
Berätta om ditt arbete med laborationen. Vad var lätt, vad var svårt, hur löste du de problem som dök upp? Har du synpunkter på själva uppgiften? TestprogrammetSyftet med denna obligatoriska uppgift är inte att du ska spendera tid på att skriva ett testprogram, därför får du använda dig av ett färdigt testprogram (se nedan för länkar). För att testprogrammet ska fungera måste du följa den givna gränsytan för tabell. Om din implementation klarar alla tester kommer testprogrammet skriva ut fyra olika mätvärden för hur lång tid det tog att göra insättningar, uppslagningar och raderingar i tabellen. Märk att testprogrammet innehåller numeriska konstanter som du kan (och antagligen bör) ändra för att få användbara mätvärden. Resultaten från testprogrammet kommer att behövas för att kunna utföra analysen. För att använda testprogrammet så kompilerar du TableTest.java som finns här tillsammans med de hjälpklasser som den behöver.
Du kör testprogrammet antingen genom att skriva OBS!För att undvika onödiga "O:n", observera att din lösning inte automatiskt är godkänd för att den klarar av det testprogram som finns på den här sidan. Tänk över om det finns ytterligare fall som borde testas och koden ska också uppfylla kraven på god programmeringsmetodik (indentering, kommentering, lämpliga variabelnam, bra modularisering etc). RedovisningLämna in en rapport som innehåller följande:
Den obligatoriska uppgiften ska lösas individuellt och du ska kunna redogöra i detalj för varje del i din lösning. Ange referenser till de material du använt för att lösa laborationen i din rapport. För exempel på hur man skriver referenser se http://www.ub.umu.se/global/biblref.htm eller http://www.cs.umu.se/education/examina/InternetCite/citera.htm Rapporten lämnas i kursens lablåda som finns ett par meter från Coca-cola automaten på plan 4 i MIT-huset och är märkt med kursens namn och kurskod (5DV043) senast 20 April, 12.00. Kom ihåg reglerna för obligatoriska uppgifter! Tips
Senast uppdaterad 2009-03-29 14:34 /kurser/5DV043/VT09/ou/ou2/java.html |