• Keine Ergebnisse gefunden

Algorithm Engineering „Teilmengen-Suche“

N/A
N/A
Protected

Academic year: 2021

Aktie "Algorithm Engineering „Teilmengen-Suche“"

Copied!
49
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithm Engineering

„Teilmengen-Suche“

Stefan Edelkamp

(2)

Motivation

 Speicherplatzsparende Wörterbücher

Programm/Modellprüfung (Model Checking)

 Subzeichenketten-Erkennung:

Editierdistanz-Problem, Approximative Zeichenkettensuche

MSA (Multiple Sequence Alignment) Problem

 Teilwort-Erkennung:

Kreuzwort-Problem: Eine Anfrage wie B*T**R im

Kreuzworträtselproble mit BETTER, BITTER, BUTLER, oder BUTTER beantworten

Spieleprogrammierung

(3)

Übersicht

 Speicherplatzsparende Wörterbücher

Bit-State Hashing

Hash-Compaction

 Subzeichenketten-Erkennung:

Dynamische Programmierung

 Teilwort-Erkennung:

Listen und Array

Hashing und Tries

Unlimited Branching Trees

(4)

Übersicht

 Speicherplatzsparende Wörterbücher

Bit-State Hashing

Kollaps-Kompression

 Subzeichenketten-Erkennung:

Dynamische Programmierung

 Teilwort-Erkennung:

Listen und Array

Hashing und Tries

Unlimited Branching Trees

(5)

Model Checking

Gegeben

 Eine Modell eines Systems.

 Die Spezifikation einer Eigenschaft

Problem Erfüllt das System die Eigenschaft?

•search

•specification

•state rep.

•modeling

•language

•Abstraction

(6)

Objectcode

Beispiel: Prüfen eines C++

Programms

igcc Compiler

Model checker Virtual Machine

char globalChar;

int globalBlocksize = 7;

int main(){

allocateBlock(blocksize);

}

void allocateBlock(int size){

void *memBlock;

memBlock = (void *) malloc(size);

}

(7)

Interpretieren des Objectcodes

char globalChar;

int globalBlocksize = 7;

int main(){

allocateBlock(blocksize);

}

void allocateBlock(int size){

void *memBlock;

memBlock = (void *) malloc(size);

}

Register BSS Section Data Section Text Section

Stack

Memory Pool Virtuelle Maschine

Objectcode

(8)

Generierung von Zuständen

Register BSS Section Data Section Text Section

Stack

Memory Pool Virtuelle Maschine

Register

BSS Section Data Section Text Section

Stack Memory Pool

Startzust.

Register

BSS Section

Stack Memory Pool

Zust. 1

Register

BSS Section Data Section

Stack

Zust. 2

(9)

„Kollaps“-Kompression für große

Zustände

(10)

Fehlerhafte Wörterbücher sparen

Platz

(11)

Fehlerwahrscheinlichkeit in

Bit-State Hashing (Bloom Filter)

 n: Anzahl der Elemente

 m: Anzahl der Bits (Tabellengröße)

 i tes Element kollidiert mit 1…i-1 mit W‘keit von

 Wahrscheinlichkeit für einen fehlerhafte Suche

(12)

Senken der Fehlerrate

 h unabhängige Hashfunktionen, hn <=n

 Mit zwei Bits (Double Bit-State Hashing)

(13)

Übersicht

 Speicherplatzsparende Wörterbücher

Bit-State Hashing

Kollaps-Kompression

 Subzeichenketten-Erkennung:

Dynamische Programmierung

 Teilwort-Erkennung:

Listen und Array

Hashing und Tries

Unlimited Branching Trees

(14)

Editierdistanz-Problem

Berechne für zwei gegebene Zeichenfolgen A und B möglichst effizient die Editier-Distanz D(A,B) und eine

minimale Folge von Editieroperationen, die A in B überführt.

i n f - - - o r m a t i k -

i n t e r p o l - a t i o n

(15)

Sequenzalignierung

(16)

Größere Protein/DNA Sequenzen

(17)

Rekursionsgleichung

(18)

Programm

(19)

Beispiel: ABCD,BCD, DB

(20)

Spurgraph der

Editier-

operationen

0 1 2

3

4

1 2 3 4

1 1 2 3

1 2 2 3

2 2 2 3

3 3 3 2

B = a b a c

=

b

a

a

c

(21)

Subgraph der Editieroperationen

Spurgraph: Übersicht über alle möglichen Spuren zur

Transformation von A in B, gerichtete Kanten von Knoten (i, j) zu (i + 1, j), (i, j + 1) und (i + 1, j + 1).

Gewichtung der Kanten entsprechen den Editierkosten.

Kosten nehmen entlang eines optimalen Weges monoton zu.

Jeder Weg mit monoton wachsenden Kosten von der linken oberen Ecke zu rechten unteren Ecke entspricht einer optimalen Spur.

(22)

Approximative Zeichenkettensuche

Gegeben: zwei Zeichenketten P = p1p2 ... pm ( Muster) und T = t1t2 ... tn (Text)

Gesucht: Ein Intervall [j´, j], 1 ≤ jn, so dass das Teilwort

