Tentamen i Algoritmer & Datastrukturer i Java

Relevanta dokument
Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 3. Stack

Föreläsning 3. Stack

Föreläsning 8: Exempel och problemlösning

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 2 Datastrukturer (DAT037)

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Tentamen Datastrukturer (DAT036)

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Föreläsning 14 Innehåll

Föreläsning Datastrukturer (DAT036)

Seminarium 13 Innehåll

Föreläsning 9 Innehåll

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 4 Datastrukturer (DAT037)

Länkade strukturer. (del 2)

Länkade strukturer, parametriserade typer och undantag

TDDC30 Programmering i Java, datastrukturer och algoritmer

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

13 Prioritetsköer, heapar

Föreläsning 2. Länkad lista och iterator

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Föreläsning 4 Innehåll

Föreläsning Datastrukturer (DAT036)

Tentamen TEN1 HI

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Exempeltenta GruDat 2002/2003

DAI2 (TIDAL) + I2 (TKIEK)

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen TEN1 HI

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Föreläsning 3 Datastrukturer (DAT037)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen kl Uppgift 4. Uppgift 5

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen, Algoritmer och datastrukturer

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 8. Mängd, Avbildning, Hashtabell

Tentamen Datastrukturer (DAT037)

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Programmering för språkteknologer II, HT2014. Rum

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till exempeltenta 1

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 13 Innehåll

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Kurskod D0010E Datum Skrivtid 5tim

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Dugga Datastrukturer (DAT036)

Lösningsförslag till exempeltenta 2

Tentamen Datastrukturer, DAT037 (DAT036)

Sökning och sortering

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Teoretisk del. Facit Tentamen TDDC (6)

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen Datastrukturer (DAT036)

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Transkript:

Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng _ >=20 poäng ger betyg 3 _ >=30 poäng ger betyg 4 _ >=40 poäng ger betyg 5 Övrigt: Det finns två olika sorters frågekategorier, de som skall besvaras genom programmering och de som skall besvaras genom förklaringar med text och illustrationer. Programmeringslösningarna skall i största mån vara skrivna i korrekt Java-syntax. Koden skall vara välstrukturerad och lättläst. Om en lösning är uppenbart klumpig och det anses att tentanden skall känna till en smidigare lösning kan den klumpiga lösningen medföra poängavdrag. Förklaringslösningar bör, om tillämpningsbart, innehålla illustrationer på relevanta datastrukturer och använda algoritmer. Tänk på att vara noggrann och strukturerad. Det är Du som skall visa vad Du kan! Lycka till!

Uppgift 1 Tidskomplexitet (2p+2p+4p+2p) a) Betrakta följande Javametod Vad är tidskomplexiteten för ett anrop f(n)? Motivera ditt svar. public int f(int n) int sum = 0; for (int i = n; i >=1; i=i/2) sum = sum + i; return sum; b) Binärsök algoritmen är tänkt för arrayer där data är sorterad. public static int binarysearch( int [ ] a, int x ) // här kommer Tony att lägga till kod ( se uppgift d) int NOT_FOUND=-1; int low = 0; int high = a.length - 1; int mid; while( low <= high ) mid = ( low + high ) / 2; if ( x> a[ mid ] ) low = mid + 1; else if(x< a[ mid ] ) high = mid - 1; else return mid return NOT_FOUND; Tony har inte gått Algoritmer och Datastruktur kursen och anropar metoden men en osorterad array. Vad kommer det att hända? Kraschar programmet? Hur påverkar detta sökningen? Motivera med exempel.

c) Då Tony inser att något inte är som det skall när han kör programmet med osorterad input, tänker han ut en lösning: Att komplettera binarysearch metoden med några rader kod som testar om input arrayen är sorterad. Implementera en algoritm med bästa tänkbara tidskomplexitet som testar om en array är sorterad. d) Hur påverkar din algoritm tidskomplexiteten för binarysearch? Vad tycker du om Tonys lösning? Uppgift 2 Datastrukturer (2p+4p+4p) a)förklara vad som är olämpligt i följande exempel. Beskriv också hur man ska göra istället. Motivera. 1)En idrottsförening vill ha ordning på alla sina medlemmar. Idrottsföreningen väljer att lagra medlemmarna (som är av typen Person-objekt) i en hashtabell. Som hashkod väljer man de två första siffrorna i medlemmens personnummer. 2) En stack implementeras genom att elementen lagras i en array. Vid push() sätts elementet in alltid på position 0 i arrayen och vid pop() hämtas elementet från position 0. b) I en dator vill man att många processer ska kunna köra samtidigt även om man bara har tillgång till en CPU. Detta åstadkommer man genom att varje process får köra en liten stund och sedan bytas ut mot nästa. Denna fördelning av CPU-tid kan lösas på många olika sätt. Ett av de enklaste är Round Robin: Processerna placeras i en kö och får tillgång till CPUn i tur och ordning. Alla processer får lika lång CPU-tid på sig. När den process som står i tur har använt sin tilldelade CPU-tid hamnar den sist i kön igen, såvida den inte exekverat färdigt. Antag att vi har fyra processer med namn, p1, p2, p3, p4 som behöver exekveringstiderna 250 ms, 50 ms, 400 ms respektive 400 ms. Antag också att den CPU-tid varje process får (kallas tidskvantum) är 100 ms. När alla processer sätt in i kön ser kön med ut på följande sätt.

