Uno Holmer, Chalmers, :28 Uno Holmer, Chalmers, :28

Relevanta dokument
Länkade strukturer. (del 2)

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Samlingar Collection classes

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Interfacen Set och Map, hashtabeller

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

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 10 Innehåll

Diskutera. Hashfunktion

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

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

Föreläsning 11 Innehåll

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 14 Innehåll

Inlämningsuppgift och handledning

Stackar, köer, iteratorer och paket

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

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

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

Den som bara har en hammare tror att alla problem är spikar

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Samlingar Collection classes

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

Föreläsning 3 Datastrukturer (DAT037)

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

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

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

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

Föreläsning 4 Innehåll

Föreläsning 2 Innehåll

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 9 Innehåll

Föreläsning 3. Stack

Föreläsning Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

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 Objekt-orienterad programmering i Java, 5p distanskurs

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

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

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 7 Datastrukturer (DAT037)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Programmering fortsättningskurs

Föreläsning Datastrukturer (DAT036)

Lösningar Datastrukturer TDA

Föreläsning 2 Innehåll

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

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

Föreläsning 3. Stack

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

Tentamen Datastrukturer, DAT037 (DAT036)

Collection Classes. bjectorienterad programmering Sida 1

Lösningsförslag till tentamen Datastrukturer, DAT037,

Datastrukturer. föreläsning 6. Maps 1

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Objektorienterad Programkonstruktion

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

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

Föreläsning Datastrukturer (DAT036)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

Algoritmer och datastrukturer

Föreläsning 13 Innehåll

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

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

Datastrukturer och algoritmer

Transkript:

ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några vanliga datastrukturer Tillämpningar Tidskomplexitet Standardklasser Standardalgoritmer Datatyp En datatyp är en mängd av värden Ex. int, char, boolean, double, Person, String Typer som int, char, boolean och float kallas ibland konkreta datatyper eftersom de är inbyggda i språket och har en direkt representation i datorns minne Definitionen av en datatyp säger ej nödvändigtvis vilka operationer som är giltiga för den nya typen 1 2 Abstrakt datatyp En Abstrakt DataTyp (ADT) består av en datatyp (en mängd av värden) operationer som är giltiga för värden av typen axiom som beskriver operationernas betydelse Ex. heltalen tillsammans med de aritmetiska operationerna + - * / och lagarna för aritmetik En abstrakt datatyp definierar inte hur värden av typen representeras i en dator En abstrakt datatyp kan implementeras på olika sätt Datastruktur Representation av data (värden) och operationer i en abstrakt datatyp En datastruktur är en konkret implementering av en abstrakt datatyp -- med hjälp av typbildningskonstruktioner i ett programmeringsspråk: Datarepresentation för typens värden int, char, boolean, float + fält, post (struct), pekare, + Algoritmer för typens operationer metoder, operatorer 3 4 Exempel på datastrukturer Datastrukturers resurskrav ADT:n Mängd av heltal med operationerna add och contains implementeras av datastrukturerna SimpleSet och SetOfInt (båda representeras som fält - men på olika sätt) Datarepresentationen påverkar datastrukturens minnesbehov beräkningstiden för strukturens operationer ADT:erna Stack (Last-In-First-Out) Kö (First In First Out) kan t.ex. representeras med: Fält Länkad lista 5 Fält + snabb åtkomst av samtliga element - ofta outtnyttjat minne (overhead) Länkad lagring + minnesåtgången motsvarar behovet, men - en (eller flera) extra pekare per dataelement - åtkomst av vissa element kan vara långsam 6

Några vanliga ADT:er Stack Stack Kö Lista Sökträd HashTabell Prioritetskö Map LIFO FIFO flexibel access ordnad mängd oordnad mängd ordnad kö avbildningstabell (associationslista) LIFO = Last In First Out push(x) Lägger x överst på stacken pop() Tar bort översta elementet top() Returnerar översta elementet isempty() Avgör om stacken är tom push(x) x top x pop 7 8 Kö FIFO = First In First Out enqueue(x) Lägger x sist i kön dequeue() Tar bort första elementet getfront() Returnerar första elementet isempty() Avgör om kön är tom y getfront y x enqueue(x) Lista Insättning och uttag kan göras i valfri position a c d e f b dequeue 9 10 Sökträd Ordnat binärt träd utan duplikat (ordnad mängd) add(x) Sätter in x i trädet y contains(x) Söker efter x i trädet remove(x) Tar bort x ur trädet isempty() Avgör om trädet är tomt x < y x > y Hashtabell Tabellbaserad struktur utan duplikat (oordnad mängd) add(x) Sätter in x i tabellen contains(x) Söker efter x i tabellen remove(x) Tar bort x ur tabellen isempty() Avgör om tabellen är tom Allan Kalle hash() 0 1 2 N-1 Kalle Allan 11 12

