Sommersemester 2005 Abgabe am 17.6.2005 Prof. Dr. Stefan Posch, Dipl.-Inf. B. M¨oller
10. ¨Ubung ”Algorithmen der Bioinformatik I“
1. In der Vorlesung wurde zwei M¨oglichkeiten zur Konstruktion eines generalisierten Suffixbaums f¨ur eine Menge von StringsS1, S2, ..., Sm diskutiert. Im ersten Fall werden alle Strings, getrennt durch unterschiedliche Trennzeichen, aneinandergeh¨angt. F¨ur diesen langen String wird der Suffixbaum aufgebaut, der dann noch leicht nachbearbeitet werden muss. Alternativ kann man die Strings auch sequentiell mit dem Ukkonen-Algorithmus in einen Suffixbaum integrieren. Dazu wird zuerst f¨ur den StringS1, versehen mit einem Endezeichen, der Suffixbaum konstruiert. Zur Integration vonS2, versehen mit dem gleichen Endezeichen, wird nun wiederum der Ukkonen-Algorithmus benutzt. Der Algorithmus wird aber sofort mit Phasei+ 1gestartet, wobeiidie L¨ange des l¨angsten Pr¨afixes von S2 ist, der, von der Wurzel des Suffixbaums ausgehend, im Suffixbaum vonS1 enthalten ist. F¨ur die StringsS3, ..., Sm erfolgt die Integration analog. Zeigen Sie auf, dass das Vorgehen korrekt ist.
2. Diese Aufgabe besch¨aftigt sich mit dem Sequenzenalignment und Edit-Transkripten f¨ur zwei Strings S1undS2. Zeigen Sie, dass jedes Alignment vonS1 undS2 durch genau ein Edit-Transkript erzeugt werden kann.
3. Implementieren Sie einen Algorithmus zum Bestimmen der Edit-Distanz zweier StringsS1, S2 bei vorgegebenen Kosten von 1 f¨ur die Operationen Replace, Delete und Insert nach folgender naiver Methode:
• Anstelle von Inserts und Deletes in einem String werden in beiden Strings Deletes, aber keine Inserts zugelassen.
• F¨ur den StringSi (i= 1,2) wird die MengeMi der durch Deletes ableitbaren Strings generiert.
Genauer:
Mi ={S :S[j] =Si[kj]f¨ur1≤j ≤lmit1≤k1 < k2 <· · ·< kl ≤ |Si|}
• F¨ur jedes Paar (P1, P2) ∈ M1 ×M2 mit|P1| = |P2|werden die Kosten f¨ur die ¨Uberf¨uhrung vonP1inP2durch Replace bestimmt. Die Kosten ergeben sich dann daraus durch Addition der Kosten f¨ur die Deletes.
• Das (bzw. ein) Paar mit minimalen Kosten wird bestimmt und ausgegeben.
Testen Sie Ihre Implementation an Strings verschiedener L¨ange. Bis zu welchen Gr¨oßen der Strings sind die Laufzeiten im Sekundenbereich? Wie ist das asymptotische Laufzeitverhalten des Algorith- mus?