Algorithmen und Datenstrukturen – Übung 1 - FB2

Werbung
Algorithmen und Datenstrukturen – Übung 1
Die folgenden Lösungen sind allesamt Lösungsvorschläge. Bei einigen Aufgaben gibt es
tatsächlich nur eine Lösung, im allgemeinen kann es aber mehrere Lösungswege geben.
Wenn Sie nicht sicher sind, ob Ihre Lösung äquivalent zu den dargestellten Lösungen ist,
fragen Sie bitte nach.
Aufgabe 1
Skizzieren Sie verschiedene nicht-deterministische Möglichkeiten (unter Beachtung der
Vorrangregeln), die folgende Formel schrittweise auszuwerten:
2 * (25 + 3 * (4 + 5)) - 314 - 4 * 63
Lösungsvorschlag:
Als Skizzierungsmöglichkeiten gibt es Baumdarstellung, natürliche Sprache,
Ablaufdiagramme. Wichtig ist, daß erkannt wird, daß der Term drei unterschiedliche
Auswertungsanfänge hat:
●
-4 * 36
●
-314
●
2 * (25 + 3 * (4 + 5))
Ausgehend davon kann nach einem Start nochmals nach zwei Möglichkeiten
unterschieden werden, so daß insgesamt 3 * 2 * 1 = 6 verschiedene
Auswertungsmöglichkeiten vorliegen.
Aufgabe 2
Ein Bonbonglas ist mit mit vielen Lakritzeschnecken und Gummibärchen gefüllt. Außerdem
liegt neben dem Glas eine "Wundertüte", die unerschöpflich viele Lakritzeschnecken
enthält. Der folgende Vorgang soll nun solange ausgeführt werden, bis er sich nicht mehr
wiederholen läßt:
•
•
•
Entnehmen Sie zwei beliebige Süßigkeiten aus dem Glas.
Falls beide die gleiche Geschmacksrichtung haben, essen Sie sie auf und füllen
eine Lakritzeschnecke aus der nebenstehenden Tüte in das Glas.
Haben Sie eine Lakritzeschnecke und ein Gummibärchen gezogen, dürfen Sie nur
die Lakritzeschnecke naschen. Das Gummibärchen müssen Sie wieder in das Glas
zurücklegen.
Folgende Fragen drängen sich auf:
1. Terminiert dieser Vorgang?
2. Wieviel Süßigkeiten verbleiben im Glas?
3. Ist der Vorgang determiniert oder deterministisch?
Lösungsvorschlag:
1. Da beide Entnahmemöglichkeiten (zwei gleiche oder zwei unterschiedliche
Süssigkeiten) zu einer Verringerung des Gesamtinhalts führen, ist irgendwann das
Glas leer, also terminiert dieser Vorgang.
2. Entweder 0 oder 1
3. (Achtung, Korrektur zur Aussage in der Übung) Da das Ziehen und der daraus
resutlierende nächste Schritt zufällig ist, ist der Algorithmus nicht deterministisch.
Da durch die Zufallsziehung auch das Ergebnis variiert (ganz abgesehen von der
Abhängigkeit durch die Eingabemenge), ist der Algorithmus auch nicht determiniert.
Aufgabe 3
Formulieren Sie einen (intuitiven) terminierenden, deterministischen Algorithmus für die
Rechenoperation Addition über den natürlichen Zahlen = {0, 1, 2, 3, ...}. Die natürlichen
Zahlen sollen als Dezimalzahlen dargestellt werden.
Bei der Addition zweier natürlicher Zahlen x, y
mit dem Ergebnis z
(z = x + y)
dürfen nur die elementaren Operationen Erhöhung und Verminderung einer natürlichen
Zahl um Eins (Inkrement und Dekrement) und die Vergleichsoperation '=' verwendet
werden.
Machen Sie plausibel, daß Ihr Algorithmus für alle erlaubten Werte terminiert. Erläutern
Sie den Algorithmus am Beispiel Ihrer Wahl.
Lösungsvorschlag:
Der folgende Lösungsvorschlag ist in Pseudocode geschrieben:
int x, y, z;
until (y = 0) {
x++;
y--;
}
z = x;
In z steht nun das Additionsergebnis.
Aufgabe 4
Formulieren Sie einen weiteren (intuitiven) terminierenden, deterministischen Algorithmus
für die Rechenoperation Division über den natürlichen Zahlen = {0, 1, 2, 3, ...}. Die
natürlichen Zahlen sollen als Dezimalzahlen dargestellt werden.
Die Division zweier natürlicher Zahlen x, y
, y 0 liefert das ganzzahlige Ergebnis z
und den ganzzahligen Rest r
, so daß gilt x = z * y + r mit 0 r < y. Zulässige
Elementaroperationen sind die Addition und Subtraktion zweier beliebiger natürlicher
Zahlen, sowie die Vergleichsoperation " ".
Machen Sie plausibel, daß Ihr Algorithmus für alle erlaubten Werte terminiert. Erläutern
Sie den Algorithmus am Beispiel Ihrer Wahl.
Lösungsvorschlag:
Der folgende Lösungsvorschlag ist in Pseudocode geschrieben:
int x, y, z, r;
until (x <= y) {
x = x - y;
z++;
}
r = x;
In z steht nun das Divisionssergebnis, in r der Rest.
Herunterladen