Institut für Computergraphik und Algorithmen Arbeitsgruppe für Algorithmen und Datenstrukturen Übungen zu Effiziente Algorithmen 186.144 VU 2.0 - WS 2007/08 Übungsblatt 2 4. Dezember 2007 Die hier angeführten Aufgaben sind für die Übungsstunde am 22. Jänner 2008 vorzubereiten. Aufgabe 1 Huffman Kodierung Angenommen die Häufigkeit aller Zeichen in einem Text sind paarweise verschieden, ist der HuffmanKodierungsbaum immer eindeutig? Aufgabe 2 Zip-Bombe Welches der vorgestellten Textkompressionsverfahren eignet sich am besten für das Basteln von Zip-Bomben? (Zip-Bombe: Text, der komprimiert möglichst wenig Speicherplatz benötigt, entpackt aber aus fast beliebig vielen Zeichen besteht.) Aufgabe 3 Suffix-Trees: Suffix-Links Erstellen Sie einen Suffix-Tree für eine beliebige, selbst gewählte Zeichenkette S (S nicht schon in der Vorlesung behandelt), die zumindest 10 Zeichen lang ist. Der resultierende Suffix-Tree soll dabei am Ende mindestens 3 Suffix-Links enthalten. Die Erstellung des Trees muss nicht mit dem Algorithmus von Ukkonen erfolgen. Aufgabe 4 Suffix-Trees: Longest Common Substring Veranschaulichen Sie mit zwei selbst gewählten Strings Sa (|Sa | = ma ) und Sb (|Sb | = mb ), wie mit Hilfe von Suffix-Trees der längste gemeinsame Substring in O(ma + mb ) gefunden werden kann. Aufgabe 5 Suffix-Trees: Zirkuläre Strings Zeigen Sie anhand eines selbst gewählten Beispiels, wie ein zirkulärer String S (S hat keine definierte Anfangsund Endposition) mittels eines Suffix-Trees so ,,aufgeschnitten” werden kann, dass der lexikalisch kleinste aller möglichen Strings daraus resultiert. Aufgabe 6 Suffix-Trees: DNA Kontaminierung Ein großes Problem im Bereich der DNA-Sequenzierung ist die Verschmutzung (Kontaminierung) einer DNASequenz mit Stücken fremder DNA. Um Ergebnisse zu sichern, sollte eine Überprüfung auf Verschmutzung erfolgen. Gegeben sind zwei Strings: Sa (|Sa | = ma ) , die zu überprüfende DNA-Sequenz, und Sb (|Sb | = mb ), eine Sequenz von einzelnen, aneinandergefügten DNA-Stücken, die zu einer Kontaminierung von Sa geführt haben können. Gesucht sind nun alle Substrings von Sb in Sa , die eine bestimmte Länge l überschreiten und damit Kandidaten für eine Verunreinigung darstellen. Demonstrieren Sie anhand eines selbst gewählten, kleinen Beispiels, wie dieses Problem in O(ma + mb ) gelöst werden kann. 1 Aufgabe 7 Suffix-Trees: Textkompression Das Ziv-Lempel-Kompressionsverfahren auf Basis von LZSS kann mit Hilfe von Suffix-Trees effizient implementiert werden. Beschreiben Sie den LZ-Algorithmus unter Verwendung von Suffix-Trees. Wie würden Sie das Problem des sich ,,bewegenden” Textfensters lösen? Aufgabe 8 Suffix-Arrays Geben Sie das Suffix-Array für den String S =wendende an und berechnen Sie den Inhalt der beiden Arrays Llcp und Rlcp. Aufgabe 9 Suffix-Trees und -Arrays: Recherche Recherchieren Sie mindestens drei Einsatzgebiete von Suffix-Trees bzw. Suffix-Arrays und stellen Sie diese kurz vor. Aufgabe 10 Fibonacci Heaps – Maximale Höhe Nach der Vorlesung “Effiziente Algorithmen” gibt es einen Riesen-Hype um die Fibonacci Heaps. Viele eingefleischte Fans schwören sogar darauf, dass die Höhe eines Fibonacci Heaps mit n Knoten durch O(log n) beschränkt sei. Widerlegen Sie diese radikale Behauptung, indem Sie ein Schema angeben, das für jedes n ∈ N einen Fibonacci Heap mittels einer Sequenz von Operationen konstruiert, der nur aus einem einzigen entarteten Baum in Form einer linearen Liste mit n Knoten besteht. Aufgabe 11 Fibonacci Heaps – Anregung Bei increaseKey werden Knoten angeregt, wenn sie ein Kind verlieren. Verliert ein angeregter Knoten ein weiteres Kind, wird er abgespaltet. In Summe wird ein Knoten abgespaltet, wenn er 2 Kinder verloren hat. Erläutern Sie das Verhalten von verschiedenen Varianten, wo ein Knoten abgespaltet wird, nachdem er k (= 1, 3, 4, . . . ) Kinder verloren hat. Aufgabe 12 Amortisierte Analyse – Fit-Arrays Stellen Sie sich vor, dass positive Integer-Zahlen als Summe von Fibonacci-Zahlen repräsentiert werden. Um eine Zahl x darzustellen, benutzen wir statt den herkömmlichen Bit-Arrays sogenannte Fit-Arrays, in denen das i-te Fit von rechts angibt, ob die i-te Fibonacci-Zahl als Summand in der Zahl vorkommt. Beispiel: 101110F steht für die Zahl F6 + F4 + F3 + F2 = 8 + 3 + 2 + 1 = 14. Sind damit alle positive Integer-Zahlen codierbar? Beschreiben und analysieren Sie Operationen, die den Wert einers Fit-Arrays in amortisiert konstanter Zeit in- bzw. dekrementieren. Aufgabe 13 Quantenmechanischer Zustand und Messung (a) Gegeben seien zwei Zustände: 1 |φi = √ |00i + 3 r 2 |11i, 3 |ψi = |11i. Wie lautet die Wahrscheinlichkeit |φi im Zustand |ψi zu finden? (b) Ein System befindet sich im Zustand |ψi = const × (5i|0i + 4|1i) . Berechnen Sie die Wahrscheinlichkeiten der Messwerte in der Standardbasis. Aufgabe 14 Bell-Zustand Zeigen Sie, dass es sich bei dem Zustand |ψi = √1 2 (|01i − |10i) um einen verschränkten Zustand handelt. 2 Aufgabe 15 Operatoren Der 1-Qubit NOT-Operator bewirkt folgende Transformation: |0i → |1i, |1i → |0i. Der 1-Qubit Hadamard-Operator bewirkt folgende Transformation: 1 |1i → √ (|0i − |1i). 2 1 |0i → √ (|0i + |1i), 2 Geben Sie die zugehörigen unitären Operatoren bezüglich der Basis {|0i, |1i} an. Sie weiters die Geben 1 1 1 1 konkrete Darstellung in der Standardbasis und in der Hadamardbasis |0i = √2 , |1i = √2 1 −1 an. Aufgabe 16 Bell-Ungleichung Alice und Bob messen die Spinkomponenten verschränkter Teilchen im Zustand 1 |ψi = √ (|0iA |1iB − |1iA |0iB ) . 2 Alice misst dabei die Spin-Komponenten a = σ3 und a0 = σ1 , Bob b = − √12 (σ3 + σ1 ) und b0 = √12 (σ3 − σ1 ). Zeigen Sie die Verletzung der Bell-CHSH Ungleichung (d.h. rechnen Sie das Beispiel aus der Vorlesung genau nach). Aufgabe 17 No-Cloning Beweisen Sie das No-Cloning Theorem, d.h. für kein ψ existiert ein unitäres Mapping U |ψ, 0i = |ψ, ψi. Hinweis: Verwenden Sie die Linearität des Operators U um die Behauptung zu beweisen. Aufgabe 18 Grover’s Search Algorithm Führen Sie Grover’s Algorithmus auf einem Suchraum der Größe N = 4 durch, um ein bestimmtes Element zu suchen (M = 1). Die Orakel-Funktion f sei gegeben durch f (0) = 0, f (1) = 1, f (2) = 0, f (3) = 0. 3