Datenstrukturen und Algorithmen. Vorlesung 6

Größe: px
Ab Seite anzeigen:

Download "Datenstrukturen und Algorithmen. Vorlesung 6"

Transkript

1 Datenstrukturen und Algorithmen Vorlesung 6

2 Heap (auch Halde oder Haufen) Binäre Heaps sind eine einfache und effiziente Implementierung von Prioritätswarteschlangen (priority queues) Ein binären Heap ist ein Hybrid zwischen dynamisches Array und Binärbaum Ein binären Heap ist ein Array, welches man als fast vollständigen binären Baum mit besonderen Eigenschaften auffassen kann

3 Heap Nehmen wir an, dass folgendes Array auf der oberen Zeile Positionen und auf der unteren Zeile Elemente enthält: Man kann dieses Array als Binärbaum visualisieren, indem jeder Knoten genau zwei Kinder hat, außer der letzten zwei Niveaus, wo die Knoten von links nach rechts ausgefüllt werden

4 Heap

5 Heap Wenn die Elemente des Arrays a 1, a 2, a 2, a 3,... a n sind, dann gilt Folgendes: a 1 stellt die Wurzel dar Die Kinder der Wurzel entsprechen a 2 und a 3 Die Kinder von Knoten i haben Indizes 2 * i und 2 * i+1 (falls diese Zahlen in 1..n liegen). Der Vorgänger eines Knotens i, mit 2 i n, hat den Index [i/2].

6 Heap Ein binären Heap ist ein Array, das als Binärbaum visualisiert werden kann und, dass zusätzlich die Heap-Struktur und Heap-Eigenschaft besitzt Heap-Struktur: ein Binärbaum, in welchem jeder Knoten genau zwei Kinder hat, außer der letzten zwei Niveaus, wo die Knoten von links nach rechts ausgefüllt werden Heap-Eigenschaft: a i a 2*i (falls 2 i n) und a i a 2*i + 1 (falls 2 i +1 n) Ein Baum erfüllt die Heap-Eigenschaft bezüglich einer Vergleichsrelation auf den Schlüsselwerten genau dann, wenn für jeden Knoten u des Baums gilt, dass u.wert v.wert für alle Knoten v aus den Unterbäumen von u (man kann jedwelche Vergleichsrelation auswählen)

7 Heap In Abhängigkeit von der gewählten Vergleichsrelation erhält man nun einen Baum, der entweder das Minimum oder das Maximum in der Wurzel enthält: Ein binärer Baum, der die Heap-Eigenschaft mit der Relation erfüllt, wird als Max-Heap bezeichnet. Ein binärer Baum, der die Heap-Eigenschaft mit der Relation erfüllt, wird als Min-Heap bezeichnet. Der Baum, der ein binärer Heap mit Größe n repräsentiert, besitzt eine Höhe von log 2 n, also ist die Komplexität der Operationen auf einem Heap O(log 2 n)

8 Heap - Operationen Ein Heap kann als Repräsentierung für eine Prioritätswarteschlange benutzt werden und enthält zwei spezifische Operationen: Füge ein neues Element in einem Heap ein (sodass man die Struktur des Heaps und die Heap-Eigenschaft behaltet) Lösche ein Element man löscht immer nur die Wurzel des Heaps und kein anderes Element

9 Heap - Repräsentierung Heap: cap: Integer len: Integer elems: TElem[] Für die Implementierung nehmen wir an, dass es um eine Max-Heap geht

10 Heap add Sei der folgende Max-Heap: Füge das Element 55 in den Heap ein

11 Heap add Um die Heap-Struktur zu behalten, fügen wir den neuen Knoten als das rechte Kind von dem Knoten mit Wert 14 ein (das letzte Element in dem Array)

12 Heap add Die Heap-Eigenschaft ist nicht erfüllt: 14 hat als Kind ein Knoten mit Wert 55 (in einem Max-Heap sollte jeder Knoten größer als seine Kinder sein) Um die Heap-Eigenschaft zu bewahren, beginnt man die Einträge der Knoten zu vertauschen: Man lässt den neuen Knoten durch sukzessives Vertauschen mit seinem Vaterknoten soweit im Baum hochsteigen, bis die Heap- Eigenschaft wiederhergestellt ist (bubble-up)

13 Heap add Nach dem bubble-up:

14 Heap add subalgorithm add(heap, e) is: //heap - ein Heap //e - das Element, das eingefügt werden muss if heap.len = heap.cap resize end-if heap.elems[heap.len+1] e heap.len heap.len + 1 bubble-up(heap, heap.len) end-subalgorithm

15 Heap add subalgorithm bubble-up (heap, p) is: //heap - ein Heap //p - Position von welchem man den neuen Knoten hochsteigen muss poz p elem heap.elems[p] parent p / 2 while poz > 1 and elem > heap.elems[parent] execute //der Vaterknoten wird nach unten verschoben heap.elems[poz] heap.elems[parent] poz parent parent poz / 2 end-while heap.elems[poz] elem end-subalgorithm Komplexität: O(log 2 n) - da wir pro Ebene des Baumes nur konstanten Aufwand investieren und der Baum logarithmische Höhe besitzt

16 Heap remove Aus einem Heap kann man nur die Wurzel löschen

17 Heap remove Um die Heap-Struktur zu behalten, ersetzt man die Wurzel durch das letzte Element aus dem Array

18 Heap remove Die Heap-Eigenschaft ist nicht erfüllt: die Wurzel ist nicht mehr das größte Element Nun lassen wir die neue Wurzel im Heap durch Vertauschen mit dem größten Kind soweit im Heap absinken, bis die Heap-Eigenschaft wieder erfüllt ist (bis der Knoten ein Blatt oder größer als beide Kinder ist) (bubble-down)

19 Heap remove Nach dem bubble-down:

