Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:algorithmendatenstrukturen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung Beide Seiten der Revision
se:algorithmendatenstrukturen [2009-01-17 17:23]
stefan
se:algorithmendatenstrukturen [2009-01-17 20:12]
stefan
Zeile 75: Zeile 75:
   * in balancierten Binärbäumen haben alle Knoten in etwa die gleiche Tiefe: bei n Knoten ist die Höhe log<​sub>​2</​sub>​(n+1)   * in balancierten Binärbäumen haben alle Knoten in etwa die gleiche Tiefe: bei n Knoten ist die Höhe log<​sub>​2</​sub>​(n+1)
   * bei einem balancierten Binärbaum sind somit maximal log<​sub>​2</​sub>​(n+1) Vergleiche (=Höhe des Binärbaums) notwendig, um ein Element in einem solchen balancierten Binärbaum zu finden ​     * bei einem balancierten Binärbaum sind somit maximal log<​sub>​2</​sub>​(n+1) Vergleiche (=Höhe des Binärbaums) notwendig, um ein Element in einem solchen balancierten Binärbaum zu finden ​  
 +
 +==== Heap ====
 +  * ein Heap ist ein Binärbaum, in dem alle Knoten Werte besitzen, die größer (oder gleich) sind als alle Werte ihrer Kindknoten
 +  * der größte Wert befindet sich somit im Wurzelknoten
 +  * Darstellung als Array: [0] = Wurzel, [1] und [2] 1. Ebene, [3], [4], [5], [6] 2. Ebene etc.
 +    * Vorgänger des i. Knotens: i/2 (i >> 1)
 +    * linker Nachfolger des i. Knotens: 2i (i << 1)
 +    * rechter Nachfolger des i. Knotens: 2i + 1 ((i << 1) + 1)
 +  * Heap (= Binärbaum) mit n Knoten hat Höhe lg n, also können alle Operationen auf einem Heap mit O(lg n) durchgeführt werden ​    
 +  * Max-Heap: Nachfolger-Knoten haben kleinere Werte, Min-Heap: Nachfolger-Knoten haben größere Werte
 +  * Wiederherstellen der Heap-Eigenschaft mittels ''​maxHeapify''  ​
  
 ==== Traversierung ==== ==== Traversierung ====
Zeile 145: Zeile 156:
       * Drei-Wege-Partitionierung       * Drei-Wege-Partitionierung
     * Quicksort in C (''​stdlib.h''​):​ ''​void qsort(void *array, size_t n, size_t length, int (*compare)(const void *val1, const void *val2))''​           ​     * Quicksort in C (''​stdlib.h''​):​ ''​void qsort(void *array, size_t n, size_t length, int (*compare)(const void *val1, const void *val2))''​           ​
 +  * Heapsort
 +    * Komplexität O(n lg n)
 +    * in-place mittels Heap   ​
 +  * Counting-Sort
 +    * Komplexität O(n)
 +    * verwendet ein Ausgabearray und ein Hilfsarray für die Häufigkeitsverteilung der Werte     
 +    * Sortierung über Häufigkeitsverteilung der Werte (z.B. 5 Werte kleiner als "​g",​ also muss "​g"​ Index 5 im neuen Array bekommen)  ​
 +  * Radix-Sort
 +    * Partitionierung der Daten z.B. anhand von Anfangsbuchstaben und rekursives Sortieren ​  
 +    * Sortierung anhand des Bitmusters von Zahlen
 +    * Radix Exchange Sort: Bitmuster von links nach rechts durchgehen, 0 vor 1 einsortieren ​   ​
 +    * Straight Radix Sort: quasi ein Counting-Sort für Bitmuster von rechts nach links
  
 ===== ToDo ===== ===== ToDo =====
Zeile 155: Zeile 178:
   * <​del>​Codeoptimierung</​del>​   * <​del>​Codeoptimierung</​del>​
   * <​del>​Arrays mit Quicksort sortieren (C: qsort)</​del>​   * <​del>​Arrays mit Quicksort sortieren (C: qsort)</​del>​
-  * Heapsort, Countingsort,​ Radixsort+  * <del>Heapsort, Countingsort,​ Radixsort</​del>​
   * Backtracking (Was gibt vorgegebenes Programm aus?)   * Backtracking (Was gibt vorgegebenes Programm aus?)
   * Beispiele für Ermittlung der benötigten Zeit nachrechnen   * Beispiele für Ermittlung der benötigten Zeit nachrechnen
   * Codeoptimierungen ins Wiki eintragen   * Codeoptimierungen ins Wiki eintragen
se/algorithmendatenstrukturen.txt · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)