Tj´ , j = t ... tj das dem Muster P ähnlichste Teilwort

von T ist, d.h. für alle anderen Intervalle [k´ , k], 1 ≤ kn, gilt: D(P,Tj´, j) ≤ D(P, Tk´, k)

T

P

j

(23)

Erster Ansatz

Naives Verfahren:

for all 1 ≤ jn do Berechne D(P,Tj´, j) wähle Minimum

(24)

Trick

Betrachte verwandtes Problem:

T

•j

i

E(i, j)

P Für jede Textstelle j und jede Musterstelle i berechne die Editierdistanz des zu P

i

ähnlichsten, bei j endenden Teilstücks T

j´,j

von T.

(25)

Algorithmus

Methode:

for all 1 ≤ j ≤ n do

Berechne j´, so dass D(P,Tj´, j) minimal ist Für 1 ≤ i ≤ m und 0 ≤ j ≤ n sei:

Optimale Spur:

Pi = b a a c a a b c

Tj´, j = b a c b c a c

) ,

(

min ,

1

´

,j 1 j j i j j

i D P T

E

+

=

(26)

Rekursionsgleichung:

Bemerkung:

kann für Ei-1, j-1, Ei – 1,j und Ei, j – 1 ganz verschieden sein.

Teilspur einer optimalen Spur ist eine optimale Teilspur.









+ + +

=

1 , 1

), , ( min

1 ,

, 1 1 , 1

,

j i

j i

j i j

i

j i

E E

t p c E

E

(27)

Approximative Zeichenkettensuche

Anfangsbedingungen:

E0,0 = E(ε, ε) = 0 Ei,0 = E(Pj ,ε) = i aber

E0,j = E(ε ,Tj) = 0 Beobachtung:

Die optimale Editiersequenz von P nach Tj´, j beginnt nicht mit einer Einfügung von t .

(28)

Abhängigkeitsgraph

0 1 2 3 4

0 0 0 0

0 1 1 1

1 1 2 1

2 1 1 2

3 2 1 2

0 0 1 2 3

0 0 0 0

1 1 1 1

0 1 2 2

1 1 1 2

2 2 1 2

5 4 3 2 2 3 3 2 2 1

T = a b b d a d c b c

= P

a d b b

c

(29)

Approximative Zeichenkettensuche

Satz

Gibt es im Abhängigkeitsgraphen einen Weg von E0, j´- 1 nach Ei, j , so ist Tj´, j ein zu Pi ähnlichstes, bei j endendes

Teilstück von T mit

D(Pi, Tj´,j) = Ei, j

(30)

Übersicht

 Speicherplatzsparende Wörterbücher

Bit-State Hashing

Kollaps-Kompression

 Subzeichenketten-Erkennung:

Dynamische Programmierung

 Teilwort-Erkennung:

Listen und Array

Hashing und Tries

Unlimited Branching Trees

(31)

Teilmengen-Wörterbücher

 Sei D eine Menge von n Teilmengen aus U.

 Das SUBSET QUERY (CONTAINMENT QUERY) Problem fragt für q ob es ein p in D gibt mit q ist Teilmenge von p (p ist Teilmenge von q).

 Ein Teilmengen Wörterbuch ist eine abstrakte

Datenstruktur die Einfügen erlaubt und Teilmengen- (Supermengen-) Anfragen anbietet

(32)

Subzeichenketten- vs.

Teilzeichenkettenmatching

 Subzeichenkette: ADEK in Alphabet ABCD….XYZ

 Teilzeichenkette: STUV in Alphabet ABCD….XYZ

(33)

Anwendung

Teilzeichenkettenmatching

(34)

Beispiel Subzeichenkettenmatching:

Sokoban

(35)

Generierung größerer Muster

(36)

Anfragen mit Wildcards

 Sei ? ein spezieller don’t care das jeden Buchstaben im Alphabet ersetzt (wildcard)

 Gegeben eine Menge D von n Zeichenketten, dann

beantwortet eine Datenstruktur für das PARTIAL MATCH Problem für eine Anfrage q (mit wildcards) ob es einen Eintrag q in D gibt, so dass q zu p passt

(37)

Kreuzworträtsel -

Konstruktionsproblem

(38)

State-of-the-Art !?

Combus „Crossword Puzzles as a Constraint Problem“

 CP 2008: Anbulagan and Adi Botea

 (words 45K, UK 220K Einträge, T sek. N expan. Knoten)

(39)

Datenstruktur? 1. Array und Listen

Arrays:

 Platz O(2^m), m =|U|  Zu groß in der Praxis

 Anfragezeit O(m) Listen:

 Optimaler Platz O(n)

 Anfragezeit: O(nm)  Zu groß in der Praxis

(40)

2. Tries

(PARTIAL

MATCH)

(41)

3. Hashing (PARTIAL MATCH)

(42)

4. „Unlimited“ Branching Trees

(CONTAINMENT QUERY)

(43)

Einfügen UBT

(44)

Suche UBT

(45)

Beispiel: Hex

(46)

Virtuelle Verbindungen

(47)

Zielmusterdatenbank

(48)

UBT-Adaption

(49)

Symmetrien

Referenzen

ÄHNLICHE DOKUMENTE