Prof. Dr. V. Strehl Informatik 8 17. November 2004 Übungen zu Theoretische Informatik 3 WS 2004/05 The advanced reader who skips parts that appear him too elementary may miss more than the less advanced reader who skips parts that appear him too complex. G. Pólya in Mathematics and Plausible Reasoning • Aufgabe 13: Flip-Sorting Ist L = L[1..n] eine Liste von n Elementen, so erzeugt ein k-Flip (mit 2 ≤ k ≤ n) daraus eine neue Liste L0 , indem man die Reihenfolge der ersten k Elemente umdreht, d.h. L0 = [Lk , Lk−1 , . . . , L1 , Lk+1 , Lk+2 , . . . , Ln ]. Mittels k-Flips kann man sortieren, beispielsweise [4, 2, 5, 1, 3]7→[2, 4, 5, 1, 3] 7→ [5, 4, 2, 1, 3] 7→ [3, 1, 2, 4, 5] 7→ [2, 1, 3, 4, 5] 7→ [1, 2, 3, 4, 5] sortiert [4, 2, 5, 1, 3] mit 5 k-Flips für k = 2, 3, 5, 3, 2. – Zeigen Sie, dass man jede Permutation der Zahlen {1, 2, . . . , n} mit höchstens 2n − 3 Flips sortieren kann. – Zeigen Sie, dass es für jedes n ≥ 3 Permutationen von {1, 2, . . . , n} gibt, bei denen man mindestens n Flips benötigt, um sie zu sortieren. • Aufgabe 14: Matrix-Sorting Es sei A = [ai,j ]1≤i≤m,1≤j≤n eine Matrix mit (verschiedenen) ganzzahligen Koeffizienten. Die Matrix sei zeilenweise sortiert, d.h. ai,j < ai,j+1 für 1 ≤ j < n und alle 1 ≤ i ≤ m Jetzt wird jede der n Spalten der Matrix separat sortiert. Zeigen Sie, dass dabei die Eigenschaft “zeilenweise sortiert” zu sein nicht verlorengeht. (Hinweis: diese Aussage ist der Ausgangspunkt für den bekannten Sortieralgorithmus Shellsort) • Aufgabe 15: Binäre B?äume und Suchbäume für Permutationen 1. Zeigen Sie, dass für jeden binären Baum t ∈ B folgender Zusammenhang zwischen innerer Weglänge wi (t), äusserer Weglänge we (t) und der Anzahl innerer Knoten i(t) besteht: we (t) = wi (t) + 2 i(t). 2. Verschiedene Permutationen können bei der Konstruktion eines binären Suchbaumes zu demselben Resultat führen. Ist t ∈ Bn ein binärer Baum mit n inneren Knoten, so kann man die Anzahl der σ ∈ Sn mit tσ = t folgendermassen einfach berechnen. Dazu bezeichne für jeden inneren Knoten a ∈ I(t) ta den Teilbaum von t mit der Wurzel a und i(ta ) die Anzahl der inneren Knoten dieses Teilbaumes. Dann ist Y n!/ i(ta ) a∈I(t) die Zahl der σ ∈ Sn mit tσ = t. Beweisen Sie dies durch Induktion über den Aufbau von t. 3. Ein Beispiel zum vorigen Punkt: die Permutation σ = 537819264 ∈ S9 liefert als binären Suchbaum tσ den Baum mit der linearen Codierung code(tσ ) = 531247689 wobei die Zahlen die Nummern (Bewertungen) v(a) der jeweiligen inneren Knoten von tσ sind. Die Teilbäume ta mit den 1 ≤ k ≤ 9 nummerierten inneren Knoten a ∈ I(t) als Wurzel haben – in dieser Reihenfolge – ihrerseits 2,1,4,1,9,1,4,2,1 innere Knoten. Also gibt es insgesamt 9! 362880 = = 630 2 · 1 · 4 · 1 · 9 · 1 · 4 · ·1 576 Permutationen, die denselben binären Suchbaum erzeugen. Welchen Suchbaum erzeugt σ = 569237418, welches ist dessen innere Weglänge und wieviele Permutationen erzeugen denselben Suchbaum? • Aufgabe 16: Exakte minimale Anzahl der benötigten Vergleiche beim Sortieren Die Funktion S(n) gibt die exakte minimale Anzahl der zum Sortieren von n Elementen einer totalgeordneten Menge benötigen Vergleichsoperationen an. Zeigen Sie, dass S(3) = 3, S(4) = 5 und S(5) = 7 gilt. Hinweis: für diese Aufgabe ist es hilfreich, wenn man sich die Aufgabe des Sortierens so vorstellt, dass man schrittweise durch Vergleiche eine zunächst unbekannte) totale Ordnung lernt und den jeweiligen Kenntnisstand in Form einer partiellen Ordnung notiert. Am Anfang besteht diese partielle Ordnung aus paarweise unvergleichbaren Elementen (im Sinne von partiellen Ordnungen), jeder Vergleich liefert eine weitere Grösser-Kleiner-Beziehung zwischen zwei Elementen, die mit den schon bekannten Beziehungen verträglich sein muss und diese per Transitivität der (partiellen) Ordnungsrelation erweitert. Um das Vorgehen beispielhaft zu erläutern: wenn man 4 Elemente a, b, c, d hat, über die man zunächst nichts weiss, kann man annehmen, dass der erste Vergleich zwischen a und b stattfinden, etwa a < b zu Resultat hat. Weiter ist nichts bekannt. Als nächstes kann man entweder c und d vergleichen, dann hat man als Resultat zwei unverbundene Ketten der Länge 2, z.B. a < b und c < d, oder (z.B.) c mit a oder mit b vergleichen. Wenn man b < c bzw. c < a findet, ist natürlich a < b < c bzw. c < a < b die Folge, d.h. man hat eine Kette der Länge 3 und einen isolierten Knoten d. Und so weiter... Natürlich ist die Vielfalt der möglichen Vorgehensweisen riesig gross, aber viele der entstehenden Situationen sind gleichwertig: im obigen Beispiel hat man nach zwei Vergleichen gerade mal drei wesentlich verschiedene Situationen.