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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Tentamen TEN1 HI

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

Seminarium 13 Innehåll

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

Föreläsning 4 Datastrukturer (DAT037)

Tentamen, Algoritmer och datastrukturer

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Länkade strukturer. (del 2)

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

Tentamen Datastrukturer D DAT 035/INN960

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.

Exempeltenta GruDat 2002/2003

Föreläsning 9 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

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

Tentamen Datastrukturer (DAT036)

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 13 Innehåll

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

DAI2 (TIDAL) + I2 (TKIEK)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 3. Stack

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

Länkade strukturer, parametriserade typer och undantag

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

Trädstrukturer och grafer

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

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

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 9 Innehåll

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer för D2 DAT 035

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

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

Tentamen Datastrukturer (DAT037)

Föreläsning 3. Stack

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

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 4 Innehåll

Facit Tentamen TDDC kl (6)

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

Algoritmer och datastrukturer

Föreläsning 4 Datastrukturer (DAT037)

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

13 Prioritetsköer, heapar

Tentamen TEN1 HI

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning Datastrukturer (DAT036)

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT036)

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Lösningsförslag till exempeltenta 1

Tentamen Datastrukturer D DAT 036/DIT960

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

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

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

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

PROGRAMMERING-Java Omtentamina

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Lösningsförslag till exempeltenta 2

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

TDDC30 Programmering i Java, datastrukturer och algoritmer

Föreläsning 11. ADT:er och datastrukturer

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 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Tentamen Datastrukturer (DAT036)

Fredag 10 juni 2016 kl 8 12

Dugga Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Föreläsning 13. Träd

Föreläsning 1 Datastrukturer (DAT037)

Transkript:

Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2007-03-13 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg: Max poäng 43 _ >= 17 poäng ger betyg 3 _ >= 26 poäng ger betyg 4 _ >= 35 poäng ger betyg 5 Övrigt: Det finns två olika sorters frågekategorier, de som skall besvaras genom programmerings 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. Koden skall innehålla lämpliga ledtexter (utskrifter) som instruerar användaren vad som krävs av honom / henne. 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! / Nicolina Månsson

Uppgift 1 Tidskomplexitet (1p+2p+2p+1p+2p) Studera följande algoritm: public static <T extends Comparable<T>> void förvirra(t[] a) for( int p = 1; p < a.length; p++ ) T tmp = a[ p ]; int j = p; for( ; j > 0 && tmp.compareto( a[ j - 1 ] )<0; j-- ) a[ j ] = a[ j - 1 ]; a[ j ] = tmp; a) Vad gör algoritmen? Beskriv den genom att ge ett exempel. b) Ange en uppskattning av exekveringstiden i form av Big-Oh notation. Motivera svaret. c) Hur påverkas exekveringstiden för algoritmen om input storleken dubbleras? d) Kan en preliminär ordning av elementerna i arrayen påverka exekveringstiden? Motivera. e) Följande algoritm beräknar om arrayen a innehåller två nummer vars summa är k. Ange en uppskattning av exekverigstiden för algoritmen. Motivera dit svar. static boolean sum2tok (int [] a, int k) for(int i = 0; i <= a.length/2+1 ;i++) if(search(k-a[i],a,i))return true; return false; static boolean search(int x, int[]a, int ix) for(int i = 0; i<a.length;i++) if(x==a[i]) return i!=ix; return false;

Uppgift 2 Datastrukturer (4p+ 6p+4p+4p) a)i java standard finns det definierat klassen ArrayList med metoderna insert(<anytype> e), AnyType get(), size(), Iterator iterator () mm... För att skriva ut alla element i en lista av Integer element kan vi använda följande loop: void printall(arraylist<integer> li) for ( int i=0;i<size() i++) System.out.println(li.get(i)); men kan även göra den mer generellt genom att använda listans egen Iterator-objekt. a1) Komplettera nedanstående metod printall() så att den använder Iterator- objektet. Kom ihåg att ett Iterator-objekt har metoderna hasnext() och next(). void printall(arraylist<integer> li) // din kod här a2) Om man vill skriva ut innehållet av en lista i omvänd ordning kan man använda som hjälp en annan datastruktur. Vilken? Implementera sedan metoden med hjälp av din tänkta datastruktur. void printreverse(arraylist<integer> li ) // din kod här b) När man skriver program för enheter med begränsat minne är det viktigt att vi skräddarsyr egna datastrukturer som lämpas bäst för respektive uppgift. Implementera en enkel länkad lista av heltal där en Node definieras som: class Node int varde; Node next; public Node(int ivarde, Node n) varde=ivarde; next=n;

