algorithm engineering „teilmengen-suche“ fileÜbersicht speicherplatzsparende wörterbücher...

49
Algorithm Engineering „Teilmengen-Suche“ Stefan Edelkamp

Upload: hakhuong

Post on 29-Aug-2019

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Algorithm Engineering

„Teilmengen-Suche“

Stefan Edelkamp

Page 2: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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

Page 3: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Ü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

Page 4: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Ü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

Page 5: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Model Checking Gegeben

Eine Modell einesSystems.

Die Spezifikation einerEigenschaft

Problem Erfüllt das System die Eigenschaft?

•search

•specification

•state rep.

•modeling•language

•Abstraction

Page 6: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Interpretieren des Objectcodes

char globalChar;

int globalBlocksize = 7;

int main(){allocateBlock(blocksize);

}

void allocateBlock(int size){

void *memBlock;

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

Register

BSS SectionData Section

Text Section

StackMemory Pool

Virtuelle Maschine

Objectcode

Page 8: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Generierung von Zuständen

Register

BSS SectionData Section

Text Section

StackMemory 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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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

Page 10: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Fehlerhafte Wörterbücher sparen Platz

Page 11: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Senken der Fehlerrate

h unabhängige Hashfunktionen, hn <=n

Mit zwei Bits (Double Bit-State Hashing)

Page 13: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Ü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

Page 14: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Sequenzalignierung

Page 16: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Größere Protein/DNA Sequenzen

Page 17: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Rekursionsgleichung

Page 18: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Programm

Page 19: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Beispiel: ABCD,BCD, DB

Page 20: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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

Page 21: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Approximative ZeichenkettensucheGegeben: 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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Erster Ansatz

Naives Verfahren:

for all 1 ≤ j´ ≤ j ≤ n doBerechne D(P,Tj´, j)

wähle Minimum

Page 24: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

TrickBetrachte verwandtes Problem:

T•j

iE(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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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

EE

tpcEE

Page 27: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Approximative ZeichenkettensucheAnfangsbedingungen:

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

aberE0,j = E(ε ,Tj) = 0

Beobachtung:Die optimale Editiersequenz von P nach Tj´, j beginnt nicht miteiner Einfügung von tj´ .

Page 28: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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 cP=

a

d

b

b

c

Page 29: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Ü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

Page 31: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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 abstrakteDatenstruktur die Einfügen erlaubt und Teilmengen-(Supermengen-) Anfragen anbietet

Page 32: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Subzeichenketten- vs. Teilzeichenkettenmatching

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

Page 33: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Anwendung Teilzeichenkettenmatching

Page 34: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Beispiel Subzeichenkettenmatching: Sokoban

Page 35: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Generierung größerer Muster

Page 36: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Anfragen mit Wildcards

Sei ? ein spezieller don’t care das jeden Buchstaben imAlphabet ersetzt (wildcard)

Gegeben eine Menge D von n Zeichenketten, dannbeantwortet eine Datenstruktur für das PARTIAL MATCH Problem für eine Anfrage q (mit wildcards) ob es einenEintrag q in D gibt, so dass q zu p passt

Page 37: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Kreuzworträtsel -Konstruktionsproblem

Page 38: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

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“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

2. Tries(PARTIALMATCH)

Page 41: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

3. Hashing (PARTIAL MATCH)

Page 42: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

4. „Unlimited“ Branching Trees(CONTAINMENT QUERY)

Page 43: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Einfügen UBT

Page 44: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Suche UBT

Page 45: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Beispiel: Hex

Page 46: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Virtuelle Verbindungen

Page 47: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Zielmusterdatenbank

Page 48: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

UBT-Adaption

Page 49: Algorithm Engineering „Teilmengen-Suche“ fileÜbersicht Speicherplatzsparende Wörterbücher Bit-State Hashing Hash-Compaction Subzeichenketten-Erkennung: Dynamische Programmierung

Symmetrien