Prioritetskö Snabb access av minsta elementet (ordnad kö) add(x) Lägger x i kön peek() Returnerar minsta elementet y remove() Tar bort minsta elementet isempty() Avgör om kön är tom Map Tabell för namn-värde-avbildningar add(k,x) Sätter in avbildningen (k,x) i tabellen get(k) Returnerar värdet med nyckeln k remove(k) Tar bort nyckeln k ur tabellen isempty() Avgör om tabellen är tom x > y x > y Kalle 031-123456 Allan 023-112112 13 14 Tillämpningar Stack Lagring av aktiveringsposter i blockstrukturerade programmeringsspråk. Reversering av dataström x,y,z,,z,y,x DFS = Djupet Först Sökning i grafer och träd Ex. kommandot back i Zuul (sökning efter ett visst rum) Ex. parentesmatchning (()([]())) ([)] 15 16 FIFO-kö Operativsystem BFS = Bredden Först Sökning i grafer och träd Ex. Nivåvis genomlöpning av träd Ex. Släck ljuset rum för rum i ett hus 4 4 4 4 4 4 4 4 3 3 3 3 3 4 4 3 2 2 2 3 4 4 3 2 1 2 3 4 4 3 2 2 2 3 4 4 3 3 3 3 3 4 Binära sökträd Ex. Ordlistor Ordnade mängder med stor förändringsintensitet Om sökning blandas med insättningar och uttag sök blir linjära strukturer som listor och fält blanda uttag alltför ineffektiva alltför med 4 4 4 4 4 4 4 Beräkning av kortaste avstånden i en oviktad graf 17 18

Hashtabell Symboltabeller i kompilatorer Oordnade mängder med stor förändringsintensitet Sökning blandat med insättningar och uttag Spelprogram Ex. memorering av spelställningar i ett schackparti Prioritetskö Operativsystem Datakompression med Huffmans algoritm MST = Minsta Uppspännande Trädet i grafer Dijkstras algoritm för kortaste avstånden i viktad graf 19 20 Tidskomplexitet hos vanliga datastrukturer DS Access, T(N) Kommentar Stack Sist insatta, O(1) Mycket snabb FIFO-kö Först insatta, O(1) Mycket snabb Länkad lista Valfritt element, O(N) Linjärsökning Sökträd Valfritt element, O(log N) AC, WC (kräver balansering av trädet) Hashtabell Valfritt element, O(1) AC Prioritetskö finnminsta, O(1) tagbortminsta, O(log N) insättning är O(1) i genomsnitt, men O(log N) i värsta fall (WC) Standardklasser i Java (Weiss kap. 6) Standardklasser Standardalgoritmer WC = Worst Case (Värsta fallet) AV = Average Case (I genomsnitt) T(N) = tidsåtgång när operationen i fråga appliceras på en struktur av storlek N T(N) är O(f(N)) omm T(N) är uppåt begränsad av f(n) O(1) betyder att operationen tar konstant tid (beror ej av N) 21 22 Objektsamlingar och avbildningstabeller Köer Gräns -snitt (ADT) Implementeringsteknik (datastruktur) Hashtabell Flexibelt fält Balanserat sökträd Set HashSet TreeSet Länkad lista List ArrayList LinkedList Map HashMap TreeMap Gränssnitt Implementeringsteknik Binär hög Länkad lista Queue PriorityQueue LinkedList 23 24