Vid varje dequeue() minskas exekveringstiden för processen med tidskvantum 100 ms. Q: p1 250 ms, p2 50 ms, p3 400 ms, p4 4004 ms f b Visa utvecklingen av kön (med front och back pekarna) efter varje enqueue() och dequue() tills alla processer har exekverat färdig. Antag att du använder dig av en array baserad kö, se bilaga. c) Implementera ett Simuleringsprogram som simulerar de beskriva scenariet. Ett Process-objekt beskrivs av klassen Process, se nedan. Programmet börjar med att du skapar 4 processer. Välj själv namn för dina processer, men slumpa processtiden(timeleft) till ett heltasvärde i intervallet 100-400 med new Random().nextInt(int maxvalue); Använd för tidskvantum 100 ms. För att simulera att programmet låter processorn exekvera använd Thread.sleep(tidskvantum); Efter varje enqueue ()/ dequeue ()skall processinformationen skivas ut. public class Process private String processname; // processnummer private int timeleft; // tid kvar att exekvera // Skapar en process med namen processname och med timeleft ms kvar att exekvera. public Process(String processn, int timeleft) processname = processn; timeleft = timeleft; /** Returnerar tiden kvar att exekvera (i ms). */ public int gettimeleft() return timeleft; /** Sätter tiden kvar att exekvera till timeleft ms. */ public void settimeleft(int timeleft) this.timeleft = timeleft;

/** Returnerar en sträng som representerar processen. */ public String tostring() return "p" + processnbr + " " + timeleft + " ms"; Uppgift 3 - Länkade datastrukturer(10 p) En buffert kan vara en länkad lista med begränsad storlek. I denna uppgift skall en klass BoundedBuffer, som representerar en buffert, implementeras. Den övre gränsen för antalet element som samtidigt får befinna sig i bufferten anges som parameter till konstruktorn. Om man anropar insättningsoperation när bufferten innehåller det maximalt tillåtna antalet element så sker ingen insättning. I stället genereras en exception. Elementen i bufferten skall placeras i en enkellänkad lista. Klassen har två attribut (head och tail) som refererar till första respektive sista noden i denna lista. Båda är tomma noder som finns för att markera början och sluten av listan. Dessutom finns det ett heltalsattribut (maxsize), som anger maximalt antal tillåtna element samt ett heltalsattribut (size), som anger hur många element som finns i bufferten: Klassen Nod är välbekant dig och representerar en Nod i länkade listan. class Node Object element; Node next; public Node(Object x) element = x; next = null;

public class BoundedBuffer Node head; Node tail; int maxsize; int size; /** Konstruktor, skapar två toma noder som head och tail pekar på, dvs, noderna head och tail får inte innehålla data. Sätter maxsize värdet för bufferten */ public BoundedBuffer(int thesize)... /** Sätter in elementet x i bufferten om den inte är full. Om bufferten innehåller maximalt antal tillåtna element genereras BufferOverflowException. */ public void insert(object x)... /** Returnerar och tar bort första elementet i bufferten. Om bufferten är tom returneras null. */ public Object getfirst()... /** Undersöker om bufferten innehåller maximalt antal tillåtna element. */ public boolean isfull()... /** Undersöker om bufferten är tom */ public boolean isempty()... /**Skriver ut innehållet i bufferten*/ public void print... a) Implementera konstruktorn och alla operationer enligt beskrivningen. Du får anta att klassen BufferOverflowException finns redan implementerad.

Uppgift 4 - Träd och annat (6p+4p+2p+2p) a) Studera följande träd: 1) Är trädet ett binärt sökträd? Motivera ditt svar genom att kort beskriva datastrukturen binärt sökträd. 2) Är trädet ett balanserat träd? Motivera ditt svar genom att kort beskriva begreppet balanserad träd. 3) Är trädet en heap? Motivera ditt svar genom att kort beskriva datastrukturen heap. b) För att omvandla aritmetiska utryck till postfix notation används operand stack och för att beräkna aritmetiska uttryck i postfix notation används en operator stack. Beskriv dessa algoritmer med hjälp av ett enkelt uttryck som 5+3*4 2 /6. c) I denna uppgift behandlas hashtabeller. 1) Antag att man har en hashtabell där elementen lagras i en array av storlek 11 och en hash-funktion h(x)=x%11. Linjär teknik används för att hantera kollisioner. Antag att man satt in följande element 34,45,3, 67, 65, 19,1,17. Hur ser tabellen ut efter dessa insättningar? 2) Om man önskar ta bort elementet 34 och bara lämnar dess plats i tabellen tom uppstår det problem. Vilket är problemet?

d) Förklara varför Quick sort är en så kallad subkvadratisk sorterings algoritm. Visa för följande array 7 13 5 2 18 10 hur sorteringen sker. Bilaga 1. public class ArrayQueue<AnyType> public ArrayQueue( int size ) thearray = (AnyType []) new Object[ size]; makeempty( ); public boolean isempty( ) return currentsize == 0; public void makeempty( ) currentsize = 0; front = 0; back = -1; public AnyType dequeue( ) if( isempty( ) ) throw new UnderflowException( "ArrayQueue dequeue" ); currentsize--; AnyType returnvalue = thearray[ front ]; front = increment( front ); return returnvalue;

public void enqueue( AnyType x ) if( currentsize == thearray.length ) doublequeue( ); back = increment( back ); thearray[ back ] = x; currentsize++; private int increment( int x ) if( ++x == thearray.length ) x = 0; return x; private void doublequeue( ) AnyType [ ] newarray; newarray = (AnyType []) new Object[ thearray.length * 2 ]; // Copy elements that are logically in the queue for( int i = 0; i < currentsize; i++, front = increment( front ) ) newarray[ i ] = thearray[ front ]; thearray = newarray; front = 0; back = currentsize - 1; private AnyType [ ] thearray; private int currentsize; private int front; private int back;