ETH, 2 Semester


Kartei Details

Karten 67
Sprache Deutsch
Kategorie Informatik
Stufe Universität
Erstellt / Aktualisiert 08.07.2016 / 09.06.2017
Weblink
https://card2brain.ch/box/datenstrukturen_algorithmen
Einbinden
<iframe src="https://card2brain.ch/box/datenstrukturen_algorithmen/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Was ist quadratisches Sondieren?

Ähnlich wie lineares sondieren, nur werden die Abstände Schritt für Schritt quadratisch grösser gemacht. Auch wird abwechselnd zwischen + und - gewechselt.

D.h h(k), h(k) -1, h(k) + 1, h(k) -4, h(k) + 4, h(k) -9...

Es ist\(s(j,k) = (\frac{j}{2})^2(-1)^j\)

Das Problem der primären Häufung wird damit gelöst. 

Was ist uniformes Sondieren?

Man spricht von uniformem Sondieren, wenn die wahrscheinlichkeit, dass ein bestimmter Platz bei der Sondierung erreicht wird, genau gleich gross ist für alle Plätze m -1. Wird in der Praxis oft nicht erreicht. Allerdings kann man mit zufälligen Sondiermethoden sehr nahe ans optimum kommen. 

Was ist Double-Hashing?

Was wäre eine gute Beispielsfunktion?

Beim Double-Hashing wird neben der normalen Hashfunktion h eine zweite Hashfunktion h' verwendet, welche als Sondierfunktion verwendet wird. 

So wird h(k), h(k) -h'(k), h(k) -2h'(k)..., D.h s(j,k) = j*h'(k). 

Wichtig ist, dass h'(k) nie 0 ist, unabhängig von h(k) ist und m nicht denselben Wert hat. 

Gut wären h(k) = k mod m und h'(k) = 1 + k mod(m-2)