Behållare och asssociativa datastrukturer Ordnade Oordnade HashSet ArrayList TreeSet Behållare LinkedList Vector PriorityQueue Stack Associativa TreeMap HashMap 25 public interface <E> public Iterator<E> iterator() Returns an iterator over a set of elements of type E Ex. public class SomeClass implements <SomeType> { public Iterator<SomeType> iterator(); 26 public interface Iterator<E> boolean hasnext() Returns true if the iteration has more elements. E next() Returns the next element in the iteration. void remove() Removes from the underlying collection the last element returned by the iterator. 27 public interface <E> extends <E> boolean add(e o) Ensures that this collection contains the specified element. boolean addall(<? extends E> c) Adds all of the elements in the specified collection to this collection. void clear() Removes all of the elements from this collection. boolean contains( o) Returns true if this collection contains the specified element. int size() Returns the number of elements in this collection. boolean isempty() Returns true if this collection contains no elements. Iterator<E> iterator() Returns an iterator over the elements in this collection. boolean remove( o) Removes a single instance of the specified element from this collection. [] toarray() Returns an array containing all of the elements in this collection. + others 28 Förenklad iterering f.o.m. Java 5 SomeClass some for ( type variable : some ) { Ex. Förenklad iterering HashSet<Integer> hs = new HashSet<Integer>(); Iterator itr = some.iterator(); while (itr.hasnext()) { type variable = itr.next(); for ( Integer x : hs ) System.out.println(x); 29 30

Abstrakta mallklasser Gränssnitt public Interface Int Implementerar vissa grundmetoder Mallklasser AbstractMap Map Abstrakt mallklass public abstract class AbsCls implements Int List Set Abstract Queue AbstractList AbstractSet AbstractQueue Konkret klass public class Cls1 extends AbsCls Konkret klass public class Cls2 implements Int AbstractSequentialList 31 32 Linjära liststrukturer Direktaccesstrukturer List Abstract Queue List Abstract AbstractList RandomAccess AbstractList AbstractSequentialList ArrayList LinkedList ArrayList Vector 33 34 Stackar och prioritetsköer Mängdstrukturer List RandomAccess Abstract Queue Set Abstract AbstractList AbstractQueue SortedSet AbstractSet Vector Stack PriorityQueue TreeSet HashSet 35 36

Associativa strukturer public interface Map<K,V> SortedMap Map TreeMap AbstractMap HashMap void clear() Removes all mappings from this map (optional operation). boolean containskey( key) Returns true if this map contains a mapping for the specified key. boolean containsvalue( 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. V get( key) Returns the value to which this map maps the specified key. 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. V remove( key) Removes the mapping for this key from this map if it is present. int size() Returns the number of key-value mappings in this map. <V> values() Returns a collection view of the values contained in this map. 37 38 Standardalgoritmer Statiska metoder i class s Används för linjära strukturer, t.ex. ArrayList och LinkedList Ex. LinkedList<Integer> l = new LinkedList<Integer>(); for ( int i = 0; i < 10; i++ ) l.add(i); s.shuffle(l); s.sort(l); System.out.println(s.binarySearch(l,x)); 39 Standardalgoritmer forts. rotate(list list,int distance) Rotates all of the elements in the list by the specified distance replaceall(list list, oldval, newval) Replaces all occurrences of one specified value with another indexofsublist(list source,list target) Returns the index of the first sublist of source that is equal to target lastindexofsublist(list source,list target) Returns the index of the last sublist of source that is equal to target swap(list,int,int) Swaps the elements at the specified positions in the specified list frequency(,) Counts the number of times the object occurs in the collection disjoint(,) Determines whether two collections are disjoint addall(,elements) Adds specified elements to the collection 40 Standardalgoritmer forts. sort(list) Sorts a list using a merge sort algorithm binarysearch(list,) Searches for an element in an ordered list using the binary search algorithm shuffle(list) Randomly permutes the elements in a list fill(list,) Overwrites every element in a list with the specified value copy(list dest,list src) Copies the source list into the destination list min() Returns the minimum element in a collection max() Returns the maximum element in a collection 41 Equals Alla klasser ärver metoden equals från. Den ärvda metoden ger pekarlikhet vilket i allmänhet är alltför diskriminerande. En korrekt överskuggning av equals bör ha följande form public class SomeClass { public boolean equals( obj) { if ( obj == null getclass()!= obj.getclass() ) return false; else { SomeClass tmp = (SomeClass)obj; jämför instansvariablerna i detta objekt med variablerna i obj och returnera resultatet 42

Equals - exempel Equals - exempel public class Geometric { private int x = 0; private int y = 0; public class Circle extends Geometric { private int radius; public Geometric(int x,int y) { this.x = x; this.y = y; public boolean equals( obj) { if ( obj == null getclass()!= obj.getclass() ) return false; else { Geometric tmp = (Geometric)obj; return x == tmp.x && y == tmp.y; public Circle(int x,int y,int radius) { super(x,y); this.radius = radius; public boolean equals( obj) { return super.equals(obj) && radius == ((Circle)obj).radius; 43 44