• Keine Ergebnisse gefunden

Algorithmen und Datenstrukturen 10

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmen und Datenstrukturen 10"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10

Algorithmen und Datenstrukturen 10

Stefan Ploner

10. Januar 2012

Algorithmen und Datenstrukturen 10 Stefan Ploner

(2)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10

1 Besprechung Blatt 9 Fragen

2 ADT

Allgemein Beispiele 3 Generics

Type Erasure Generic-Array 4 Datentypen

Einfach verkettete Liste Binary Heaps

5 Vorbereitung Blatt 10 Hinweise

Algorithmen und Datenstrukturen 10 Stefan Ploner

(3)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Fragen

Fragen zu Blatt 9?

Algorithmen und Datenstrukturen 10 Stefan Ploner

(4)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Allgemein

Schema eines ADTs

adt[Name]

sorts[Verwendete Datentypen]

ops

[Methodensignaturen]

axs [Axiome]

end[Name]

Algorithmen und Datenstrukturen 10 Stefan Ploner

(5)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Allgemein

Operationstypen

3 Operationstypen:

1 (Prim¨ar-)Konstruktoren (Operationen zum Erreichen jedes m¨oglichen Zustands, minimale Anzahl)

2 Hilfskonstruktoren (alles andere was den ADT zur¨uckgibt)

3 Projektionen (andere R¨uckgabewerte)

Im Normalfall werden beide ADT-Konstruktorarten in Java mit Java-Konstruktoren abgebildet.

Algorithmen und Datenstrukturen 10 Stefan Ploner

(6)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Allgemein

Prim¨ arkonstruktoren, Normalform

Prim¨arkonstruktoren

ben¨otigen keine eigenen Axiome

werden durch die Verwendung in den anderen Operationen definiert

Normalform

Objekt, das durch eine minimale Zahl von Prim¨arkonstruktoren dargestellt ist.

Algorithmen und Datenstrukturen 10 Stefan Ploner

(7)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Beispiele

STACK: T

ops

create: -> STACK push: T x STACK -> STACK pop: STACK -> STACK top: STACK -> T empty: STACK -> BOOL axs

A1: empty(create()) = TRUE A2: empty(push(x, s)) = FALSE A3: pop(create()) = ERROR A4: pop(push(x, s)) = s A5: top(create()) = ERROR A6: top(push(x, s)) = x

A7: push(top(s), pop(s)) = s falls s != create() push wird bereits ueber die anderen Axiome definiert

Algorithmen und Datenstrukturen 10 Stefan Ploner

(8)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Beispiele

QUEUE: T

ops

create: -> QUEUE enqueue: T x QUEUE -> QUEUE dequeue: QUEUE -> QUEUE head: QUEUE -> T empty: QUEUE -> BOOL axs

A1: empty(create()) = TRUE A2: empty(enqueue(x, q)) = FALSE A3: head(create()) = ERROR

A4: head(enqueue(x, q)) = x falls empty(q) = TRUE

= head(q) sonst A5: dequeue(create()) = ERROR

A6: dequeue(enqueue(x, q)) = q falls empty(q) = TRUE

= enqueue(x, dequeue(q)) sonst % Liste beibehalten!

Algorithmen und Datenstrukturen 10 Stefan Ploner

(9)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Type Erasure

Type Erasure

Generics werden in Java durch “Type Erasure” umgesetzt. Dabei passiert beim Kompilieren im Prinzip folgendes:

alle T-Variablen werden durch den Typ Object ersetzt

an allen Stellen, wo außerhalb der Klasse der Parametertyp (T) verwendet wird, werden entsprechende Casts hinzugef¨ugt

die Casts werden dabei gepr¨uft, wodurch ClassCastExceptions zur Runtime verhindert werden

Algorithmen und Datenstrukturen 10 Stefan Ploner

(10)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Type Erasure

Type Erasure

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(5);

int value = list.get(5);

Nach Type Erasure:

ArrayList<Object> list = new ArrayList<Object>();

list.add(5);

int value = (Integer)list.get(5);

Nach dem Kompilieren wird trotz unterschiedlichen Typparametern die selbe Klasse verwendet. Die Werte der Typparameter sind zur Laufzeit nicht mehr bekannt.

Algorithmen und Datenstrukturen 10 Stefan Ploner

(11)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Type Erasure

Folgen von Type Erasure:

statische Variablen und Methoden werden geteilt

entsprechend k¨onnen diese keine generischen Typen enthalten

die Bedingung “obj instanceof T” ist nicht m¨oglich

auf generischen Typen sind keine Konstruktor-Aufrufe und nur Methodenaufrufe des Basistyps (object) m¨oglich

Es k¨onnen auch keine Arrays eines gen. Typs angelegt werden.

Als Workarround kann man einObject[]-Array verwenden, jedoch m¨ussen dann intern Casts nach T hinzugef¨ugt werden. (→Beispiel)

Algorithmen und Datenstrukturen 10 Stefan Ploner

(12)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Generic-Array

Zeit f¨ur ein Beispiel!

Algorithmen und Datenstrukturen 10 Stefan Ploner

(13)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Generic-Array