(Sofern m PZ und (m-2) PZ

Was für ein Problem kann bei der Sondierung auftreten? Wie kann das Problem behoben werden?

Wenn Einträge gelöscht werden, kann die Sondierung bei einer späteren Suche zu früh abbrechen. Um das Problem zu beheben, können gelöschte Elemente als "gelöscht" markiert werden. Bei einer Einfüge-Operation kann das so markierte Element überschrieben werden, während es bei der Suchoperation nicht zu einem abbruch führt

Bubble-Sort-Algorithmus? Laufzeit?

Laufzeit: \(\mathcal{O(n^2)}\)

Was sind Vorteile des Bubble-Sorts?

-> Parallelisierung ist sehr gut möglich, was den Algorithmus schneller macht. In "geraden" Runden werden dabei immer a_1 mit a_2, a_3 mit a_4 (usw.) verglichen, in den "ungeraden" Runden immer a_2 mit a_3, a_4 mit a_5 usw.. Wird auch Odd-Even-Transposition-Sort genannt, läuft aber immernoch \(\mathcal{O(n^2 *\frac{1}{p})}\) (Für p Prozessoren)

->Schneller abbruch, wenn die Liste bereits vorsortiert ist. 

Algorithmus des Selection-Sorts? Laufzeit?

Laufzeit: \(\mathcal{O(n^2)}\)

Algorithmus des Insertion-Sorts? Laufzeit?

Laufzeit: \(\mathcal{O(n^2)}\)

Was ist die Heap-Bedingung?

Elternknoten in einem Heap müssen immer einen grösseren Wert haben als ihre Kinderknoten

Algorithmus eines Heap-Sorts? Laufzeit?

Mit "Versickern" ist gemeint, dass das oberste Element mit dem grösseren  (direkten) Kindelement getauscht wird. Dies geschieht so lange, bis die Heap-Bedingungen im Heap wiederhergestellt wurden. 

Laufzeit: \(\mathcal{O(n*log(n))}\)

Was ist der "Versickern-Algorithmus" (wie er zB beim Heap-Sort benötigt wird) Laufzeit?

Laufzeit: \(\mathcal{O(log(n))}\)

Was ist der Bottom-Up-Heapsort?

Ähnlich Heap-Sort. Da sich ein Grossteil der Knoten auf dem untersten Niveau befinden macht es Sinn, den auf dem Versickerungspfad von "unten" an zu suchen.

Was ist der Nachteil eines Heap-Sorts?

Es findet ein grosses "Umherhüpfen" im Suchbaum statt. Dies kann je nach System sehr langsam werden, da das Zugreiffen auf nahe gelegene Speicheradressen billiger ist als der Zugriff auf entfernte. (Caching-Effekt)

Merge-Sort-Algorithmus? Laufzeit?

Laufzeit: \(\mathcal{O(n*log(n))}\)

Achtung: Benötigt extra Speicherplatz von \(\mathcal{O(n)}\)

Worauf basiert der Quick-Sort? Algorithmus? Laufzeit?

Auf dem Divide-And-Conquer-Prinzip

Laufzeit: Normalerweise/Durchschnittlich: \(\mathcal{O(n*log(n))}\)

Im schlechtesten Fall \(\mathcal{O(n^2)}\)(Tritt aber in der Praxis prakitsch nie ein-> Wenn der Pivot immer sehr schlecht ist. Es ist auch eine Möglichkeit 3 Elemente zu wählen und den Median dieser Elemente als Pivot zu nehmen.)

Wie schnell kann ein Sortieralgorithmus, der sich auf das Vergleichen von Werten beschränkt, werden (Untere Schrank)? Wieso?

Bekanntlich nimmt ein Suchverfahren die beliebigen Werte \(a_1 a_2a_3....a_n\)  entgegen. Damit das Suchverfahren korrekt sein kann, muss es eine beliebige Permutation der Reihe ausspucken können. Es gibt daher n! mögliche Lösungen. 

Stellt man sich den Suchalgorithmus als Entscheidungsbaum vor, bei welchem man am Ende immer die Lösungspermutation kennen muss, so muss der Suchbaum n! Endknoten haben. Mittels Induktion kann bewiesen werden, dass der mittlere Suchweg \(log(n!)\) entspricht, was \(\in \Theta (n*log(n))\) ist. 

Was ist der Bucket-Sort? Laufzeit?

Beim Bucketsort werden die zu sortierenden Werte etwas näher betrachtet und auf "Eimer" verteilt. In einen Eimer kommen Zahlen mit passenden Eigenschaften, Beispielsweise diejenigen mit einem bestimmten 1000er Wert (4000, 4512, 4129 in den 4er Eimer, 8102 in den 8er Eimer usw.). Die Eimer werden dann mit einem simpleren Sortieralgorithmus sortiert und anschliessend wieder zusammengesetzt. 

Lineare Laufzeit, besonders hilfreich bei grossen Datenmengen. 

Was ist der Radix-Sort? Wie ist die Laufzeit?

Beim Radix-Sort werden die Werte im Array jeweils Ziffer für Ziffer betrachtet und anschliessend auf 10 unterschiedliche Buckets verteilt. Wir beginnen mit der führenden Ziffer (09124 kommt in die 0;12913, 11291 in die 1 usw.). Wir sammeln die Zahlen in aufsteigender Reihenfolge wieder ein. Anschliessend wird nach der zweiten Zahl sortiert, wieder aufgesammelt usw. Solange, bis wir durch alle Ziffern durch sind.

Statt mit der führenden Ziffer kann man auch mit der letzten Ziffer beginnen. Sei m die Anzahl verschiedener Ziffern  (bei Zahlen 10), l die Anzahl Ziffern pro Wert und n die Anzahl Datensätze, so ist \(\mathcal{O((n+m)*l)}\)

Was ist ein abstrakter Datentyp? 
 

:)

Eine BEschreibung von Daten und den darauf anwendbaren Operationen (zB Einfügen, Löschen, Suchen). Die Implementierung eines abstraktesn Datentyps nennt man Datenstruktur. 

