TuH2 scheme
Inhaltsverzeichnis |
Hinweis: Diese Seite war als separate Seite für die Scheme-Beispiele gedacht, da wir Anfangs auf der Hauptseite Java verwendet haben. Dies ist jetzt aber nicht mehr der Fall. Diese Seite ist deshalb nicht mehr von Bedeutung. Die SchemeBeispiele wurden in die Hauptseite und in die Übungen eingearbeitet. Danke natürlich an Herrn Prof. Wagenknecht für die Random-maker-Prozedur. Diese ist nun in der Übungsseite eingebunden.
Scheme Programmbeispiele
Für die Ausführung der Hauptprogramme sind diverse Hilfsprozeduren nötig.
- zzls - Erstellt eine Zufallszahlenliste
- mv-mergesort - Sortiert eine Liste
- teillisten2 - teilt eine Liste; wird von mv-mergesort und binaersuche benötigt
- verbinden - verbindet zwei Listen; wird von mv-mergesort benötigt
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.
Nun können wir eine Hilfsprozedur zur Erzeugung von Zufallszahlenlisten definieren.
B7FNST oujoxacobson, [url=http://mwrqbpujcptl.com/]mwrqbpujcptl[/url], [link=http://ubwnozuyyctq.com/]ubwnozuyyctq[/link], http://lsixyuijdixq.com/
zzls
mv-mergesort
Die Prozedur ist aus "Teilen und Herschen 1" bekannt. Sie sortiert eine gegebene Liste der Größe nach.
teillisten2
Teilt eine Liste in zwei Teillisten.
verbinden
Verbindet zwei Listen zu einer einzigen Liste
Hauptprogramme
Beispielliste
Zu Anfangs definieren wir uns eine Liste mit Zufallszahlen. Dazu verwenden wir die Hilfsprozedur zzls. Die Liste soll aus 20 Zahlen zwischen 1 und 100 bestehen.
Anschließend soll die Liste aufsteigend sortiert werden. Dazu verwenden wir die Hilfsprozedur mv-mergesort. Die sortierte Liste wird in liste2 gebunden.
einfache Binaere Suche
Die Prozedur erwartet als Argumente die Gesuchte Zahl und eine sortierte Eingabeliste. Wenn die gesuchte Zahl gefunden wurde, erhält man die Ausgabe "Schlüssel gefunden", andernfalls die Ausgabe "Schlüssel nicht Enthalten". Der Index des gesuchten Begriffs wird nicht zurückgegeben.
Dieses Ergebnis ist noch recht unbefriedigend. Wir erweitern die Prozedur deshalb um zwei Funktionalitäten:
- Die Anzahl der rekursiven Aufrufe soll festgehalten werden. Dies wird für die Empirische Effizienzanalyse benötigt.
Dazu wird ein Zähler calls definiert, der vor jedem rekursiven Aufruf inkrementiert wird. Nach Abarbeitung der Prozedur kann dieser Zähler zur Analyse herangezogen werden.
- Es soll nicht nur herausgefunden werden, ob ein Element in der Liste enthalten ist, sondern auch die Stelle des gefundenen Elements innerhalb der Liste.
Wir definieren für die Eigentliche Suche die Prozedur binsuche und für den Aufruf die Prozedur binaersuche2. Diese hat die Aufgabe sicherzustellen, dass der Rekursionszähler und der Index-Zähler vor jedem Aufruf auf 0 gesetzt wird.
Binaersuche2
Nachdem man die Suche durchgeführt hat, kann man die Variable calls zur Empirischen Effizienzanalyse auswerten.
Zum Vergleich hier eine Implementierung der Sequenziellen Suche mit Zähler.
Auch hier kann im Anschluss die Zählervariable calls ausgewertet werden. Bei einer sortierten Liste entspricht die Anzahl der Rekursionsaufrufe gleichzeitig auch dem Index des gesuchten Elements (sofern das Element enthalten ist).