20 Heap remove function remove(heap) is: //heap - ist ein Heap if heap.len = 0 error - leeren Heap end-if deletedelem heap.elems[1] heap.elems[1] heap.elems[heap.len] heap.len heap.len - 1 bubble-down(heap, 1) remove deletedelem end-function

21 Heap remove subalgorithm bubble-down(heap, p) is: //heap - ist ein Heap //p - Position von welchem man den neuen Knoten absinken muss poz p elem heap.elems[p] while poz < heap.len execute maxchild -1 if poz * 2 heap.len then //es gibt ein linkes Kind maxchild poz*2 end-if if poz*2+1 heap.len and heap.elems[2*poz+1] > heap.elems[2*poz] then //der Knoten hat zwei Kinder und das rechte ist größer maxchild poz*2 + 1 end-if //Fortsetzung auf der nächsten Folie

22 Heap remove if maxchild -1 and heap.elems[maxchild] > elem then heap.elems[poz] heap.elems[maxchild] poz maxchild else heap.elems[poz] elem poz heap.len + 1 //um die while-schleife zu stoppen end-if end-while end-subalgorithm Komplexität: O(log 2 n)

23 ? Wo kann man in einem Max-Heap: Das größte Element des Arrays finden? Das kleinste Element des Arrays finden?

24 Naiver Heapaufbau (top-down Strategie) Der Heap wird von oben nach unten (top-down) aufgebaut, indem: Ein neues Element möglichst weit links eingefügt wird und Rekursiv nach oben getauscht wird, solange es größer als sein Elternknoten ist Wird benutzt, wenn die Elemente des Heaps nicht von Anfang an bekannt sind (man erstellt also den Heap durch n-faches Einfügen eines Elementes) Zeitkomplexität der Einfüge-Operation ist O(log 2 n) zum Aufbau eines Heaps mit n Elementen benötigt man O(nlog 2 n)

25 Verbessertes Heapaufbau (bottom-up Strategie) Das Erstellen des Heaps kann verbessert werden wenn man alle Elemente des Heaps vom Anfang an kennt (ein Array, das nicht sortiert ist) Man nimmt an, dass die zweite Hälfte des Arrays nur Blätter enthält Anfangend von dem ersten Element in der Mitte des Arrays, das nicht ein Blatt ist, bis zu dem ersten Element des Arrays, ruft man bubble-up auf Zeitkomplexität: O(n)

26 Heapsort Heapsort ist ein Sortierverfahren basiert auf Heap Nehmen wir an, dass folgende Sequenz in steigender Reihenfolge sortiert werden muss: 6, 1, 3, 9, 11, 4, 2, 5

27 Heapsort naive Vorgehensweise Idee: Erstelle ein Min-Heap und füge alle Elemente der Sequenz ein (Naiver Heapaufbau) Lösche der Reihe nach alle Elemente aus dem Heap: diese werden in aufsteigender Reihenfolge gelöscht, da immer nur die Wurzel gelöscht wird

28 Heapsort naive Vorgehensweise Min-Heap mit den Elementen der Sequenz: Bei dem Löschen der Elemente werden diese in folgender Reihenfolge gelöscht: 1, 2, 3, 4, 5, 6, 8, 11

29 Heapsort naive Vorgehensweise Welche ist die Zeitkomplexität der naiven Vorgehensweise? O(nlog 2 n) (n-faches Einfügen nlog 2 n, n-faches Löschen nlog 2 n) Welche ist die Speicherkomplexität? Braucht man zusätzliches Speicherplatz? man braucht ein zusätzliches Array Θ(n)

30 Heapsort verbesserte Vorgehensweise Wenn man eine Sequenz in aufsteigender Reihenfolge sortieren will, dann benutzt man ein Max-Heap dann braucht man kein zusätzliches Speicherplatz für ein Array Warum? Zusätzlich kann man den verbesserten Heapaufbau benutzen

31 Heapsort verbesserte Vorgehensweise Welche ist die Zeitkomplexität der verbesserten Vorgehensweise? die Komplexität für den Heapaufbau ist O(n), aber die Komplexität für das Löschen des Elementes bleibt O(nlog 2 n) Welche ist die Speicherkomplexität? Man braucht kein zusätzliches Speicherplatz

32 ADT Liste Eine Liste ist eine endliche Folge von null oder mehr Elementen eines gegebenen Typs <l 1, l 2,..., l n >, wobei die Reihenfolge der Elemente bekannt ist, und jedes Element eine Position hat In einer Liste ist die Reihenfolge der Elemente wichtig (im Gegenteil zu ADT Set zum Beispiel) Die Anzahl der Elemente aus der Liste heißt Länge der Liste. Eine Liste ohne Elemente heißt leer. Die Position, an der ein Element e steht, wird auch als Vorkommen von e bezeichnet.

33 ADT Liste Eine Liste ist ein Container, der entweder leer ist oder: Es enthält wenigstens ein Element Für jedes Element, außer des letzten, gibt es einen eindeutigen Nachfolger Für jedes Element, außer des ersten, gibt es einen eindeutigen Vorgänger In einer Liste kann man Elemente auf einer bestimmten Position einfügen, von einer gegebenen Position löschen, auf den Nachfolger und Vorgänger eines gegebenen Elementes zugreifen, auf das Element an einer bestimmten Position zugreifen

34 ADT Liste Positionen Jedes Element aus der Liste hat eine eindeutige Position: Positionen sind relativ zur Liste Die Position eines Elementes: bestimmt/identifiziert das Element bestimmt die Position des Nachfolgers und des Vorgängers (falls diese exitieren)

35 ADT Liste Positionen Die Position eines Elementes kann unterschiedlich betrachtet werden: Als Rang des Elementes in der Liste (erste, zweite, usw.) Ähnlich wie bei Arrays, wo die Position gleich ist mit dem Index des Elementes Als Referenz zu dem Speicherplatz, wo das Element gespeichert wird Z.B. ein Pointer zu der Adresse des Elementes Damit wir die Position allgemein betrachten können, benutzen wir den abstrakten Typ TPosition für die Position eines Elementes