public class Array<T> implements Comparable<Array<T>> { private Object[] array;

public Array(int n) { array = new Object[n];

}

@SuppressWarnings("unchecked") public T get(int i) {

return (T)array[i]; // Cast von Object nach T }

public void set(int i, T o) { array[i] = o;

}

// vergleicht nur die Laengen, nicht die Elemente!

public int compareTo(Array<T> other) {

return array.length - other.array.length;

} }

Algorithmen und Datenstrukturen 10 Stefan Ploner

(14)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Einfach verkettete Liste

Einfach verkettete Liste

Listenelemente bestehen aus

Wert (Referenz oder Werttyp selbst)

Referenz zum n¨achsten Element Listenklasse besteht aus

Referenz zum ersten Listenelement oder Sentinel

Optional: Variable zum Mitz¨ahlen der Elementanzahl beim Hinzuf¨ugen / Entfernen (spart sp¨ateres nachz¨ahlen)

Algorithmen und Datenstrukturen 10 Stefan Ploner

(15)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Binary Heaps

Binary Heaps

Baumstruktur

Vaterelement immer kleiner / gr¨oßer als beide Kinder

immer balanciert (im Gegensatz zu Suchb¨aumen) Mit Heaps k¨onnen Vorrangwarteschlangen (priority-queues) effizient umgesetzt werden, da das Element mit der h¨ochsten Priorit¨at schnell gefunden wird.

Algorithmen und Datenstrukturen 10 Stefan Ploner

(16)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Binary Heaps

Einf¨ ugen in einen Max-Heap

neues Element hinten an den Heap anh¨angen

solange das Vaterelement kleiner ist, neues Element mit dem Vaterelement tauschen (Hochblubbern)

Achtung: Bevor man auf Vater- oder Kindelemente zugreift, muss man pr¨ufen, ob diese auch existieren!

Algorithmen und Datenstrukturen 10 Stefan Ploner

(17)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Binary Heaps

Herausnehmen aus einem Max-Heap

gew¨unschtes Element aus dem Heap nehmen

hinterstes Element an die freie Stelle verschieben

wenn das Vaterelement kleiner ist

solange das Vaterelement kleiner ist, tausche das Element mit dem Vaterelement (Hochblubbern)

sonst

solange das gr¨oßere Kindelement gr¨oßer ist, tausche mit diesem (Versickern)

Bemerkung: Die if-else-Bedingung dient nur der ¨Ubersicht und ist eigentlich ¨uberfl¨ussig, da sich die Schleifen bereits ausschließen.

Beim f¨ur einen Heap ¨ublichen Entfernen des Wurzelelements kann nat¨urlich nur der Versickern-Fall eintreten.

Algorithmen und Datenstrukturen 10 Stefan Ploner

(18)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Hinweise

Compiler-Warnungen bei Generics

Befehl zum Anzeigen der Warnungen:

javac -Xlint:unchecked filename.java

Nicht alle Warnungen k¨onnen behoben werden. (Generic Array-Creation, Cast eines Object-Arrayelements in den Generic-Type)

Andere sollten behoben werden (fehlende Typparameter) Warnungen k¨onnen per @SuppressWarnings(“unchecked”) vor Variablen-, Methoden- und Klassendeklarationen f¨ur den entsprechenden Bereich unterdr¨uckt werden. Der Bereich sollte immer minimal gew¨ahlt werden (nie auf die gesamte Klasse).2

Algorithmen und Datenstrukturen 10 Stefan Ploner

(19)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Hinweise

10.2 Umgekehrte polnische Notation

Fragen?

Algorithmen und Datenstrukturen 10 Stefan Ploner

(20)

Besprechung Blatt 9 ADT Generics Datentypen Vorbereitung Blatt 10 Hinweise

10.4 MergedLinkedList

W¨achterelement optional, evtl. einfacher

MergedLinkedListTest.java nutzen!

Algorithmen und Datenstrukturen 10 Stefan Ploner

Referenzen

ÄHNLICHE DOKUMENTE

Christian Sohler Paderborn, den 22. Ist dies notwendig, oder existiert auch ein vern¨unftiger Begriff der topologischen Sortierung f¨ur allgemeine gerichtete oder ungerichtete

Modifizieren Sie den Algorithmus von Bellman-Ford, so dass dieser in Laufzeit O(|V | · |E|) f¨ur jeden Knoten v ∈ V die Kosten eines k¨urzesten s-v-Pfades berechnet, wobei |E| &gt;

4 4 4 4 16 Allgemeiner Hinweis: Für die Bearbeitung dieses Übungsblatts werden alle Resultate bis ein- schließlich Theorem 6.17 vorausgesetzt. Dann wäre es insbesondere

Mit welchem σ k¨ onnen Sie eine Aufl¨ osungspyramide erzeugen, die in jedem Schritt die Aufl¨ osung in x- und y-Richtung halbiert. Aufgabe 10.2

Auch bei Rangordnungsoperationen oder morphologischen Operatoren wird der Begriff der Separabi- lit¨ at definiert als die Eigenschaft, einen 2D-Operator durch zwei

By looking at the map, Sarah realizes that the mountain peaks are interconnected, in two ways: either there is a ski-trail that goes downhill from one mountain peak to the other, or

By looking at the map, Sarah realizes that the mountain peaks are interconnected, in two ways: either there is a ski-trail that goes downhill from one mountain peak to the other, or

Each line is either the message Not enough transactions or two numbers L and H in the form of “L - H” such that L is the bn/3c -th most valuable transaction and H is the most