Praktikum Data-Mining und Sequenzanalyse: Graphen Florian Rasche, Kerstin Scheubert 24. Januar 2011 1 Datenstrukturen und Implementierung Implementiert zwei Datenstrukturen für einen gerichteten, gewichteten Graphen. Die eine Implementierung soll auf einer Adjazenzmatrix basieren, die andere auf Adjazenzlisten. Mindestens die folgenden Operationen sollen zur Verfügung stehen: -isEmpty() -getVertexCount() -getEdgeCount() -containsEdge(int i, int j) -addVertex(int i) -addEdge(int i, int j) -removeVertex(int i) -removeEdge(int i, int j) Die Implementierungen sollen über ein vernünftiges exception handling verfügen. Das beinhaltet eine eigene Exception-Klasse. 2 Algorithmen Implementiert 1. Minimum-Spanning-Tree (Prim’s algorithm) 2. den Aufbau eines DNA-Netzgraphen aus gegebenen DNA-Sequenzen, in dem dann eine 2-Approximation des Minimum-Steiner-Trees gefunden wird (mit Hilfe des MinimumSpanning-Tree-Algorithmus). Die Blätter des gesuchten Steiner-Trees sind die gegebenen DNA-Sequenzen. Die minimalen paarweisen Distanzen können über die Edit-Distanz berechnet werden. 3 Protokoll Minimum-Spanning-Tree: Erzeugt und beschreibt Testfälle, die die Funktionalität eurer Implementierung überprüfen und Vor- bzw. Nachteile aufzeigen. Konzentriert euch auf den Unterschied zwischen der Matrix- und der Listen-basierten Implementierung. Wann sollte man welche Datenstruktur bevorzugen? Welche Aussagen kann man über den Speicher-Verbrauch und Laufzeiten machen? Welche Laufzeit hat eure Implementierung des Prim’s Algorithmus? Kann man die Laufzeit noch verbessern? DNA-Netzgraphen und Minimum-Steiner-Tree: Baut einen DNA-Netzgraphen für selbstgewählte Sequenzen auf. Bis zu welcher Sequenzanzahl und -länge kann man den DNA-Netzgraphen noch aufbauen? Welche Aussagen kann man über den Speicherverbrauch und die Laufzeiten machen? Testet die 2-Approximation des Steiner-Tree-Algorithmus anhand der gewählten Sequenzen. 1