36 ADT Liste Positionen Eine Position p ist gültig (valid) falls es ein Element in der Liste gibt mit der entsprechenden Position: Falls p ein Pointer ist zu einer Adresse im Speicherplatz, dann ist p gültig falls diese die Adresse eines Elementes der Liste ist (und nicht NIL oder die Adresse von irgendwas anderes) Falls p der Rang eines Elementes ist, dann ist p gültig falls es einen Wert zwischen 1 und der Anzahl der Elemente enthält Für ungültige Positionen benutzen wir die Notation:

37 ADT Liste Domäne des ADT Liste: L = {l l ist eine Liste mit Elementen vom Typ TElem, wobei jedes Element eine eindeutige Position vom Typ TPosition in l hat}

38 ADT Liste Interface init(l) descr: erstellt eine neue, leere Liste pre: wahr post: l L, l ist eine leere Liste first(l) descr: gibt die TPosition des ersten Elementes zurück pre: l L post: first p TPosition die Position des ersten Elementes aus l, p ቊ, ansonsten falls l

39 ADT Liste Interface last(l) descr: gibt die TPosition des letzten Elementes zurück pre: l L post: last p TPosition die Position des letzten Elementes aus l, p ቊ, ansonsten falls l

40 ADT Liste Interface valid(l, p) descr: überprüft ob ein TPosition gültig ist pre: l L, p TPosition wahr, falls p eine gültige Position in l ist post: valid ቊ falsch, ansonsten

41 ADT Liste Interface next (l, p) descr: gibt die TPosition des nächsten Elementes aus der Liste zurück pre: l L, p TPosition post: next q TPosition die Position des nächsten Elementes nach p, falls p nicht die letzte Position in l ist q ቊ, ansonsten throws: ein Exception, falls p ungültig ist

42 ADT Liste Interface previous (l, p) descr: gibt die TPosition des vorigen Elementes aus der Liste zurück pre: l L, p TPosition post: previous q TPosition die Position des Elementes vor p, falls p nicht die erste Position in l ist q ቊ, ansonsten throws: ein Exception, falls p ungültig ist

43 ADT Liste Interface getelement(l, p, e) descr: gibt das Element von einer gegebenen TPosition zurück pre: l L, p TPosition, valid(p) post: e TElem, e = das Element an der Position p in l throws: ein Exception, falls p ungültig ist

44 ADT Liste Interface position (l, e) descr: gibt die TPosition eines Elementes zurück pre: l L, e TElem post: position p TPosition die Position des Elementes e aus l, p ቊ, ansonsten falls e l

45 ADT Liste Interface modify (l, p, e) descr: ersetzt das Element an der gegebenen TPosition mit einem neuen Element pre: l L, p TPosition, e TElem, valid(p) post: l L, das Element an der Position p aus l ist e throws: ein Exception, falls p ungültig ist insertfirst (l, e) descr: fügt ein neues Element am Anfang der Liste ein pre: l L, e TElem post: l L, das Element e wurde am Anfang der Liste eingefügt

46 ADT Liste Interface insertlast (l, e) descr: fügt ein neues Element am Ende der Liste ein pre: l L, e TElem post: l L, das Element e wurde am Ende der Liste eingefügt insertafter (l, p, e) descr: fügt ein neues Element nach der gegebenen Position ein pre: l L, p TPosition, e TElem, valid(p) post: l L, das Element e wurde nach Position p in l eingefügt (position(l, e) = next(l, p)) throws: ein Exception, falls p ungültig ist

47 ADT Liste Interface insertbefore (l, p, e) descr: fügt ein neues Element vor der gegebenen Position ein pre: l L, p TPosition, e TElem, valid(p) post: l L, das Element e wurde vor Position p in l eingefügt (position(l, e) = previous(l, p)) throws: ein Exception, falls p ungültig ist

48 ADT Liste Interface remove (l, p, e) descr: löscht das Element von der gegebenen Position pre: l L, p TPosition, valid(p) post: e TElem, e ist das Element an der Position p aus l, l L, l = l e throws: ein Exception, falls p ungültig ist search (l, e) descr: sucht ein Element in der Liste pre: l L, e TElem wahr, falls e l post: search ቊ falsch, ansonsten

49 ADT Liste Interface isempty (l) descr: überprüft ob eine Liste leer ist pre: l L wahr, falls l = post: isempty ቊ falsch, ansonsten size (l) descr: gibt die Anzahl der Elemente aus der Liste zurück pre: l L post: size Anzahl der Elemente aus l

50 ADT Liste Interface destroy (l) descr: zerstört eine Liste pre: l L post: l wurde zerstört iterator (l, it) descr: gibt ein Iterator für die Liste zurück pre: l L post: i I, i ist ein Iterator für l

51 TPosition Wenn man TPosition in dem Interface von ADT Liste benutzt, dann gibt es auch Nachteile: Der Typ des TPositions kann unterschiedlich sein wenn man unterschiedliche Represäntierungen für Liste hat Das Interface enthält viele Operationen

52 TPosition C++ In STL, wird TPosition durch einen Iterator dargestellt Die Operationen valid, next, previous, getelement sind eigentlich Operationen des Iterators Zum Beispiel vector: iterator insert(iterator position, const value_type& val) iterator erase(iterator position) Zum Beispiel list: iterator insert(iterator position, const value_type& val) iterator erase(iterator position)

53 TPosition Java In Java, wird TPosition als Index dargestellt Das Einfügen, Löschen und Zugreifen auf Elemente werden mit Hilfe von Indexe implementiert Es gibt wenigere Operationen in dem Interface der Liste Zum Beispiel: void add(int index, E element) E get(int index) E remove(int index)

