Übung Algorithmen & Datenstrukturen SS 2016 Kim Völlinger 1 Vorbereitung heute… …zum 3. Übungsblatt • Skip-Listen • Listen • Dynamische Programmierung • Suchen 2 Vorbereitung heute… …zum 3. Übungsblatt • Skip-Listen • Listen • Dynamische Programmierung • Suchen 3 Doppelt verkettete sortierte Liste 4 Knoten: ListNode prev next value public class ListNode { // Der Wert des Knoten public int value; // Zeiger auf den Nachfolger // und den Vorgänger public ListNode next; public ListNode prev; ListNode } 5 Doppelt verkettete sortierte Liste: SortedList −∞ ∞ FIRST LAST ListNode ListNode • Die leere Liste enthält den Start- und Endknoten. SortedList 6 Skip-Liste: SkipList FIRST LAST −∞ ∞ SortedList −∞ FIRST 20 SortedList ∞ LAST • Jede Ebene repräsentiert eine sortierte doppelt verkettete Liste. • Kommt ein Knoten auf einer oberen Ebene vor, so kommt er auch auf allen darunter liegenden Ebenen vor. • Alle Knoten kommen auf der untersten Ebene vor. 7 Knoten: ListNode up prev next public class ListNode { // Der Wert des Knoten public int value; value // Zeiger auf den Nachfolger // und den Vorgänger public ListNode next; public ListNode prev; down ListNode // Zeiger auf die obere // und untere Ebene public ListNode up; public ListNode down; } 8 Skip-Listen: Suchen 9 Skip-Listen: Einfügen 10 Vorbereitung heute… …zum 3. Übungsblatt • Skip-Listen • Listen • Dynamische Programmierung • Suchen 11 Existiert ein Kreis? Gegeben sei eine einfach verkettete Liste. Gibt es einen Kreis? 12 Vorbereitung heute… …zum 3. Übungsblatt • Skip-Listen • Listen • Dynamische Programmierung • Suchen 13 Dynamische Programmierung Problem hat optimale Substruktur. Teilprobleme überlappen. Teillösungen merken und wiederverwenden. zerlegen Problem rechnen zusammenführen Teilproblem Teillösung … … Teilproblem Teillösung Teilproblem Teillösung Beispiel: Fibonacci-Zahlen Lösung 14 Vorbereitung heute… …zum 3. Übungsblatt • Skip-Listen • Listen • Dynamische Programmierung • Suchen 15 Suche • Redakteur einer Handy-Zeitschrift testet neues Smartphone auf Bruchtauglichkeit • Er hat 𝑘 Smartphones und eine Leiter mit 𝑛 Sprossen • In jedem Versuch steigt er auf eine Sprosse und lässt ein Smartphone fallen. • Entweder das Smartphone bleibt unbeschadet oder es bricht auseinander. Er möchte die höchste Sprosse ermitteln, bei der das Smartphone nicht bricht und dabei außerdem die Anzahl der Versuche minimieren. Gib einen Algorithmus an, der die Anzahl der Testversuche im Worst-Case minimiert und höchstens 𝑘 Smartphones verwendet: a) 𝑘 = 1 b) 𝑘 = ∞ c) 𝑘 = 2 16
© Copyright 2024 ExpyDoc