Die Effizienz sagt aus, wie es sich mit der Laufzeit einzelnder oder einer Folge von Operationen verhält. 

Auf welche Arten kann der abstrakte Datentyp "Wörterbuch" implementiert werden?

Als Array (Laufzeiten: Siehe Lernkarten zuvor...)

Lineare Liste (Laufzeiten: Linear)

Skip-Liste: (Liste die mittels zusätzlichen Zeigern das Suchen wie in einem Suchbaum ermöglicht. Löschen, Einfügen ist linear, suchen in log(n)). 

Suchbaum

Was ist ein Suchbaum? Wie kann die Korrektheit geprüft werden?

-> Die Schlüssel im linken Teilbaum sind immer kleiner als die Wurzel

-> Die Schlüssel im rechten Teilbaum sind immer grösser als die Wurzel

Korrektheit kann mit einem rekursiven durchlaufen getestet werden (Traversierung)

Wie funktioniert die Traversierung? Algorithmus?

Inorder-Traversierung: Der Suchbaum T wird von unten Links bis unten rechts der Reihe nach ausgegeben. Stimmt die dabei entstehende Reihenfolge ist der Suchbaum korrekt aufgebaut. (Siehe Bild)

 

Preorder-Traversierung: Ausgeben von Wurzel, preorder(T.links), preorder(T.rechts)

Postorder-Traversierung: Ausgeben von postorder(T.links), postorder(T.rechts), Wurzel

Wie funktioniert das Einfügen in einen binären Suchbaum (d.h den einfachsten Suchbaum)? Laufzeit?

Worst-Case ist \(\mathcal{\Theta(n)}\) (Schlechter Pivot)

Im Durchschnitt ca. \(\Theta(log(n))\) Wuhu :)

Wie funktioniert das Löschen in einem binären Suchbaum?

Best Case: \(\Theta(log(n))\)

Worst Case: \(\Theta (n)\)

Mittel: \(\Theta(\sqrt{n})\)

Was besagt die AVL-Bedingung?

Für jeden Knoten muss gelten, dass sich die Höhe des linken und des rechten Teilbaumes um höchstens 1 unterscheiden

Wie viele Blätter hat ein ALV-Baum der Höhe h mindestens? Herleitung?

Ist der Baum mit ALV-Bedingungen nicht wesentlich höher als mit den anderen Suchbaumbedingungen?

\(mb(h) = F_{h+2} \approx 0,7*1.6^{h+2}\), wobei F die Fibonacci Zahlen darstellen (0, 1, 1, 2, 3, 5, 8, ...)

Herleitung: Jeder Baum hat immer genau ein Blatt mehr als innere Knoten. Ist mb die Midestblattzahl eines AVL-Baumes, dann ist mb(h) = mb(h-1) +mb(h-2).

Höhe: Nein! Denn formt man die oben genannte Formel um erhält man, dass \(h \leq 1,44*log(n)\), d.h eine Höhe, die "nur" um 44% grösser ist als die eines normalen Suchbaumes. (Das "nur" steht so in den Notizen... Finde 44% ja nicht sooo unerheblich... Aber eben. Konstante Faktoren sind in D&A egal... grml)

Wie funktioniert die Implementierung der Einfüge-Operation im AVL Baum? (In Worten)

Wir merken uns zu jedem Knoten die aktuelle "Balance". Werde der Knoten k unter p eingefügt. Die Balance sagt aus, ob die beiden unteren Teilbäume (von p) jeweils gleich gross sind (0), der linke (-1) oder der rechte (1) grösser ist.

Falls: \(bal(p) = \pm1 \mapsto bal(p) =0\): Es muss nichts weiter unternommen werden. Die Höhe des Baums hat sich nicht geändert. 

Falls \(bal(p) = 0 \mapsto bal(p) =\pm1\): Die Höhe des Baums hat sich geändert. Entsprechend muss die Balance auch in allen Elternknoten von p angepasst werden.