54 ADT SortedList In einer Liste können die Elemente basierend auf einer Ordnungsrelation sortiert werden SortedList Man kann immer noch mit Hilfe der Positionen auf die Elemente zugreifen Unterschiede in dem Interface: init hat auch die Relation als Parameter Es gibt nur eine Einfügeoperation Es gibt keine Änderungsoperation (modify)

55 ADT List - Repräsentierung Um ADT List (oder ADT SortedList) zu implementieren kann man folgende Datenstrukturen für die Repräsentierung benutzen: (dynamisches) Array Die Elemente werden auf aufeinanderfolgende Speicherplätze gespeichert Wir haben direkter Zugriff auf die Elemente verkettete Liste Die Elemente werden in Knoten gespeichert Man hat keinen direkten Zugriff auf jedes Element

56 ADT Stack (Stapel/Keller/Kellerspeicher)

57 ADT Stack (Stapel/Keller/Kellerspeicher) ADT Stack ist ein Container, wo der Zugriff zu den Elementen auf ein Ende des Behälters (Top des Stacks) beschränkt ist: In einem Stack können Elemente nur von oben hinzugefügt (eingekellert) und von oben entnommen (ausgekellert) werden Man kann nur auf das oberste Element zugreifen Es gilt also das LIFO Prinzip (Last-in-First-Out-Prinzip) das letzte Element, das eingefügt wurde, wird als erstes gelöscht werden Statt Stack verwendet man auch die Bezeichnungen Stapel, Keller/Kellerspeicher oder LIFO-Liste

58 ADT Stack Ein Stack hat eine feste Kapazität. Wenn die Kapazität des Stacks gleich ist mit der Anzahl der Elemente aus dem Stack, dann ist der Stack voll. Ein Stack, der keine Elemente enthält, heißt leer.

59 Stack Beispiel Man fängt vom folgenden Stack an (grüner Pfeil zeigt den Top) Man fügt den Wert 33 ein (push) Man löscht ein Element (pop)

60 Stack Beispiel Man fängt vom folgenden Stack an (grüner Pfeil zeigt den Top) Man löscht ein Element (pop) Man fügt den Wert 72 ein (push)

61 ADT Stack Interface Domäne von ADT Stack: S = {s s ist ein Stack mit Elementen vom Typ TElem}

62 ADT Stack Interface init(s) descr: erstellt einen leeren Stack pre: wahr post: s S, s ist einen leeren Stack destroy(s) descr: zerstört einen Stack pre: s S post: s wurde zerstört

63 ADT Stack Interface push(s, e) descr: legt ein neues Element oben auf den Stack (Einfüge-Operation) pre: s S, e TElem post: s S, s = s e, e ist das oberste Element throws: ein Overflow Error, falls s voll ist pop(s) descr: liefert das oberste Objekt auf dem Stack und entfernt es vom Stack pre: s S post: pop e, e TElem, e ist das oberste Element aus s, s S, s = s e throws: ein Underflow Error, falls s leer ist

64 ADT Stack Interface top(s) descr: gibt das oberste Element auf dem Stack zurück (der Stack wird aber nicht geändert) pre: s S post: top e, e TElem, e ist das oberste Element aus s throws: ein Underflow Error, falls s leer ist isempty(s) descr: überprüft ob der Stack leer ist pre: s S wahr, falls s keine Elemente enthält post: isempty ቊ falsch, ansonsten

65 ADT Stack Interface isfull(s) descr: überprüft ob der Stack voll ist pre: s S wahr, falls s voll ist post: isfull ቊ falsch, ansonsten

66 ADT Stack Interface Bemerkung! Stacks können nicht iteriert werden! Dafür gibt es auch keine iterator Operation.

67 ADT Stack - Repräsentierung Um ADT Stack zu implementieren kann man folgende Datenstrukturen für die Repräsentierung benutzen: Arrays: Statische Arrays Dynamische Arrays Verkettete Liste Einfach verkettete Listen Doppelt verkettete Listen

68 ADT Stack Repräsentierung auf statische Arrays Wo sollte man den Top des Stacks speichern um eine gute Effizienz zu erreichen? Es gibt zwei Mölichkeiten: Den Top des Stacks am Anfang des Arrays zu speichern bei jeder push und pop Operation müssen alle Elemente des Arrays nach rechts, bzw. nach links, verschoben werden Den Top des Stacks am Ende des Arrays zu speichern bei den push und pop Operation müssen die Elemente des Arrays nicht mehr verschoben werden

69 ADT Stack Repräsentierung auf statische Arrays Heap: capacity: Integer top: Integer elements: TElem[0...capacity-1]

70 Init Implementierung mit statischen Arrays subalgorithm init(s) is: s.capacity MAX_CAPACITY //MAX_CAPACITY ist eine Konstante, welche die maximale Kapazität //bestimmt s.top Speicherplatz für die Elemente des Arrays end-subalgorithm Komplexität: Θ(1)

71 Push Implementierung mit statischen Arrays subalgorithm push(s, e) is: if s.capacity = s.top then //überprüfe ob s voll overflow (full stack) exception end-if s.elements[s.top] e s.top s.top + 1 end-subalgorithm Komplexität: Θ(1)

72 Pop Implementierung mit statischen Arrays function pop(s) is: if s.top = 0 then // überprüfe ob s leer underflow(empty stack) exception end-if topelem s.elements[s.top-1] s.top s.top -1 pop topelem end-function Komplexität: Θ(1)

73 Top Implementierung mit statischen Arrays function top(s) is: if s.top = 0 then // überprüfe ob s leer underflow(empty stack) exception end-if topelem s.elements[s.top-1] top topelem end-function Komplexität: Θ(1)

74 IsEmpty Implementierung mit statischen Arrays function isempty(s) is: if s.top = 0 then isempty True else isempty False end-if end-function Komplexität: Θ(1)

