Presentation laddar. Vänta.

Presentation laddar. Vänta.

Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några.

Liknande presentationer


En presentation över ämnet: "Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några."— Presentationens avskrift:

1 Algoritmer och datastrukturer 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 Begreppen används lite flytande Öppna JavaDoc (för att visa arvsstruktur i API m.m.) På sista bilden finns lite standardalgoritmer. I mappen generator finns ett demoexempel. ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

2 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 För att konstruera de två sista behövs typkonstruerare: fält Poster Weiss:s upplägg Java Algoritmer & byggstenar Applikationer Implementationer Avancerat ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

3 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 Axiomen kan anges formellt Finns verktyg för att generera kod från axiom En del menar ADT när de säger datatyp ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

4 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 typbildnings- konstruktioner 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 Lagringsstruktur data - värde - objekt ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

5 Exempel på datastrukturer
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) ADT:erna Stack (Last-In-First-Out) Kö (First In First Out) kan t.ex. representeras med: Ur användarens synvinkel är det samma abstrakta datatyp (... nästan) Man kan naturligtvis representera en mängd med en länkad lista oxå Visa några bilder från förra gången? Fält Länkad lista ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

6 Datastrukturers resurskrav
Datarepresentationen påverkar datastrukturens minnesbehov beräkningstiden för strukturens operationer 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 Fältdubblering kräver max 3N Access Fält: O(1) Länkad lagring <= O(N) Visa länkade listan igen - I en linjär struktur måste man navigera från början! - i en förgrenad tar man sig fram snabbare ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

7 Några vanliga ADT:er Stack LIFO Kö FIFO Lista flexibel access
Sökträd ordnad mängd HashTabell oordnad mängd Prioritetskö ordnad kö Map avbildningstabell (associationslista) != java men ung. samma ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

8 Stack LIFO = Last In First Out Operationer
push(x) Lägger x överst på stacken pop() Tar bort översta elementet top() Returnerar översta elementet isEmpty() Avgör om stacken är tom x push(x) top pop Algebraiska datatyper Stackaxiom: (Vs)(Vx)(s.push(x).top() = x) (Vs)(Vx)(s.push(x).pop() = s) Alla strukturer har Insättning av nytt element Kolla om tom Kolla om element finns Uttag av element ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

9 Kö FIFO = First In First Out Operationer
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 x enqueue(x) getFront dequeue Köaxiom: (Vq)(Vx)(q.isEmpty() => q.enqueue(x).getFront() = x) (Vq)(Vx)(q.isEmpty() => q.enqueue(x).dequeue().isEmpty()) I Java: assert(q.isEmpty()); q.enqueue(x); q.dequeue(); ett exempel till  ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

10 Lista Insättning och uttag kan göras i valfri position a c d e f b
Fler möjligheter => fler felsituationer.  detta gäller förra bilden assert(q.isEmpty()); assert(x != y); q.enqueue(x); q.enqueue(y); assert(q.getFront() == x); q.dequeue(); assert(q.getFront() == y); ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

11 Sökträd Ordnat binärt träd utan duplikat (ordnad mängd) Operationer
add(x) Sätter in x i trädet 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 y x > y x < y ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

12 Hashtabell Tabellbaserad struktur utan duplikat (oordnad mängd)
Operationer 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 ”Kalle” ”Allan” 1 2 N-1 hash() ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

13 Prioritetskö Snabb access av minsta elementet (ordnad kö) Operationer
add(x) Lägger x i kön peek() Returnerar minsta elementet remove() Tar bort minsta elementet isEmpty() Avgör om kön är tom y x > y ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

14 Map Tabell för namn-värde-avbildningar Operationer
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 ”Kalle” ”Allan” Kan implementeras med träd eller hashteknik ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

15 Tillämpningar ADT:er är ofta viktiga hjälpmedel i algoritmer
©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

16 Stack Lagring av aktiveringsposter i blockstrukturerade programmeringsspråk. Reversering av dataström DFS = Djupet Först Sökning i grafer och träd Ex. kommandot back i Zuul (sökning efter ett visst rum) Ex. parentesmatchning (()([]())) ([)] x,y,z,… …,z,y,x En räknare klarar inte parentesmatchningsproblemet ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

