Fakultät für Informatik Professur Theoretische Informatik und Informationssicherheit Prof. Dr. Hanno Lefmann Wintersemester 2002/03 18. Dezember 2002 Theoretische Informatik I 10. Übung Aufgabe 1 Es sei ein gerichteter Graph G = (V, E) mit einer Längenfunktion c : E → N gegeben. Das Problem der kürzesten Pfade besteht darin, zu einem gegebenen Startknoten a ∈ V für alle von a aus erreichbaren Knoten v ∈ V die Länge eines kürzesten gerichteten Pfades von a zu v zu berechnen. Dabei ist die Länge eines Pfades (v1 , . . . , vk ) (mit (vi , vi+1 ) ∈ E für Pk−1 alle i ∈ {1, . . . , k − 1}) gleich i=1 c((vi , vi+1 )), d. h. gleich der Summe der Längen der Kanten des Pfades. Betrachten Sie den folgenden Algorithmus von Dijkstra: Dijkstra(a): 1. Für alle v ∈ V : färbe v weiß und setze dist(v) := ∞. 2. Färbe a grau und setze dist(a) := 0. 3. Solange es einen grauen Knoten gibt: 3.1. Wähle einen grauen Knoten w, der den kleinsten dist-Wert hat. 3.2. Färbe w schwarz. 3.3. Für alle v ∈ Adj(w): 3.3.1. Setze dist(v) := min{dist(v), dist(w) + c((w, v))}. 3.3.2. Falls v weiß ist, färbe v grau. Zeigen Sie, dass dieser Algorithmus das Problem der kürzesten Pfade löst, d. h., dass am Ende genau alle von a aus erreichbaren Knoten schwarz sind und der dist-Wert jeweils die Länge des kürzesten Pfades von a aus ist. Hinweis: Beweisen Sie per Induktion über die Zahl i der erfolgten Schleifendurchläufe 3. - 3.3.2.: (a) Für alle i schwarzen Knoten v ist dist(v) die Länge des kürzesten Pfades von a nach v in G. (b) Alle schwarzen Knoten haben nur schwarze oder graue Knoten als Nachbarn. Für jeden grauen Knoten v ist dist(v) gleich der Länge des kürzesten Pfades von a zu v, der nur über schwarze Knoten läuft. Aufgabe 2 Wir wollen mit dem Sortierverfahren BUBBLESORT ein Array der Länge n aufsteigend sortieren. In diesem Verfahren wird wiederholt das Array von links nach rechts durchlaufen. Falls man zwei benachbarte Zahlen findet, von denen die erste größer ist als die zweite, vertauscht man sie. Falls in einem Durchlauf kein solches Paar gefunden wird, stoppt das Programm. (a) Zu einem Array A mit n Einträgen definieren wir als Transpositionszahl trans(A) := |{(i, j) : 1 ≤ i < j ≤ n ∧ A[i] > A[j]}|. Zeigen Sie, dass die Anzahl der Vertauschungen, die BUBBLESORT durchführt, und trans(A) identisch sind. (b) Beweisen Sie, dass das Verfahren tatsächlich sortiert. (c) Welche Laufzeit bzgl. der Anzahl Vergleiche hat das Verfahren im schlechtesten und im besten Fall? Wie sehen die Eingaben in diesen beiden Fällen aus? (d) Welche Laufzeit bzgl. der Anzahl Vertauschungen hat BUBBLESORT bei Eingaben der Länge n im Average Case, wenn die Array-Elemente paarweise verschieden sind? Aufgabe 3 Das allgemeine Mischproblem besteht darin, zwei jeweils aufsteigend sortierte Folgen a1 , . . . , an und b1 , . . . , bm zu einer sortierten Folge zusammenzufügen. Finden und beweisen Sie eine untere Schranke für die Anzahl der dabei benötigten Vergleiche im Worst Case. Aufgabe 4 Gegeben ist eine n × n-Matrix M mit ganzzahligen Einträgen sowie eine natürliche Zahl k in Binärdarstellung. Berechnen Sie möglichst effizient das Matrixprodukt M k und analysieren Sie die Anzahl Operationen (= Anzahl arithmetischer Operationen über ganzen Zahlen) bei Ihrem Verfahren. Ohne Einschränkung sei n eine Potenz von 2, also n = 2l .