75 IsFull Implementierung mit statischen Arrays function isfull(s) is: if s.top = s.capacity then isfull True else isfull False end-if end-function Komplexität: Θ(1)

76 Implementierung mit dynamischen Arrays Welche Operationen müssen geändert werden, wenn man bei der Implementierung des Stacks ein dynamisches Array benutzt anstatt ein statisches Array? Wenn man ein dynamisches Array benutzt, dann kann man die Kapazität des Stacks in der Einfügeoperation vergrößern, sodass der Stack nie voll ist Die push Operation löst nie Overflow Error aus (eventuell out of Memory), sondern die Kapazität des Arrays wird verdoppelt, falls nötig Die isfull Operation wird immer falsch zurückgeben

77 ADT Stack Repräsentierung auf einfach verketteten Listen Wo sollte man den Top des Stacks speichern um eine gute Effizienz zu erreichen? Es gibt zwei Mölichkeiten: Den Top des Stacks am Ende der Liste zu speichern (sowie bei der Repräsentierung auf Arrays) bei jeder push und pop Operation muss man die ganze Liste durchlaufen um den letzten Element zu finden Den Top des Stacks am Anfang der Liste zu speichern bei den push und pop Operation muss die Liste nicht durchlaufen werden

78 ADT Stack Repräsentierung auf einfach verketteten Listen Node: elem: TElem next: Node Stack: top: Node

79 Init Implementierung mit einfach verketteten Listen subalgorithm init(s) is: s.top NIL end-subalgorithm Komplexität: Θ(1)

80 Destroy Implementierung mit einfach verketteten Listen subalgorithm destroy(s) is: while s.top NIL execute firstnode s.top s.top firstnode end-while end-subalgorithm Komplexität: Θ n, wobei n die Anzahl der Elemente ist

81 Push Implementierung mit einfach verketteten Listen subalgorithm push(s, e) is: //allokiere einen neuen Knoten und bestimme die Werte der newnode of type Node [newnode].elem e [newnode].next NIL if s.top = NIL then s.top newnode else [newnode].next s.top s.top newnode end-if end-subalgorithm Komplexität: Θ(1)

82 Pop Implementierung mit einfach verketteten Listen function pop(s) is: if s.top = NIL then //überprüfe ob s leer underflow (empty stack) exception end-if firstnode s.top topelem [firstnode].elem s.top firstnode pop topelem end-function Komplexität: Θ(1)

83 Top Implementierung mit einfach verketteten Listen function top(s) is: if s.top = NIL then // überprüfe ob s leer underflow (empty stack) exception end-if topelem [s.top].elem top topelem end-function Komplexität: Θ(1)

84 IsEmpty Implementierung mit einfach verketteten Listen function isempty(s) is: if s.top = NIL then isempty True else isempty False end-if end-function Komplexität: Θ(1)

85 IsFull Implementierung mit einfach verketteten Listen Es gibt keine maximale Kapazität bei einer verketteten Liste, also der Stack wird nie voll sein. Wenn man die Operation isfull implementiert, dann wird diese immer den Wert falsch zurückgeben function isfull(s) is: isfull False end-function Komplexität: Θ(1)

86 Stack mit fester Kapazität auf einfach verketteten Listen Wie kann man ein Stack mit einer festen Kapazität auf einfach verketteten Listen implementieren? Ähnlich wie bei der Implementierung auf statischen Arrays, kann man in der Struktur des Stacks zwei Integer Werte speichern: Die maximale Kapazität Die aktuelle Größe des Stacks (Anzahl der Elemente)

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen: 6 Partiell geordnete binäre Bäume: Heap (Haufen) Motivation für manchen Anwendungen nur partielle Ordnung der Elemente statt vollständiger nötig, z.b. - Prioritätsschlange: nur das minimale (oder maximale)

Mehr

JAVA KURS COLLECTION

JAVA KURS COLLECTION JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)

Mehr

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter

Mehr

Programmiertechnik II

Programmiertechnik II 2007 Martin v. Löwis Priority Queues and Heapsort 2007 Martin v. Löwis 2 Priority Queue Abstrakter Datentyp Inhalt: Elemente mit Priorität Operationen: Einfügen: Angabe des Elements und seiner Priorität

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 10 (3.6.2014) Binäre Suchbäume I Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:

Mehr

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert Inhalt Einführung 1. Arrays 1. Array unsortiert 2. Array sortiert 3. Heap 2. Listen 1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert 3. Bäume

Mehr

Suchen und Sortieren Sortieren. Heaps

Suchen und Sortieren Sortieren. Heaps Suchen und Heaps (Folie 245, Seite 63 im Skript) 3 7 21 10 17 31 49 28 14 35 24 42 38 Definition Ein Heap ist ein Binärbaum, der die Heapeigenschaft hat (Kinder sind größer als der Vater), bis auf die

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Prioritätswarteschlangen Mariano Zelke Datenstrukturen 2/28 Der abstrakte Datentyp Prioritätswarteschlange : Füge Elemente (mit Prioritäten) ein und entferne

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume 1 Kapitel 13 Ziele 2 Den Begriff des Baums in der Informatik kennenlernen als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf n verstehen und schreiben können Verschiedene Möglichkeiten

Mehr

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch verschiedene Datenstrukturen: lineare Datenstrukturen: Array,

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 Bäume robert.legenstein@igi.tugraz.at 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 13 (18.6.2014) Binäre Suchbäume IV (Rot Schwarz Bäume) Algorithmen und Komplexität Rot Schwarz Bäume Ziel: Binäre Suchbäume, welche immer

Mehr

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6 Robert Elsässer u.v.a. Paderborn, 29. Mai 2008 Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6 Aufgabe 1 (6 Punkte): Zunächst sollte klar sein, daß ein vollständiger Binärer

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Über Arrays und verkettete Listen Listen in Delphi