och de enda metoderna är: -insertfirst() -removefirst() -insertlast() -removelast() c) Vid ett tillfälle ville man implementera en heap där varje nod kan ha max tre barn istället för två (som i den binära heapen). Som ni vet lagras elementen för en binär heap i en array med start på position 1 och där barnen (för varje nod x) går att nå på position 2x resp. 2x+1. Er uppgift är att bestämma arraypositionerna för varje barn för noden x i heapen (motsvarande 2x reps. 2x+1 i den binära heapen). En heap med tre barn kan illustreras som följande: d) I vissa specialfall kan man utnyttja en enklare implementering av en prioritetskö än heap utan att förlora i effektivitet. Antag t ex att vi har en mängd element som tilldelas prioritet i form av ett heltal i ett intervall 0..k, där 0 anger högsta prioritet och k lägsta. Vi kan då bilda k+1 vanliga köer, en för varje prioritet. Nya element sätts in i den kö som deras prioritetstal anger. Vid borttagning tar man första element i den första icke-tomma kön. Uppgiften går ut på att implementera en sådan prioritetskö enligt följande specifikation: public class SimplePrioQueue<E> private Queue<E>[] qs; /** Skapar prioritetskön bestående av k+1 tomma köer */ public SimplePrioQueue(int k)... /** Sätter in elementet med prioriteten prio. Om prio har orimligt värde genereras IllegalArgumentException. */ public void insert(int prio, E element)... /** Returnerar element med högsta prioritet; null om priokön är tom */ public E deletemin()...

Implementera konstruktorn samt operationerna insert() och deletemin() Du kan utgå ifrån att det finns en klass Queue<E> med följande operationer: public Queue(); // skapar en tom kö public boolean isempty(); // undersöker om kön är tom public void enqueue(e e); // lägger in e sist i kön public E dequeue(); // tar ut första elementet i kön; null om tom Uppgift 3 Kända algoritmer (4p+4p+2p+2p) a) När en dator beräknar ett aritmetiskt uttryck, omvandlas först uttrycket från infixnotation till postfixnotation. Visa tydligt steg för steg hur denna omvandling går till! Visa stacken hur den förändras för varje tecken i uttrycket. Använd följande uttryck när du visar: ( 2 + 5 ( 8 9) + 3 ( 6 4) ) 4 Ledning! Operatorstacken används på följande sätt: När en operand(7..) syns ska den läggas direkt i en lista, när en operator( +..) syns, alla operatorer med högre prioritet popas från stacken och läggs i listan, därefter ska den nya operatorn pushas på stacken. b) Vilken datastruktur är lämplig att använda i en algoritm som ska avgöra i fall parenteserna matchar varandra i en sträng med blandade parentestyper. Exempel: strängen "ab([c(d)])" har matchande parenteser, men "(ab(v[d)])" har inte det. Implementera en enkel algoritm som använder den tänkta datastrukturen och testar om strängen är rätt paranteserad. Metoden har följande signatur: public static boolean ispranteserad( String uttryck) c)anta att du sorterar en stor array av heltal genom att använda mergesort. Därefter använder du binärt sökning för att fastställa om ett visst heltal finns eller inte i arrayen. Slutligen skriver du ut alla heltal i arrayen. Rangordna de tre algoritmerna utifrån den uppskadade exekveringstiden (BigOh). d) Både quicksort och mergesort är så kallade underkvadratiska sorteringsalgoritmer. Varför kallas de underkvadratiska. Förklara kort sorteringsprincipen för dessa två algoritmer. Uppgift 4 Träd och graph(1p+2p+ 2p+2p+2p)

a) Förklara skillnaden mellan ett binärt träd och ett binärt sökträd. Ge exempel. b)vissa för både obalancerad och balancerad träd, hur det binära sökträdet ( tom i början) utvecklas när du gör insert av följande värde: 3, 1, 4, 6, 9, 2, 5 och 7. c) I ett binärt sökträd hittas det minsta värdet i trädet allra längst till vänster i trädstrukturen. Implementera den metoden findmininsearchtreenode som returnerar det minsta värdet i trädet. static BinaryNode findmininsearchtreenode( BinaryNode n) // här din kod Obs! Se nedan definitionen av en BinaryNode. class BinaryNode Obect element; // The data in the node BinaryNode left; // Left child BinaryNode right; // Right child BinaryNode( Object theelement, BinaryNode l, BinaryNode r) element = theelement; left = l; right = r; d) Nedan finns en graf ( se nedan) som representerar geografiskt skilt placerade platser (städer). Denna graf kan används för att räkna ut den kortaste vägen mellan två platser. Vilken eller vilka grafalgoritmer är lämpliga att använda i detta fallet? Motivera ditt/dina svar. e) Det finns två mycket kända sätt att representera grafer. Vilka? Visa representationen av grafen ovan i båda fallen. Halmstad 13 Växjö 11 Kalmar 9 20 13 21 Karlskrona Malmö