Vortrag zum Thema Brute - Force Algorithmus Vortragende

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen für das Erfüllbarkeitsproblem SAT
Advertisements

Informatik II: Algorithmen und Datenstrukturen SS 2013
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
DNA-Array oder DNA-Chip
Polynomial Root Isolation
Schnelle Matrizenoperationen von Christian Büttner
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Claudio Moraga; Gisbert Dittrich
Das LCA – Problem in Suffixbäumen
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Suche in Texten (Stringsuche )
Kapitel 6. Suchverfahren
5. Sortier-Algorithmen Vorbemerkungen:
Synonyme: Stapel, Keller, LIFO-Liste usw.
HEINZ NIXDORF INSTITUT Universität Paderborn Fachbereich Mathematik/Informatik Algorithmische Probleme in Funknetzwerken X Christian Schindelhauer
Sortierverfahren Richard Göbel.
Suche in Texten: Suffix-Bäume
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Bestimmung des Next-Arrays im KMP-Algorithmus
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten Suffix - Bäume.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0);
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Bubbelsort und Quicksort Vortrag von Rolf Heitzenröder
Hauptseminar Automaten und Formale Sprachen
Exact String Matching II1 Exact String Matching: A Deeper Look at Classical Methods Erweiterte Anwendungen zu Boyer-Moore und Knuth-Morris-Pratt Hauptseminar.
Mustersuche in Zeichenfolgen
Effiziente Algorithmen
Ansprechpartner: Excel für SEOs =Wenn(A1=zuhören;gute Ideen;Feierabend) Samstag
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Chris Schwiegelshohn Katja Losemann. Geg.: Suchtext y und Muster x p Position im Suchtext und q Position im Muster Init: p=0 und q=0 loop { while y(p.
Christian Mansky Design - Fallstudien Christian Mansky
Suchen In Texten Von Adriano Feola & Marc Draschl.
PHP: Operatoren und Kontrollstrukturen
Analyse der Laufzeit von Algorithmen
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
7. Formale Sprachen und Grammatiken
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Grundlagen der Algorithmen und Datenstrukturen Kapitel
Informatik Beschreibung von Abläufen durch Algorithmen 3.3 Wiederholugnsanweisungen 3. Beschreibung von Abläufen durch Algorithmen 3.3 Wiederholungsanweisungen.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
 Präsentation transkript:

Vortrag zum Thema Brute - Force Algorithmus Vortragende Krasimira Topalova TUM

Hintergruende Zeichenfolgen (strings) haben eine zentrale Bedeutung fuer Textverarbeitungssysteme Strings koennen sehr umfangreich sein (z.B. Buch mit 1000000 Zeichen) Folgt: Das Einsetzen von effizienten Algorithmen fuer die Bearbeitung ist sehr wichtig

Grundlegende Operation mit Zeichenfolgen ist das Pattern-Matching(Gegeben: eine Text-Zeichenfolge der Laenge M und ein Muster der Laenge N; Suche/Finde: ein Auftreten des Musters innerhalb des Textes) Erweitert man die Suche um alle Auftreten des Musters, dann erhaelt man die Definition vom Brute-Force Algorithmus

Brute-Force Algorithmus - Grundlegende Idee Der Algorithmus ueberprueft ein Muster an allen Positionen i des Textes Die moeglichen Positionen reichen von i=0 bis i=n-m Das Muster wird an der jeweiligen Position zeichenweise von links nach rechts mit dem Text verglichen Beim Mismatch oder bei vollstaendiger Ubereinstimmung wird das Muster um eine Position weitergeschoben und an dieser Position verglichen usw.

Ein Beispiel zur Verdeutlichung: Text=gcatcgcagagagtatacag; Muster=gcagagag 1) gcatcgcagagagtataca 7) gcatcgcagagagtataca gcag g 2) gcatcgcagagagtataca 8) gcatcgcagagagtataca g g 3) gcatcgcagagagtataca 9) gcatcgcagagagtataca g gc 4) gcatcgcagagagtataca 10) gcatcgcagagagtataca g g 5) gcatcgcagagagtataca 11) gcatcgcagagagtataca g gc 6) gcatcgcagagagtataca 12) gcatcgcagagagtataca gcagagag g

Der Naive Algorithmus void naiveSearch(char *text, char *muster) { int i=0, j; int n=strlen(text); int m=strlen(muster); while(i<=n-m) j=0; while(j<m && muster[j]==text[i+j]) j++; if(j==m) printf(„ Muster passt!“); i++; }

Meine Implementation der Naive Algorithmus void myalgorithm(char *s1, char *s2) { int l1, l2, counter=0, i=0; l1=strlen(s1); l2=strlen(s2); if(l2==0) { printf(“s2 hat Laenge=0\n”); exit(0); } while(l1>=l2) if( (memcmp(s1,s2,l2))==0) printf(“s2 passt in s1 an Position %d\n”, i); s1++; l1--; i++;

Testergebnise Nach 10 Tests mit time sind folgende Ergebnisse(in ms) herausgekommen: naiveSearch myalgorithm 2 4 3 2 2 3 3 3 4 3 3 4 Zusammenfassung: 4x war naiveSearch schneller, 3x war myalgorithm schneller und 3x waren beide gleich

V=(n-m+1)m >=(n-n/2+1)m>=n/2m => V E (nm) Analyse ( 1 ) 1) Verhalten im schlechtesten Fall: die i-Schleife wird (n-m+1)x und die j-Schleife wird hoechstens mx durchlaufen => Anzahl Vergleiche(V): V<=(n-m+1)m => V E O(nm) Schlechtenster Fall: j-Schleife wird jedesmal genau mx durchlaufen Beispiel: Text t=aa...aaa und Muster p=aa..aab In diesem Fall gilt: V=(n-m+1)m Wenn p kurz im Vergleich zum t (z.B. m<=n/2) => V=(n-m+1)m >=(n-n/2+1)m>=n/2m => V E (nm)

