Aufgaben - TuH2
Aus ProgrammingWiki

Inhaltsverzeichnis |
Aufgaben zur Binären Suche
Aufgabe (a) - Durchrechnen
Gegeben sei folgende Liste:
(2 3 5 8 9 11 13 20 32 33 38)
Gesucht ist das Element 13
Verdeutlichen sie sich die Arbeitsweise der binären Suche.
Zeichnen sie den Suchbaum!
Aufgabe (b) - Empirische Analyse
Die modifizierte Variante der binären Suche in Scheme bietet mit ihrem Zähler die Möglichkeit für eine empirische Analyse. Führen Sie eine empirische Aufwandsanalyse durch. Um ausreichend Testfälle zu produzieren, stehen die Prozeduren zzls für die Generierung einer Zufallszahlenliste, sowie mv-mergesort (Bekannt aus Teile und Herrsche 1) zum Sortieren der generierten Liste zur Verfügung.
Führen Sie die empirische Aufwandsanalyse außerdem mit der Sequenziellen Suche durch, um einen qualitativen Vergleich anstellen zu können.
Der Scheme-Interpreter versteht das Sprachelement random zunächst noch nicht. Eine hier "versteckte" Prozedur definiert eine "Glücksrad-Fabrik", die im Folgenden verwendet wird, um einen Zufallszahlen-Generator (random) zu erzeugen.
Hilfsprozeduren
Der Scheme-Interpreter versteht das Sprachelement random zunächst noch nicht. Eine hier "versteckte" Prozedur definiert eine "Glücksrad-Fabrik", die im Folgenden verwendet wird, um einen Zufallszahlen-Generator (random) zu erzeugen.
Hinweis 2: Wie in der Vorlesung "Probabilistische Algorithmen" im Kapitel Probabilistische_Algorithmen_2#.28Pseudo.29Zufallszahlen zu erfahren ist, ist die Bereitstellung von Zufallszahlen keinesfalls Trivial. Die Random-Prozedur stellt deshalb bei jedem Aufruf die gleichen "zufälligen" Zahlen her. In einer Lokalen DrScheme-Umgebung funktioniert dies besser. Für unsere Zwecke soll dies hier aber ausreichen
Nun können wir eine Hilfsprozedur zur Erzeugung von Zufallszahlenlisten definieren.
Vorgefertigte, unsortierte Listen
Diese Listen müssen für die Binäre Suche in Sortierter Form vorliegen. Zum Sortieren verwenden wir die Prozedur mv-mergesort welche in der Vorlesung Teile und Herrsche 1 behandelt wurde.
Die sortierten Listen
Überprüfe, ob die Liste korrekt Sortiert wurde.
Somit haben wir alle Werkzeuge zur Hand, um die Empirische Analyse durchzuführen und den Aufwand der Binären Suche mit dem der Sequenziellen Suche zu vergleichen
Beispielaufruf Binaersuche:
Beispielaufruf Sequenzielle Suche:
Von Interesse sind für die Analyse die Anzahl der Rekursionsschritte. Führen Sie nun die Aufwandsanalyse mit geeigneten Werten durch und fassen Sie Ihre Ergebnisse zusammen.
Aufgabe (c) - Modifikation der Binaeren Suche
Auf der Hauptseite wurde schon angemerkt, dass die Binäre Suche zwar im Prinzip Logarithmischen Aufwand besitzt, unsere Scheme-Implementation dies jedoch nicht erfüllt. Machen Sie sich klar, warum dies so ist. Betrachten Sie dazu auch den Quellcode der Prozedur teillisten2
Überlegen Sie sich eine Lösung für dieses Problem. Wie könnte man die Binäre Suche umgestalten? Ziehen Sie die Möglichkeiten von Vectoren in Scheme in Betracht. Scheme stellt unter anderem diese Sprachelemente zur Benutzung von Vectoren bereit:
vector: Definiert einen Vektor
vector?: Überprüft, ob es sich um einen Vektor handelt
vector-length: gibt die Länge des Vektors zurück
vector-ref: gibt das Element an einer bestimmten Stelle zurück
vector->list: Wandelt einen Vektor in eine Liste um
list->vektor: Wandelt eine Liste in einen Vektor um
Genauere Erklärungen und ein paar mehr Sprachelemente finden Sie z.B. HIER
Versuchen Sie nun eine verbesserte Binäre Suche zu Implementieren. Sie können dafür dieses Run-Element verwenden:
Eine mögliche Lösung finden Sie auf der Lösungsseite
Aufgaben zum Karatsuba Algorithmus
Aufgabe (a)
Multiplizieren sie folgende Werte mit Hilfe Karatsubas Verfahren.
Strassen-Algorithmus
Aufgabe (a)
Berechnen Sie folgendes Produkt mit Hilfe des Strassenalgorithmus. Verwenden Sie ein Computer-Algebra-System.
Stellen Sie dabei auch speziell die Schritte heraus, in denen das Teilen und das Herrschen in diesem Algorithmus zum tragen kommt.
Lösungen
Damits nicht gleich ins Auge fällt haben wir die Lösungen auf eine seperate Seite gepackt! Die findet ihr hier: Lösungen - TuH2L