Sie sind auf Seite 1von 3

Lehrstuhl Computergrafik Prof. Dr.-Ing. Hendrik P.A.

Lensch Katharina Schwarz, Manuel Finckh

Informatik I
Ubungsblatt 6 - Gruppe B
Ausgabe: Di, 22.01.13 - Abgabe: Do, 31.01.13 - 12:00 Uhr

Fr die Bearbeitung des Ubungsblattes haben Sie anderthalb Wochen Zeit. Die Abgabe muss in u elektronischer Form sein! D. h., Ihre Bearbeitung muss als .txt Datei ins CIS System hochgeladen werden. Gibt es Programmieraufgaben auf dem Ubungsblatt, so muss der Quellcode gesondert als .java Datei hochgeladen werden.

Aufgaben
6.1 Komplexitt der Fakulttsfunktion (3 + 3 + 4 Punkte) a a
Die Komplexitt eines Algorithmus steht im direkten Zusammenhang mit der Basisoperation, die bei a der Komplexittsbetrachtung von Interesse ist. Es sei nun der folgende Algorithmus zur Berechnung der a Fakulttsfunktion gegeben: a
public static int faculty ( int n ) { if ( n ==1) { return 1; } return multiply (n , faculty (n -1)); }

a) Es sei
public static int multiply ( int n , int m ) { return n * m ; }

Wieviele Multiplikationen werden beim Aufruf von faculty(n) ausgefhrt? u b) Es sei jetzt:
public static int multiply ( int n , int m ) { int result =0; for ( int i =1; i <= n ; i ++) { result = m + result ; } return result ; }

Wieviele Additionen werden zur Berechnung der Fakultt von n durchgefhrt? a u c) Nun wird die Zeile result = m+result; in der Methode multiply im Aufgabenteil b) ersetzt durch result = plus(m,result); mit folgender Methode plus:

public static int plus ( int n , int m ){ for ( int i =1; i <= n ; i ++) { m = m +1; } return m ; }

Als Basisoperation betrachten wir das Erhhen eines Werts um 1. Welche Laufzeitkomplexitt o a besitzt der Algorithmus nun?

6.2

Katz und Maus (5 + 5 Punkte)

Die faule Katze Zweistein will Muse fangen und sich dazu mglichst wenig bewegen. Ihr Plan ist es zu a o berechnen, in welchem Raum sich Muse mit der grten Wahrscheinlichkeit aufhalten, um dann dort a o auf eine Maus zu warten. Als Grundlage fr ihre Berechnungen kennt die Katze die Wahrscheinlichkeiten, u mit welcher eine Maus in einem Raum verweilt oder in einen anderen Raum geht. Es gelten folgende Ubergangswahrscheinlichkeiten: Aufenthaltsort Aufenthaltsort (Wahrscheinlichkeit) zum Zeitpunt ti zum Zeitpunkt ti+1 Wohnzimmer Wohnzimmer (0.2) Esszimmer (0.5) Gang (0.3) Esszimmer Esszimmer (0.5) Kche (0.3) u Wohnzimmer (0.2) Kche u Kche (0.6) u Esszimmer (0.3) Gang (0.1) Gang Wohnzimmer (0.4) Kche (0.1) u Bad (0.5) Bad Bad (0.7) Gang (0.3) Diese Ubergangswahrscheinlichkeiten knnen als gerichteter Graph mit Kantengewichten aufgefasst o werden. a) Implementieren Sie die Java Klasse AdjazenzMatrix.java welche als Datenstruktur fr einen Grau phen dient. Die Klasse soll einen Konstruktor erhalten, welcher eine Adjazenz-Matrix vom Typ float[][] fr eine ubergebene Anzahl von Knoten anlegt und alle Kantengewichte auf 0.0 setzt. u Die Klasse soll ebenfalls eine print Methode erhalten, welche die Adjazenz Matrix auf dem Bildschirm ausgibt. Legen Sie im Hauptprogramm KatzMaus.java in der main-Routine einen Graphen mit den obigen Ubergangswahrscheinlichkeiten an und geben Sie den Graphen auf dem Bildschirm aus. b) Simulieren Sie nun das Verhalten der Maus: Im Zeitschritt t0 soll sich die Maus auf dem Gang benden. Benutzen Sie Zufallszahlen aus Math.random() (Interval [0, 1]) um die Entscheidung der Maus zu simulieren: 1. t0 : Gang 2. whle z [0, 1] zufllig a a 3. wenn z [0, 0.4), setze t1 Wohnzimmer wenn z [0.4, 0.5), setze t1 Esszimmer wenn z [0.5, 1.0], setze t1 Bad D.h. die Ubergangswahrscheinlichkeiten (Kantengewichte), teilen das Interval [0, 1] in verschieden groe Stcke auf. Das Interval, in welches die Zufallszahl fllt, legt fest, in welchen Knoten im u a nchsten Zeitschritt gegangen wird. Simulieren Sie 10000 Zeitschritte und zhlen Sie dabei mit, wie a a oft die Maus einen Knoten besucht hat. Geben Sie das Ergebnis aus. Wie ndert sich das Ergebnis, a wenn Sie in einem anderen Knoten starten?

6.3

Insertion Sort (4 + 2 + 4 Punkte)

In dieser Aufgabe soll der Insertion Sort Algorithmus auf einer Linearen Liste implementiert werden. a) Implementieren Sie zunchst die fr eine lineare Liste bentigten Klassen LineareListe.java und a u o ListElement.java mit geeigneten Konstruktoren. Der in der Liste zu speichernde Wert soll vom Typ float sein. Implementieren Sie auerdem die beiden Methoden loeschen und einfuegen der Klasse LineareListe, welche es ermglichen, ein Listenelement aus der Liste zu entfernen o beziehungsweise an einer bestimmten Stelle einzufgen. u b) Implementieren Sie eine rekursive Methode fr die Ausgabe der gesamten Liste auf der Konsole. u Testen Sie die Lineare Liste in dem Java-Programm TestLL.java indem Sie eine leere Liste anlegen, mit Werten aus Math.random() befllen und danach den Inhalt der Liste ausgeben. u c) Implementieren Sie nun den Insertion Sort Algorithmus in zwei Varianten: 1. Legen Sie eine zweite Liste an. Entnehmen Sie nacheinander die Listenelemente aus der ersten Liste und fgen Sie diese sortiert in die zweite Liste ein (erweitern Sie gegebenenfalls die u Methode einfuegen so, dass sortiert eingefgt wird). u 2. Arbeiten Sie nur auf der ersten Liste ohne eine zweite Liste anzulegen. Testen Sie beide Varianten in der Testklasse indem Sie Listen anlegen, mit zuflligen Werten befllen a u und die sortierten Listen ausgeben.