Zusammenfassung teil1 Flashcards
(37 cards)
Arrays und Listen vergleich;
Beliebiges Element suchen: Array Θ(n), List Θ(n)
Auf Element mit Index i zugreifen: Array Θ(1), List Θ(n)
Element am Anfang einfugen: Array Θ(n), List Θ(1)
Bubblesort
Laufzeit liegt im Worst- und Average-Case in Θ(n^2). Im
Best-Case kann die Laufzeit bei optimierten
Implementierungen in Θ(n) liegen.
Selectionsort:
(nicht stabil) Selectionsort sucht in jeder Iteration das kleinste
Element in der noch unsortierten Teilfolge, entnimmt es und fügt es dann an die sortierte Teilfolge an.
Laufzeit/Vergleiche: Die Laufzeit liegt immer (Best/Average/Worst-Case) in Θ(n^2).
Vertauschungen immer Θ(n)
Insertionsort:
(stabil) Insertionsort entnimmt der unsortierten Teilfolge ein Element und fugt es an richtiger Stelle in die (anfangs leere) sortierte Teilfolge ein.
Laufzeit/Vergleiche:
Best-Case Θ(n)
Worst-Case Θ(n^2).
Average-Case Θ(n^2)
Vertauschungen:
Best-Case Θ(n)
Worst-Case Θ(n^2).
Average-Case Θ(n^2)
Wann ist Algorithmus effizient?
Wir nennen einen Algorithmus effizient, wenn seine
Laufzeit polynomiell in der Eingabegröße ist.
Internes Sortieren:
bezeichnet Sortierverfahren die nur im Hauptspeicher arbeiten
Stabiles Sortieren:
Ordnungserhalten bei gleichen Schlüsseln. Das bedeutet bei gleichen Schlüsseln
bleibt die ürsprungsreihenfolge erhalten. Bspw. Radix-Sort
Merge Sort:
(stabil)
* Teile Array in zwei Hälften.
* Sortiere jede Hälfte rekursiv.
* Verschmelze zwei Hälften zu einem sortierten Ganzen.
Laufzeit/Vergleiche immer : Θ(n log n)
Vertauschungen immer: Θ(n log n)
Speicher: immer Θ(n)
Quick Sort:
(nicht stabil)
Quicksort: Benutzt auch das Divide-and-Conquer-Prinzip, aber auf
eine andere Art und Weise.
Teile: Wähle ”Pivotelement“ x aus Folge A, z.B. das an der letzten Stelle stehende Element.
Teile A ohne x so in zwei Teilfolgen A1 und A2, dass gilt: A1 enthält nur Elemente ≤ x. A2 enthält nur Elemente ≥ x. Herrsche: Rekursiver Aufruf für A1. Rekursiver Aufruf für A2.
Laufzeit/Vergleiche:
Best/AVG Θ(n log n)
Worst Θ(n^2)
Speicher:
Best/AVG Θ(log n)
Worst Θ(n)
Vertauschungen:
Best Θ(n)
Worst/AVG Θ(n log n)
Lineare Suche
Best Case : Θ(1)
naives, sequenzielles Durchsuchen der Liste.
Worst/AVG Case: Θ(n)
Binäre Suche
Suchen in sortierter Liste durch Halbierung des Suchintervalls
Best Case : Θ(1)
naives, sequenzielles Durchsuchen der Liste.
Worst/AVG Case: Θ(logn)
Einsatz von Sortierverfahren Merge und quicksort
Quicksort:
Wird sehr oft in allgemeinen Sortiersituationen bevorzugt.
Mergesort:
Mergesort wird hauptsächlich fur das Sortieren von Listen verwendet.
Wird auch fur das Sortieren von Dateien auf externen Speichermedien eingesetzt.
- Dabei wird aber eine iterative Version von Mergesort (Bottom-up-Mergesort) verwendet, bei der nur log n-mal eine
Datei sequentiell durchgegangen wird.
Handshaking lemma für ungerichtete Graphen
Summe (deg(v)) = 2*|E|
Adjazenzmatrix vs Adjazenyliste
Adjazenzmatrix:
Platzbedarf in Θ(n^2).
Uberprüfen, ob (u, v) eine Kante ist, hat Laufzeit : Θ(1).
Aufzählen aller Kanten hat eine Laufzeit von Θ(n^2)
Adjazenzliste:
Platzbedarf in Θ(m+n).
Uberprüfen, ob (u, v) eine Kante ist, hat Laufzeit : Θ(deg(u)).
Aufzählen aller Kanten hat eine Laufzeit von Θ(m+n)
Lichte und Dichte Graphen:
Graphen sind dicht (dense) falls m = Θ(n^2).
Graphen sind licht (sparse) falls m = O(n)
Fur dichte Graphen sind beide Darstellungsformen
(Adjazenzmatrix oder Adjazenzlisten) vergleichbar.
Lichte Graphen Adjazenzlisten
Breitensuche und Tiefensuche laufzeit
0(n+m)
Gerichteter azyklischer Graph Lemma
Lemma: G ist ein DAG genau dann wenn jeder Teilgraph von G eine Quelle hat.
Wir nennen eine Knoten v ohne eingehende Kanten in einem gerichteten Graphen (i.e. deg−(v) = 0) Quelle.
Topologische Sortierung Laufzeit:
O(n + m)
Min Heap Laufzeiten(analog für max)
Insert(H,v): O(log n).
FindMin(H): O(1)
Delete(H,i): O(logn)
ExtractMin(H): Kombination von FindMin und Delete unddaher in O(log n)
Dijkstra Laufzeit
Worst cases:
Liste O(n^2) Heap O((n + m) log n) FibHeap O(m + n log n)
m - Anzahl Kanten n - Anzahl Knoten
Interval Scheduling Laufzeit
Greedy: O(n*logn)
Kantenschnittlemma:
Sei S eine beliebige Teilmenge von Knoten
und sei e die minimal gewichtete Kante mit genau einem Endknoten in S. Dann enth¨alt der MST die Kante e.
Kreislemma:
Sei C ein beliebiger Kreis und sei f die maximal
gewichtete Kante in C. Dann enth¨alt der MST f nicht.
Kruskal vs Prim
Kruskal:
O(m logn)
Prim:
O(m logn) mit Priority Queue
O(m + nlogn) mit Fib Heap
Anwendung in der Praxis:
Fur dichte Graphen ( m = Θ(n^2)) ist Prims Algorithmus
besser geeignet. потому что в крускале нужно будет много вычеркивать ненужных что увеличивает лауфцайт
Fur dünne(lichte) Graphen ( m = Θ(n)) ist Kruskals Algorithmus
besser geeignet.