17 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 Beräkning av kortaste avstånden i en oviktad graf 4 3 2 1 Starta med 1 och lägg i kön, o.s.v. Stack för DFS x 3 (in-, pre-, postorder) Ickelinjära strukturer svårare att traversera än linjära ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

18 Binära sökträd Ex. Ordlistor
Ordnade mängder med stor förändringsintensitet Om sökning blandas med insättningar och uttag blir linjära strukturer som listor och fält alltför ineffektiva sök blanda uttag alltför med Jfr ordnat fält med binärsökning Statisk vs dynamisk sökning ev. liten bild på fält på tavlan < Fältet Mittelement: c x < c till vänster x > c till höger ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

19 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 ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

20 Prioritetskö Operativsystem Datakompression med Huffmans algoritm
MST = Minsta Uppspännande Trädet i grafer Dijkstras algoritm för kortaste avstånden i viktad graf Huffman används i JPEG (nånstans…) ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

21 Tidskomplexitet hos vanliga datastrukturer
Access, T(N) Kommentar Stack Sist insatta, O(1) Mycket snabb FIFO-kö Först insatta, O(1) 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) 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) “State of the art” En implementering skall klara detta. ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

22 Standardklasser i Java (Weiss kap. 6)
Standardalgoritmer ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

23 Objektsamlingar och avbildningstabeller
Implementeringsteknik (datastruktur) Hashtabell Flexibelt fält Balanserat sökträd Länkad lista Gräns-snitt (ADT) Set HashSet TreeSet List ArrayList LinkedList Map HashMap TreeMap Det mesta här finns i java.util Olika klassificeringar ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

24 Implementeringsteknik
Köer Implementeringsteknik Binär hög Länkad lista Gräns-snitt Queue PriorityQueue LinkedList ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

25 Behållare och asssociativa datastrukturer
Ordnade Oordnade Behållare TreeSet HashSet ArrayList LinkedList Vector PriorityQueue Stack Associativa TreeMap HashMap I en ordnad behållare ordnas elementen relativt ett jämförelsepredikat. ArrayList, LinkedList, Vector och Stack är naturligtvis ordnade i den mening att insättningsordningen bevaras. RAST ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

26 public interface Iterable<E>
public Iterator<E> iterator() Returns an iterator over a set of elements of type E Ex. public class SomeClass implements Iterable<SomeType> { public Iterator<SomeType> iterator(); ... } visa denna bild ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

27 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. Remove: Optional operation: I skelettklass finns då implementering som kastar NotSupportedException Man kan välja att definiera om den ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

