algorithm engineering teilmengen-suche stefan edelkamp

49
Algorithm Engineering „Teilmengen-Suche“ Stefan Edelkamp

Upload: theresia-hemmerle

Post on 05-Apr-2015

122 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Algorithm Engineering

„Teilmengen-Suche“

Stefan Edelkamp

Page 2: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Motivation

Speicherplatzsparende WörterbücherProgramm/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

Page 3: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Übersicht

Speicherplatzsparende WörterbücherBit-State HashingHash-Compaction

Subzeichenketten-Erkennung: Dynamische Programmierung

Teilwort-Erkennung: Listen und ArrayHashing und TriesUnlimited Branching Trees

Page 4: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Übersicht

Speicherplatzsparende WörterbücherBit-State HashingKollaps-Kompression

Subzeichenketten-Erkennung: Dynamische Programmierung

Teilwort-Erkennung: Listen und ArrayHashing und TriesUnlimited Branching Trees

Page 5: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Model Checking

GegebenEine Modell eines

Systems.Die Spezifikation einer

Eigenschaft Problem Erfüllt das System

die Eigenschaft?

• search

• specification

• state rep.

• modeling• language

•tra

nsitio

n

•sy

stem

• Abstraction

Page 6: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Objectcode

Beispiel: Prüfen eines C++ Programms

igccCompiler

Model checker

Virtual Machine

char globalChar;

int globalBlocksize = 7;

int main(){allocateBlock(blocksize);

}

void allocateBlock(int size){

void *memBlock;

memBlock = (void *) malloc(size);}

Page 7: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 8: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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. 1Register

BSS Section

Data Section

Stack

Zust. 2

Page 9: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

„Kollaps“-Kompression für große Zustände

Page 10: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Fehlerhafte Wörterbücher sparen Platz

Page 11: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 12: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Senken der Fehlerrate

h unabhängige Hashfunktionen, hn <=n

Mit zwei Bits (Double Bit-State Hashing)

Page 13: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Übersicht

Speicherplatzsparende WörterbücherBit-State HashingKollaps-Kompression

Subzeichenketten-Erkennung: Dynamische Programmierung

Teilwort-Erkennung: Listen und ArrayHashing und TriesUnlimited Branching Trees

Page 14: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Editierdistanz-ProblemBerechne 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

Page 15: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Sequenzalignierung

Page 16: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Größere Protein/DNA Sequenzen

Page 17: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Rekursionsgleichung

Page 18: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Programm

Page 19: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Beispiel: ABCD,BCD, DB

Page 20: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

• A

• =

• b

• a

• a

• c

Page 21: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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.

Page 22: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Approximative Zeichenkettensuche

Gegeben: zwei Zeichenketten P = p1p2 ... pm ( Muster) und

T = t1t2 ... tn (Text)

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

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

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

• T

• P

• j

Page 23: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Erster Ansatz

Naives Verfahren:

for all 1 j´ j n do

Berechne D(P,Tj´, j)

wähle Minimum

Page 24: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Trick

Betrachte verwandtes Problem:

• T• j

• i• E(i, j)

• PFür jede Textstelle j und jede Musterstelle i berechne die Editierdistanz des zu Pi ähnlichsten, bei j endenden Teilstücks Tj´,j von T.

Page 25: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

AlgorithmusMethode: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´1, jjijjji

TPDE

Page 26: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Rekursionsgleichung:

Bemerkung:

j´ 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

,

ji

ji

jiji

ji

E

E

tpcE

E

Page 27: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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 tj´ .

Page 28: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 29: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 30: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Übersicht

Speicherplatzsparende WörterbücherBit-State HashingKollaps-Kompression

Subzeichenketten-Erkennung: Dynamische Programmierung

Teilwort-Erkennung: Listen und ArrayHashing und TriesUnlimited Branching Trees

Page 31: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 32: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Subzeichenketten- vs. Teilzeichenkettenmatching

Subzeichenkette: ADEK in Alphabet ABCD….XYZ Teilzeichenkette: STUV in Alphabet ABCD….XYZ

Page 33: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Anwendung Teilzeichenkettenmatching

Page 34: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Beispiel Subzeichenkettenmatching: Sokoban

Page 35: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Generierung größerer Muster

Page 36: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 37: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Kreuzworträtsel -Konstruktionsproblem

Page 38: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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)

Page 39: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

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

Page 40: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

2. Tries(PARTIALMATCH)

Page 41: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

3. Hashing (PARTIAL MATCH)

Page 42: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

4. „Unlimited“ Branching Trees (CONTAINMENT QUERY)

Page 43: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Einfügen UBT

Page 44: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Suche UBT

Page 45: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Beispiel: Hex

Page 46: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Virtuelle Verbindungen

Page 47: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Zielmusterdatenbank

Page 48: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

UBT-Adaption

Page 49: Algorithm Engineering Teilmengen-Suche Stefan Edelkamp

Symmetrien