Über Arrays und verkettete Listen Listen in Delphi Über Arrays und verkettete Listen Listen in Delphi Michael Puff mail@michael-puff.de 2010-03-26 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 3 2 Arrays 4 3 Einfach verkettete Listen 7 4 Doppelt verkettete

Mehr

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange

Mehr

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Suchbäume Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative

Mehr

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte) Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende

Mehr

11.1 Grundlagen - Denitionen

11.1 Grundlagen - Denitionen 11 Binärbäume 11.1 Grundlagen - Denitionen Denition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. In einem Baum gilt: (I) (II) 1 Knoten w ohne VATER(w), das ist die

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: AVL-Bäume Analyse (Folie 85, Seite 39 im Skript) Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl: 0 falls n = 0 F n = 1 falls

Mehr

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v) Ein Baum T mit Knotengraden 2, dessen Knoten Schlüssel aus einer total geordneten Menge speichern, ist ein binärer Suchbaum (BST), wenn für jeden inneren Knoten v von T die Suchbaumeigenschaft gilt: Der

Mehr

Grundkonzepte java.util.list

Grundkonzepte java.util.list Grundkonzepte java.util.list Eine List ist eine Spezialisierung einer allgemeinen Ansammlung (Collection): Lineare Ordnung ist definiert Zugriff über Rang oder Position Volle Kontrolle wo eingefügt bzw.

Mehr

Teil II: Prioritätslisten (Priority Queues)

Teil II: Prioritätslisten (Priority Queues) Teil II: Prioritätslisten (Priority Queues)! Definition und Anwendungen! Binäre Heaps! Index-Heaps mit change- und remove-operation! Binomiale Heaps mit merge-operation Prof. Dr. O. Bittel, HTWG Konstanz

Mehr

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung Gliederung 1. Motivation / Einordnung / Grundlagen 2. Analyse der Laufzeit von Algorithmen 3. Untere Schranken für algorithmische Probleme 4. Sortier- und Selektionsverfahren 5. Paradigmen des Algorithmenentwurfs

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Joost-Pieter Katoen Datenstrukturen und Algorithmen 1/32 Datenstrukturen und Algorithmen Vorlesung 7: Sortieren (K2) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Elementare Datenstrukturen für dynamische Mengen Stapel & Warteschlangen Verkettete Listen Bäume Anwendungsbeispiel:

Mehr

Übung zur Vorlesung Algorithmische Geometrie

Übung zur Vorlesung Algorithmische Geometrie Übung zur Vorlesung Algorithmische Geometrie Dipl.-Math. Bastian Rieck Arbeitsgruppe Computergraphik und Visualisierung Interdisziplinäres Zentrum für Wissenschaftliches Rechnen 8. Mai 2012 B. Rieck (CoVis)

Mehr

Programmiertechnik II

Programmiertechnik II Bäume Symboltabellen Suche nach Werten (items), die unter einem Schlüssel (key) gefunden werden können Bankkonten: Schlüssel ist Kontonummer Flugreservierung: Schlüssel ist Flugnummer, Reservierungsnummer,...

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Binäre Bäume Darstellung und Traversierung

Binäre Bäume Darstellung und Traversierung Binäre Bäume Darstellung und Traversierung Name Frank Bollwig Matrikel-Nr. 2770085 E-Mail fb641378@inf.tu-dresden.de Datum 15. November 2001 0. Vorbemerkungen... 3 1. Terminologie binärer Bäume... 4 2.

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1 3.2 Binäre Suche Beispiel 6.5.1: Intervallschachtelung (oder binäre Suche) (Hier ist n die Anzahl der Elemente im Feld!) Ein Feld A: array (1..n) of Integer sei gegeben. Das Feld sei sortiert, d.h.: A(i)

Mehr

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (2 3 4 Bäume): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) F. Corzilius, S. Schupp, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je bis Studierenden aus

Mehr

Geordnete Binärbäume

Geordnete Binärbäume Geordnete Binärbäume Prof. Dr. Martin Wirsing in Zusammenarbeit mit Gilbert Beyer und Christian Kroiß http://www.pst.ifi.lmu.de/lehre/wise-09-10/infoeinf/ WS 09/10 Einführung in die Informatik: Programmierung

Mehr

Informatik II. PVK Part1 Severin Wischmann wiseveri@student.ethz.ch n.ethz.ch/~wiseveri

Informatik II. PVK Part1 Severin Wischmann wiseveri@student.ethz.ch n.ethz.ch/~wiseveri Informatik II PVK Part1 Severin Wischmann wiseveri@student.ethz.ch n.ethz.ch/~wiseveri KAUM JAVA Kaum Java Viel Zeit wird für Java-spezifisches Wissen benützt Wenig wichtig für Prüfung Letztjähriger Assistent

Mehr

Übungen zu Programmierung I - Blatt 8

Übungen zu Programmierung I - Blatt 8 Dr. G. Zachmann A. Greß Universität Bonn Institut für Informatik II 1. Dezember 2004 Wintersemester 2004/2005 Übungen zu Programmierung I - Blatt 8 Abgabe am Mittwoch, dem 15.12.2004, 15:00 Uhr per E-Mail