Analyse ( 2 ) 1) Verhalten im guenstigsten Fall: im diesen Fall liefert immer bereits der erste Vergleich einen Mismatch, somit sind nur (n) Vergleiche erforderlich.

v=1+H0+H0xH1+H0xH1xH2+...+H0xH1x...xHm-2 Analyse ( 3 ) 1) Verhalten im durchschnittlichen Fall: An dieser Stelle fuehren wir folgende Symbole ein: W = Warscheinlichkeit; Hj = die W, mit der das j-Zeichen des Musters im Text auftritt; v = durchschnittliche # der Zeichenvergleiche pro Position i des Textes; Vorgehen: das erste Zeichen von p wird immer verglichen =>1 Vergleich. In H0 Faelle stimmt das erste Zeichen ueberein, so dass auch noch das zweite Zeichen von p verglichen werden muss. In H1 Faellen von diesen stimmt auch das zweite Zeichen ueberein. Also: H0xH1 Faellen, so dass auch noch das dritte Zeichen von p verglichen werden muss usw. Als Formel fuer die Anzahl Vergleiche v pro Textposition ergibt sich: v=1+H0+H0xH1+H0xH1xH2+...+H0xH1x...xHm-2

Analyse ( 3) cont'd Sei H=max(Hj) und H<1. Dann gilt: v=1+H+H^2+H^3+...+H^(m-1) Die geometrische Reihe konvergiert gegen 1/(1-H). Also: v<=1/(1-H) Die Anzahl der Vergleiche insgesammt betraegt somit: V=(n-m+1)/(1-H) E O(n) Der naive Algorithmus hat also im Durchschnitt lineare Laufzeit!

Rubrik- Interessantes/Schau dich schlau Die strstr Fkt von der C-Bibliothek funktioniet 'aehnlich' wie der Brute-Force Algorithmus. Unterschied: strstr findet nur das erste Auftreten vom Muster im Text und hoert dann auf. Der Naive Algorithmus ist erst dann fertig, wenn er alle Vorkommnisse des Musters im Text gefunden hat. Schauen wir uns strstr genauer an!

Rubrik- Interessantes ( cont'd) char *strstr(const char *s1, const char *s2) { int l1, l2; l2=strlen(s2); if(! l2) return (char *) s1; l1=strlen(s1); while(l1>=l2) { l1--; if(! memcmp(s1,s2,l2)) return (char *) s1; s1++; } return 0;

Rubrik- Interessantes ( cont'd) Um strstr verstehen zu koennen, muessen wir uns erstmal mit memcmp auseinandersetzen: void *memcmp (const void *cs, const void *ct, size_t counter) { unsigned char *su1, *su2; int res=0; for (su1=cs, su2=ct; 0<count; ++su1, ++su2, count--) if ( (res=*su1-*su2) !=0 ) break(); } return res;

Rubrik- Interessantes ( cont'd) Frage: Was macht memcmp(*sc, *st, counter) genau? Antwort: memcmp vergleicht die ersten counter Bytes from sc und st und liefert zurueck: 1) int Wert < 0, falls sc<st; 2) int Wert > 0, falls sc>st; 3) 0, falls *sc==*st

Rubrik- Interessantes ( cont'd) STRSTR -Wissenswertes STRSTR ist so implementiert, dass es jedesmal wenn moeglich Register benutzt werden, anstatt vom stack: Das bedeutet das die Speicher Zugriffe auf Minimum gehalten werden. Auswirkung: strstr ist sehr schnell! Ein Blick in den Assemblercode lohnt sich, denn wie in einem Artikel zu lesen war: “Even though the register keyword can be added in plain C/C++ code to instruct the compiler to try to use registers as much as possible, it obviously didn't or couldn't achieve wath the human-written implementation of strstr achieved.”

Rubrik-Interessantes ( cont'd) strstr: pushl %ebp movl %esp, %ebp subl $24, %esp subl $12, %esp pushl 12(%ebp) call strlen addl $16, %esp movl %eax, -8(%ebp) cmpl $0, -8(%ebp) jne .L2 movl 8(%ebp), %eax movl %eax, -12(%ebp) jmp .L1 .L2 subl $l2, %esp pushl 8(%ebp) call strlen addl $16, %esp movl %eax, -4(%ebp) .L3 movl -4(%ebp), %eax

cmpl -8(%ebp), %eax jge .L5 jmp .L4 .L5: leal -4(%ebp), %eax decl (%eax) subl $4, %esp pushl -8(%ebp) pushl 12(%ebp) pushl 8(%ebp) call memcmp addl $16, %esp testl %eax, %eax jne .L6 movl 8(%ebp), %eax movl %eax, -12(%ebp) jmp .L1 .L6: incl 8(%ebp) jmp .L3 .L4: movl $0, -12(%ebp) .L1: movl -12(%ebp), %eax leave ret

Haben Sie Fragen?

Danke fuer Ihre Aufmerksamkeit!