28 public interface Collection<E> extends Iterable<E>
boolean add(E o)           Ensures that this collection contains the specified element.  boolean addAll(Collection<? 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(Object 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(Object o)          Removes a single instance of the specified element from this collection. Object[] toArray()           Returns an array containing all of the elements in this collection. + others visa denna bild ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

29 Förenklad iterering f.o.m. Java 5
SomeClass someCollectionObject ... for ( type variable : someCollectionObject ) { ... } Iterator itr = someCollectionObject.iterator(); while (itr.hasNext()) { type variable = itr.next(); Alla klasser som implementerar gränssnittet Iterable kan hanteras med den förenklade for-loopen, samt fält. Anv. för avläsning av samtliga element Kompilatorn översätter automatiskt till iteratorformen (eller indexering om det är ett fält). Jämför en del scriptspråk ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

30 Ex. Förenklad iterering
HashSet<Integer> hs = new HashSet<Integer>(); ... for ( Integer x : hs ) System.out.println(x); ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

31 Abstrakta mallklasser
Gränssnitt public Interface Int Implementerar vissa grundmetoder Abstrakt mallklass public abstract class AbsCls implements Int Denna teknik förekommer ofta i standardbiblioteken. Exempel: … Implementerande subklasser kan välja att ärva från den abstrakta klassen, eller att implementera hela gränssnittet. Konkret klass public class Cls1 extends AbsCls Konkret klass public class Cls2 implements Int ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

32 AbstractSequentialList
Mallklasser Iterable Object Map Collection AbstractMap List Set AbstractCollection Queue AbstractList AbstractSet AbstractQueue De flesta implementerar dessutom Cloneable och Serializable Skippa övriga! AbstractSequentialList ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

33 Linjära liststrukturer
Iterable Object Collection List AbstractCollection Queue AbstractList AbstractSequentialList OBS! En länkad lista är en FIFO-kö (bl.a.) ArrayList LinkedList ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

34 Direktaccesstrukturer
Iterable Object Collection List AbstractCollection RandomAccess AbstractList RandomAccess är ett ”marker interface”. - kan testas med instanceof En subklass kan text ta reda på om basklassen har en effektiv indexoperation (=direktaccess) Vector är synkroniserad till skillnad från ArrayList ArrayList Vector ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

35 Stackar och prioritetsköer
Iterable Object Collection List RandomAccess AbstractCollection Queue AbstractList AbstractQueue Vector PriorityQueue Stack ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

36 Mängdstrukturer Ligger mapparna här?
Iterable Iterable Iterable Object Collection Collection Collection Set Set AbstractCollection SortedSet SortedSet AbstractSet Ligger mapparna här? Nej mappar är inte samlingar i java TreeSet HashSet ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

37 Associativa strukturer
Map Object SortedMap AbstractMap TreeMap HashMap ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

38 public interface Map<K,V>
void clear()           Removes all 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.  V get(Object 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(Object 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.  Collection<V> values()           Returns a collection view of the values contained in this map. OBS, två typvariabler, en för nyckeltypen, en för värdetypen Map.Entry<K,V> är deklarerad lokalt i Map. ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

39 Standardalgoritmer Statiska metoder i class Collections
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); Collections.shuffle(l); Collections.sort(l); System.out.println(Collections.binarySearch(l,x)); Standardalgoritmer för linjära strukturer Förväxla ej med gränssnittet Collection Se exempel med generator ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

40 Standardalgoritmer forts.
rotate(List list,int distance) Rotates all of the elements in the list by the specified distance replaceAll(List list,Object oldVal,Object 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(Collection,Object) Counts the number of times the object occurs in the collection disjoint(Collection,Collection) Determines whether two collections are disjoint addAll(Collection,elements...) Adds specified elements to the collection addAll kan ta ett fält eller en uppräkning av enstaka element Notera att en generell swap inte kan skrivas i Java Labtips! ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

41 Standardalgoritmer forts.
sort(List) Sorts a list using a merge sort algorithm binarySearch(List,Object) Searches for an element in an ordered list using the binary search algorithm shuffle(List) Randomly permutes the elements in a list fill(List,Object) Overwrites every element in a list with the specified value copy(List dest,List src) Copies the source list into the destination list min(Collection) Returns the minimum element in a collection max(Collection) Returns the maximum element in a collection MergeSort kräver mer minne än Qsort. ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

42 Equals Alla klasser ärver metoden equals från Object. 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(Object 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 } Detta är ett sätt att definiera equals. Denna är ganska diskriminerande eftersom den kräver att typerna är exakt samma. Titta på DAT050, förel 14 ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

43 Equals - exempel public class GeometricObject { private int x = 0;
private int y = 0; public GeometricObject(int x,int y) { this.x = x; this.y = y; } public boolean equals(Object obj) { if ( obj == null || getClass() != obj.getClass() ) return false; else { GeometricObject tmp = (GeometricObject)obj; return x == tmp.x && y == tmp.y; } ... ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4

44 Equals - exempel Basklass-equals sköter klasstestet
public class Circle extends GeometricObject { private int radius; public Circle(int x,int y,int radius) { super(x,y); this.radius = radius; } public boolean equals(Object obj) { return super.equals(obj) && radius == ((Circle)obj).radius; } ... Basklass-equals sköter klasstestet ©Uno Holmer, Chalmers, :35 LET375, D2+I2, 15/16, lp4


Ladda ner ppt "Algoritmer och datastrukturer ADT:er, datastrukturer och standardklasser i Java Föreläsning 2 (Weiss kap. 6) Datatyp, abstrakt datatyp, datastruktur Några."

Liknande presentationer


Google-annonser