Mehr

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1 Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1 1. Das Objekt Bruch mit einem Standardkonstruktor (initialisieren mit 0), einem allgemeinen Konstruktor (Zähler und Nenner können beliebig vorgegeben

Mehr

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm 10. Kapitel (Teil1) BÄUME GRUNDLAGEN Algrithmen & Datenstrukturen Prf. Dr. Wlfgang Schramm Übersicht 1 1. Einführung 2. Algrithmen 3. EigenschaCen vn Prgrammiersprachen 4. Algrithmenparadigmen 5. Suchen

Mehr

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen Grundlegende Sortieralgorithmen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl und Nora Koch Sortieren in Java Man kann Sortierverfahren in einem imperativem oder einem objektorientierten Stil programmieren.

Mehr

Kap. 4.2: Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume Kap. 4.2: Binäre Suchbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 11. VO DAP2 SS 2009 26. Mai 2009 1 Zusätzliche Lernraumbetreuung Morteza Monemizadeh:

Mehr

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

2. Musterlösung. Problem 1: Least Common Ancestor

2. Musterlösung. Problem 1: Least Common Ancestor Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner Musterlösung Problem : Least Common Ancestor pt (a) Aus Zeilen und ist klar, dass LCA(wurzel[T ]) eine Folge von rekursiven

Mehr

Amortisierte Analysen

Amortisierte Analysen Amortisierte Analysen 26. Mai 2016 1 Einleitung Es gibt viele Datenstrukturen, bei deren Komplexitätsanalyse das Problem auftaucht, dass die Ausführung mancher Operationen Einfluss auf die Komplexität

Mehr

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen Datenstrukturen & Algorithmen Übersicht Rot-schwarz Bäume Eigenschaften Einfügen Matthias Zwicker Universität Bern Frühling 2009 2 Rot-schwarz Bäume Binäre Suchbäume sind nur effizient wenn Höhe des Baumes

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Datenorganisation und Datenstrukturen Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag, 12:30-14:00

Mehr

Grundlagen der Informatik Generische Klassen

Grundlagen der Informatik Generische Klassen Grundlagen der Informatik Generische Klassen Generische Klassen, das Java-Collection-Framework und mehr Generische Programmierung Beobachtung: In vielen Problemstellungen hängt der grundsätzliche Aufbau

Mehr

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Algorithmen und Datenstrukturen 265 10 Binäre Suchbäume Suchbäume Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Kann als Wörterbuch, aber auch zu mehr eingesetzt werden (Prioritätsschlange)

Mehr

14. Rot-Schwarz-Bäume

14. Rot-Schwarz-Bäume Bislang: Wörterbuchoperationen bei binären Suchbäume effizient durchführbar, falls Höhe des Baums klein. Rot-Schwarz-Bäume spezielle Suchbäume. Rot-Schwarz-Baum mit n Knoten hat Höhe höchstens 2 log(n+1).

Mehr

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 13./14. VO DAP2 SS 2009 2./4. Juni 2009 1 2. Übungstest

Mehr

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen Inhalte Informatik I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen II.0 Grundlegende Programmstrukturen und Algorithmen Sortier- und Suchalgorithmen auf Arrays

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Wintersemester 202/3 24. Vorlesung Amortisierte Analyse Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Hash-Tabellen Frage: Ziel: Problem: Lösung: Wie groß macht man

Mehr

Bäume, Suchbäume und Hash-Tabellen

Bäume, Suchbäume und Hash-Tabellen Im folgenden Fokus auf Datenstrukturen, welche den assoziativen Zugriff (über einen bestimmten Wert als Suchkriterium) optimieren Bäume: Abbildung bzw. Vorberechnung von Entscheidungen während der Suche

Mehr

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen 9.4 Binäre Suchbäume Erweiterung: Einfügen an der Wurzel Standardimplementierung: Der neue Schlüssel wird am Ende des Suchpfades angefügt (natürlich, weil zuerst festgestellt werden muss, ob der Schlüssel

Mehr

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf Inhaltsverzeichnis Druckmanager allgemein 2 Design 2 Druckauftrag 3 Liste 4 ListenEintrag 6 GUI 7 1 Druckmanager : allgemein

Mehr

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 11. Dynamische Datenstrukturen 11.1 Lineare Liste Eine lineare Liste (auch einfach verkettete Liste ) ist eine Art Array mit flexibler Länge.

Mehr

Übung 13: Priority Queues (Vorrangwarteschlangen 1 )

Übung 13: Priority Queues (Vorrangwarteschlangen 1 ) Übung 13: Priority Queues (Vorrangwarteschlangen 1 ) Definition Eine Priority Queue ist eine Datenstruktur zur Speicherung einer Menge von Elementen, für die eine Halbordnung (Prioritätssteuerung) definiert

Mehr

Binärbäume. Prof. Dr. E. Ehses, 2014 1

Binärbäume. Prof. Dr. E. Ehses, 2014 1 Binärbäume Grundbegriffe der Graphentheorie Bäume und Ihre Anwendungen Unterschiedliche Darstellungen von Bäumen und Binärbäumen Binärbäume in Java Rekursive Traversierung von Binärbäumen Ebenenweise Traversierung

Mehr

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein. Aufgabe 10 Binäre Bäume a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge, 28, 35, 31, 9, 4,, 17, 37, 25 ein. 1. Einfügen von : 3. Einfugen von 35: 2. Einfügen von 28: 28 28 10. Einfügen

Mehr

Java. Wir verwenden oft Java für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig.

Java. Wir verwenden oft Java für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig. Komplexität von Algorithmen (Folie 34, Seite 18 im Skript) Wir verwenden oft für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig. Lernziel sind die einzelnen

Mehr

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen 9.2.5 HUT 9.2.5 3 atenstrukturen im omputer atenstrukturen ie beiden fundamentalen atenstrukturen in der Praxis sind rray und Liste Rekursion Feedback valuation rray Zugriff: schnell Umordnung: langsam

Mehr

Sortierte Folgen 250

Sortierte Folgen 250 Sortierte Folgen 250 Sortierte Folgen: he 1,...,e n i mit e 1 apple applee n kennzeichnende Funktion: M.locate(k):= addressof min{e 2 M : e k} Navigations Datenstruktur 2 3 5 7 11 13 17 19 00 Annahme:

Mehr

Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.

Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist. Graphen Definition: Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist. Begriffe: Gerichteter Graph: Alle Kanten haben eine Richtung vom Anfangsknoten

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4.8-4.11: Andere dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.6 AVL-Bäume 4.8 Rot-Schwarz-Bäume Idee: Verwende Farben, um den Baum vertikal zu

Mehr

Tutorium Algorithmen & Datenstrukturen

Tutorium Algorithmen & Datenstrukturen June 16, 2010 Binärer Baum Binärer Baum enthält keine Knoten (NIL) besteht aus drei disjunkten Knotenmengen: einem Wurzelknoten, einem binären Baum als linken Unterbaum und einem binären Baum als rechten

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen Verkettete Listen Verwendung von Listen in Java Das Prinzip des Iterators Implementierung von einfach verketteten Listen Implementierung von doppelt verketteten Listen Informatik II: Objektorientierte

Mehr

HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen.

HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen. HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen OOPM, Ralf Lämmel (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 562 Motivation abstrakter

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst.

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst. Einführung Elementare Datenstrukturen (Folie 38, Seite 23 im Skript) Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst. Einführung Elementare Datenstrukturen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 Übungsblatt 1 für die Übung

Mehr

Struktur am Beispiel einer Liste

Struktur am Beispiel einer Liste Struktur am Beispiel einer 1 Einfügen(neues element ) Aktiv Wartend knoten knoten 2 Einfügen(neues element ) Aktiv Wartend knoten knoten 3 Einfügen(neues element ) Aktiv Wartend knoten knoten 4 Aha, ich

Mehr

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de. Stammbaum. Stammbaum. Stammbaum lausthal Beispiele Stammbaum Informatik II. Zachmann lausthal University, ermany zach@in.tu-clausthal.de. Zachmann Informatik - SS 06 Stammbaum Stammbaum / Parse tree, Rekursionsbaum Parse tree, Rekursionsbaum

Mehr

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr. Übersicht Datenstrukturen und Vorlesung 1: Prof. Dr. Erika Ábrahám Theorie Hybrider Systeme Informatik 2 http://ths.rwth-aachen.de/teaching/ss-14/ datenstrukturen-und-algorithmen/ Diese Präsentation verwendet

Mehr

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7) Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.rwth-aachen.de/i2/dsal0/ Algorithmus 8. Mai 200 Joost-Pieter

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:

Mehr

Übung Algorithmen I

Übung Algorithmen I Übung Algorithmen I.6.5 Christoph Striecks Christoph.Striecks@kit.edu (Mit Folien von Julian Arz, Timo Bingmann und Sebastian Schlag.) Roadmap Hinweise zur Übungsklausur (Weitere) Traversierungen von Binärbäumen

Mehr

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n Lehrstuhl für Praktische Informatik III Norman May B6, 29, Raum C0.05 68131 Mannheim Telefon: (0621) 181 2517 Email: norman@pi3.informatik.uni-mannheim.de Matthias Brantner B6, 29, Raum C0.05 68131 Mannheim

Mehr

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2013/14. Prof. Dr. Sándor Fekete

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2013/14. Prof. Dr. Sándor Fekete Kapitel 4.8-4.11: Andere dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2013/14 Prof. Dr. Sándor Fekete 1 4.6 AVL-Bäume 2 4.8 Rot-Schwarz-Bäume Rudolf Bayer Idee: Verwende Farben, um den

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren für Felder (Listen) Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es

Mehr

Java-Implementierung der Priority-Queue und des Huffman-Algorithmus Effiziente Algorithmen SS12 Übung 4 Aufgabe 5 Johannes Hein

Java-Implementierung der Priority-Queue und des Huffman-Algorithmus Effiziente Algorithmen SS12 Übung 4 Aufgabe 5 Johannes Hein Übersicht Beschreibung der Datenstruktur Seite 1 Schnittstelle PriorityQueue Seite 2 Klasse PriorityQueueException Seite 3 Klasse Data Seite 4 Klasse PriorityQueueImpl Seite 5 Klasse Huffman Seite 8 Aufbau

Mehr

Einführung in die STL anhand eines ausgewählten Beispiels

Einführung in die STL anhand eines ausgewählten Beispiels Einführung in die STL anhand eines ausgewählten Beispiels Frank M. Thiesing http://home.t-online.de/home/ frank.thiesing/stl/stl-folien.pdf Inhalt Überblick über die C++ STL Container Iteratoren Algorithmen

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 11, Donnerstag, 16.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 11, Donnerstag, 16. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 11, Donnerstag, 16. Januar 2013 (Balancierte Suchbäume) Junior-Prof. Dr. Olaf Ronneberger

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

DATENSTRUKTUREN UND ZAHLENSYSTEME

DATENSTRUKTUREN UND ZAHLENSYSTEME DATENSTRUKTUREN UND ZAHLENSYSTEME RALF HINZE Institute of Information and Computing Sciences Utrecht University Email: ralf@cs.uu.nl Homepage: http://www.cs.uu.nl/~ralf/ March, 2001 (Die Folien finden

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 2. April

Mehr

Teil V. Generics und Kollektionen in Java

Teil V. Generics und Kollektionen in Java Teil V Generics und Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1 Parametrisierbare Datenstrukturen in Java Motivation für

Mehr

Vorlesung 04.12.2006: Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz

Vorlesung 04.12.2006: Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz Vorlesung 04.12.2006: Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz Datenstruktur BDD 1986 von R. Bryant vorgeschlagen zur Darstellung von aussagenlogischen Formeln (genauer: Booleschen Funktionen)

Mehr

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Sortierverfahren. Sortierverfahren für eindimensionale Arrays Sortierverfahren Sortierverfahren Sortieren durch Einfügen Sortieren durch Auswählen Sortieren durch Vertauschen (Bubblesort) Quicksort Sortierverfahren für eindimensionale Arrays 1 Gegeben ist eine beliebige

Mehr

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg 19.04.2011

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg 19.04.2011 Vorlesung Algorithmische Geometrie LEHRSTUHL FÜR ALGORITHMIK I INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 19.04.2011 Überlagern von Kartenebenen Beispiel: Gegeben zwei

Mehr