Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Relevanta dokument
Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA30 Programmering i Java fortsättningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Samlingar Collection classes

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Interfacen Set och Map, hashtabeller

Föreläsning 11 Innehåll

Diskutera. Hashfunktion

Samlingar Collection classes

Föreläsning 10 Innehåll

Inlämningsuppgift och handledning

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Collection classes. Interface, första exempel. Interface (forts) Men först

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 14 Innehåll

Collection Classes. bjectorienterad programmering Sida 1

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

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

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

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 9 Innehåll

Länkade strukturer. (del 2)

Tentamen FYTA11 Javaprogrammering

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

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

Tentamen, Algoritmer och datastrukturer

Programmering fortsättningskurs

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Föreläsning 4 Innehåll

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

Algoritmer och datastrukturer

Stackar, köer, iteratorer och paket

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

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

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Tentamen Datastrukturer (DAT037)

BST implementering, huvudstruktur

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/DIT960

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning 3 Datastrukturer (DAT037)

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 9 Innehåll

Tentamen Programmering fortsättningskurs DIT950

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

Föreläsning 7. Träd och binära sökträd

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

Objektorienterad Programkonstruktion

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

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

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

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

Föreläsning 2 Datastrukturer (DAT037)

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Föreläsning 2 Innehåll

Generiska programenheter. Generiska programenheter Samlingar

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

Föreläsning 7. Träd och binära sökträd

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Lösningsförslag till tentamen Datastrukturer, DAT037,

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Föreläsning 3. Stack

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen i Algoritmer & Datastrukturer i Java

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 3. Stacks 1

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

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

LULEÅ TEKNISKA UNIVERSITET

Tentamen Datastrukturer, DAT037 (DAT036)

TDDC30 Programmering i Java, datastrukturer och algoritmer

13 Prioritetsköer, heapar

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

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Lösningsförslag till exempeltenta 1

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

Tentamen i Algoritmer & Datastrukturer i Java

Objektorienterad Programmering (TDDC77)

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

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2012 12 20, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt ger uppgifterna 9 + 9 + 9 + 9 = 36 poäng. Tillåtet hjälpmedel: Java snabbreferens. För full poäng ska dina lösningar inte vara onödigt ineffektiva. I slutet av tentamen finns dokumentation av någon/några klasser och interface i Java Collections Framework. När rättningen är klar meddelas detta på kursens hemsida (cs.lth.se/edaa01). 1. a) I kursen har vi gått igenom ett antal olika sorteringsalgoritmer, t.ex. urvalssortering, merge sort och quicksort: Följande vektor ska sorteras: 50-25 13 147 26-2 28 80 42 10 I nedanstående exempel har dessa tre algoritmer använts. I exemplen visas hur vektorn ser ut efter ett visst läge i respektive sorteringsalgoritm. 1. 10-25 13-2 26 147 28 80 42 50 2. -25 13 26 50 147-2 10 28 42 80 3. -25-2 10 147 26 50 28 80 42 13 Para ihop varje alternativ med rätt sorteringsalgoritm. Motivera dina svar (kort och koncist ett par meningar räcker). b) En heap ritas ofta i form av ett träd, men implementeras istället med hjälp av en vektor. Visa med ett exempel hur. Motivera varför? c) Antag att objekt av en class C ska sättas in i en mängd av typen HashSet (som implementeras med hjälp av en öppen hashtabell). Då måsta C skugga två metoder från klassen Object. Vilka är dessa metoder? Förklara varför de måste skuggas genom att beskriva hur de används vid sökning efter ett element i hashtabellen. d) Betrakta följande klasser: public class A { public void method() { System.out.println("a"); public class B extends A { public void method() { System.out.println("b");

2(4) Vad händer när följande rader exekveras? Motivera ditt svar. A ref = new B(); ref.method(); 2. a) I kursen har vi diskuterat olika slags abstrakta datatyper. Ge exempel på två abstrakta datatyper som effektivt kan implementeras med en enkellänkad lista. Ge en kort beskrivning av hur listan används för att implementera dessa abstrakta datatypen och deras viktigaste operationer. b) I Java finns bland annat heltalstyperna int och long. Ibland behöver man arbeta med tal som innehåller flera siffror än vad som kan lagras i en variabel av av typen long. Det finns klasser i Java som kan användas i dessa fall (t.ex. klassen BigInteger). I den här uppgiften ska du skriva en egen enklare variant av en sådan klass. Du ska använda en enkellänkad lista för att lagra de olika siffrorna i talet. Siffrorna representeras av typen int. Klassen hanterar bara naturliga tal (tal >= 0). För att förenkla vissa operationer lagras siffrorna baklänges. T.ex. lagras talet 237 så här: first 7 3 2 Klassen BigInt ser ut så här: public class BigInt { private DigitNode first; /** * Translates the decimal String representation of a big integer into a BigInt. * @param val decimal String representation * @throws NumberFormatException val is not a valid representation of a big integer. */ public BigInt(String val) {... /** * Adds rhs to this BigInt. * @param rhs value to be added to this BigInt. */ public void add(bigint rhs) {... // Här finns övriga metoder som inte är intressanta i denna uppgift /* Nested class. Represents a node which contains a digit. */ private static class DigitNode { private int digit; private DigitNode next; /* Creates a listnode with the digit d. */ private DigitNode(int d) { digit = d; next = null; Implementera metoden add. Additionen utförs på samma sätt som man gör med papper och penna, d.v.s. från minst signifikant siffra och med användandet av en minnessiffra. Här är några exempel där nbr1 och nbr2 är BigInt-objekt:

3(4) 42 + 5: nbr1 2 4 Efter nbr1.add(nbr2): nbr1 7 4 nbr2 5 nbr2 5 42 + 379: nbr1 2 4 Efter nbr1.add(nbr2): nbr2 9 7 3 nbr1 1 2 4 nbr2 9 7 3 99 + 3: nbr1 9 9 Efter nbr1.add(nbr2): nbr1 2 0 1 nbr2 3 nbr2 3 3. a) Betrakta följande class: public class MysteryClass { public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); public static void main(string[] args) { MysteryClass.mystery(3); Vad skrivs ut när man kör programmet? b) För att representera ett binärt träd kan följande klasser användas: public class BinaryTree<E> { private Node<E> root; /** Constructs an empty tree. */ public BinaryTree() { root = null;... metoder... private static class Node<E> { private E data; private Node<E> left; private Node<E> right; private Node(E element) { data = element; Lägg följande metod i klassen BinaryTree:

4(4) /** Returns a list with all elements at level level * @param level the level which element will be in the resulting list * @throws IllegalArgumentException level is lesser than 1. */ public List<E> atlevel(int level); som returnerar en lista med de element som finns på nivå level. Till exempel ska ett anrop av level(3) på följande träd e a g h f d b c returnera följande lista: h f d Ledning och anvisningar: Rekursiv teknik ska användas. Det är lämpligt att implementera en privat metod som hjälp. För full poäng ska inga nya attribut läggas till i klassen. c) I vilken ordnings kommer noderna ut trädet i deluppgift b att behandlas om trädet traverseras i inorder? Antag att trädet istället varit ett binärt sökträd och vi satt in noderna i ordningen d, f, g, a, c, e, h, b. I vilken ordning kommer då noderna att behandlas vid en inordertraversering? 4. a) En korsreferenslista för en bok är en lista över alla förekommande ord i alfabetisk ordning och för varje ord en uppräkning av de sidor där ordet förekommer. Exempel: class 3, 5, 7, 9 int 6 interface 5, 19 java 1, 2, 5, 8, 19 object 2, 6, 7, 9 Sidnumren för varje ord ska vara ordnade i stigande följd. Även om samma ord finns flera gånger på samma sida ska sidnumret bara förekomma en gång. Man kan implementera korsreferenslistan genom att använda den abstrakta datatypen lexikon (Map) med ordet som nyckel och en mängd (Set) med sidnummer som värde. Gör en sådan implementering av klassen CrossReferenceList: /** Skapar en tom korsreferenslista. */ CrossReferenceList(); /** Uppdaterar i korsreferenslistan att ordet word förekommer på sidan sidenbr. */ void add(string word, int sidenbr); /** Returnerar en sträng som innehåller order word följt av de sidnummer ordet förekommer på. Strängen följer mönstret i följande exempel: java 1, 2, 5, 8, 19 */ String getasstring(string word); b) Beräkna tidskomplexiteten i värsta fall för att gå igenom hela texten och bygga upp korsreferenslistan. Du får anta att antal sidor i boken är litet i förhållande till antal ord.

java.util!interface Map<K,V> Type Parameters: K - the type of keys maintained by this map V - the type of mapped values All Known Implementing Classes: AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. void clear() Removes all of the mappings from this map (optional operation). boolean containskey(object key) Returns true if this map contains a mapping for the specified key. boolean containsvalue(object value) Returns true if this map maps one or more keys to the specified value. Set<Map.Entry<K,V>> entryset() Returns a Set view of the mappings contained in this map. boolean equals(object o) Compares the specified object with this map for equality. V get(object key) Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. int hashcode() Returns the hash code value for this map. boolean isempty() Returns true if this map contains no key-value mappings. Set<K> keyset() Returns a Set view of the keys contained in this map. V put(k key, V value) Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. void putall(map<? extends K,? extends V> m) Copies all of the mappings from the specified map to this map (optional operation). V remove(object key) Removes the mapping for a key from this map if it is present (optional operation). Returns the value to which this map previously associated the key, or null if the map contained no mapping for the key. int size() Returns the number of key-value mappings in this map. java.util Class HashMap<K,V> Hash table based implementation of the Map interface. HashMap() Constructs an empty HashMap with the default initial capacity (16) and the default load factor (0.75). HashMap(int initialcapacity) Constructs an empty HashMap with the specified initial capacity and the default load factor (0.75). HashMap(int initialcapacity, float loadfactor) Constructs an empty HashMap with the specified initial capacity and load factor. HashMap(Map<? extends K,? extends V> m) Constructs a new HashMap with the same mappings as the specified Map. java.util Class TreeMap<K,V> A Red-Black tree. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. TreeMap() Constructs a new, empty tree map, using the natural ordering of its keys. TreeMap(Comparator<? super K> comparator) Constructs a new, empty tree map, ordered according to the given comparator. TreeMap(Map<? extends K,? extends V> m) Constructs a new tree map containing the same mappings as the given map, ordered according to the natural ordering of its keys. TreeMap(SortedMap<K,? extends V> m) Constructs a new tree map containing the same mappings and using the same ordering as the specified sorted map. java.util!interface Map.Entry<K,V> A map entry (key-value pair). boolean equals(object o) Compares the specified object with this entry for equality. K getkey() Returns the key corresponding to this entry. V getvalue() Returns the value corresponding to this entry. int hashcode() Returns the hash code value for this map entry.

java.util!interface Set<E> Type Parameters: E - the type of elements maintained by this set All Superinterfaces: Collection<E>, Iterable<E> All Known Subinterfaces: NavigableSet<E>, SortedSet<E> All Known Implementing Classes: AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet A collection that contains no duplicate elements. boolean add(e e) Adds the specified element to this set if it is not already present (optional operation). boolean addall(collection<? extends E> c) Adds all of the elements in the specified collection to this set if they're not already present (optional operation). void clear() Removes all of the elements from this set (optional operation). boolean contains(object o) Returns true if this set contains the specified element. boolean containsall(collection<?> c) Returns true if this set contains all of the elements of the specified collection. boolean equals(object o) Compares the specified object with this set for equality. int hashcode() Returns the hash code value for this set. boolean isempty() Returns true if this set contains no elements. Iterator<E> iterator() Returns an iterator over the elements in this set. boolean remove(object o) Removes the specified element from this set if it is present (optional operation). boolean removeall(collection<?> c) Removes from this set all of its elements that are contained in the specified collection (optional operation). boolean retainall(collection<?> c) Retains only the elements in this set that are contained in the specified collection (optional operation). int size() Returns the number of elements in this set (its cardinality). Object[] toarray() Returns an array containing all of the elements in this set. <T> T[] toarray(t[] a) Returns an array containing all of the elements in this set; the runtime type of the returned array is that of the specified array. java.util Class HashSet<E> Hash table based implementation of the Set interface. HashSet() Constructs a new, empty set that has default initial capacity (16) and load factor (0.75). HashSet(Collection<? extends E> c) Constructs a new set containing the elements in the specified collection. HashSet(int initialcapacity) Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and default load factor (0.75). HashSet(int initialcapacity, float loadfactor) Constructs a new, empty set; the backing HashMap instance has the specified initial capacity and the specified load factor. java.util Class TreeSet<E> A Red-Black tree. The set is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. TreeSet() Constructs a new, empty tree set, sorted according to the natural ordering of its elements. TreeSet(Collection<? extends E> c) Constructs a new tree set containing the elements in the specified collection, sorted according to the natural ordering of its elements. TreeSet(Comparator<? super E> comparator) Constructs a new, empty tree set, sorted according to the specified comparator. TreeSet(SortedSet<E> s) Constructs a new tree set containing the same elements and using the same ordering as the specified sorted set. java.util!interface Iterator<E> boolean hasnext() Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.) E next() Returns the next element in the iteration. Throws NoSuchElementException if the iteration has no more elements. void remove() Removes from the underlying collection the last element returned by the iterator (optional operation). Throws UnsupportedOperationException if the remove operation is not supported by this Iterator.