SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Boyer-Moore-Algorithmus Ein Textsuchalgorithmus für  große Alphabete Martin Szugat (Martin.Szugat@GMX.net)
Agenda ,[object Object],[object Object],[object Object],[object Object]
Problemstellung ,[object Object],[object Object],[object Object]
Zur Erinnerung!!! ,[object Object],[object Object],[object Object],[object Object]
Lösung I: Naive Suche ,[object Object],[object Object],[object Object],[object Object],[object Object]
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 0
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 1
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 2
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 5
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 5
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 9
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 12
Naive Suche - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 20
Naive Suche - Laufzeit ,[object Object],[object Object],[object Object],[object Object],[object Object]
Lösung II: Knuth-Morris-Pratt ,[object Object],[object Object],[object Object],[object Object],[object Object]
Länge der Ränder aller Präfixe ,[object Object],[object Object],Leeres Wort
Länge der Ränder aller Präfixe ,[object Object],[object Object],Per Definition Leeres Wort
Länge der eigentlichen Ränder aller Präfixe ,[object Object],[object Object]
Länge der Ränder aller Präfixe ,[object Object],[object Object]
Länge der Ränder aller Präfixe ,[object Object],[object Object]
Länge der Ränder aller Präfixe ,[object Object],[object Object]
Knuth-Morris-Pratt - Beispiel ,[object Object],[object Object]
Knuth-Morris-Pratt - Beispiel ,[object Object],[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 5
Knuth-Morris-Pratt - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 5
Knuth-Morris-Pratt - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 6
Knuth-Morris-Pratt - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 8
Knuth-Morris-Pratt - Laufzeit ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Knuth-Morris-Pratt - Worst-Case ,[object Object],[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 3
Knuth-Morris-Pratt - Worst-Case ,[object Object],[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 5
Knuth-Morris-Pratt - Worst-Case ,[object Object],[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 6
Knuth-Morris-Pratt - Worst-Case ,[object Object],[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 9
Knuth-Morris-Pratt - Worst-Case ,[object Object],[object Object],Anzahl der Vergleiche: 14
Bad Character ,[object Object],[object Object],[object Object],[object Object],[object Object]
Bad Character – Beispiel I ,[object Object],[object Object],Anzahl der Vergleiche: 3
Bad Character - Beispiel I ,[object Object],[object Object],Anzahl der Vergleiche: 6
Bad Character - Beispiel I ,[object Object],[object Object],Anzahl der Vergleiche: 9
Muster von rechts nach links vergleichen ,[object Object],[object Object],[object Object]
Bad Character - Beispiel II ,[object Object],[object Object],Anzahl der Vergleiche: 1
Bad Character - Beispiel II ,[object Object],[object Object],Anzahl der Vergleiche: 2
Bad Character - Beispiel II ,[object Object],[object Object],Anzahl der Vergleiche: 5
Bad Character-Regel ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Bad Character-Regel - Laufzeit ,[object Object],[object Object],[object Object],[object Object]
Sprungtabelle ,[object Object],[object Object],[object Object],[object Object],[object Object]
Good Suffix - Beispiel ,[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 0
Good Suffix - Beispiel ,[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 2
Good Suffix - Beispiel ,[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 7 Shift um 2
Good Suffix - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 7 Weak Good Suffix!
Good Suffix - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 15 Mismatch an derselben Stelle im Text mit dem gleichen Zeichen im Muster! Shift um 3
Strong Good Suffix-Regel ,[object Object],[object Object],[object Object]
Strong Good Suffix - Beispiel ,[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 2
Strong Good Suffix - Beispiel ,[object Object],[object Object],[object Object],[object Object],Anzahl der Vergleiche: 7 Shift um 2
Strong Good Suffix - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 7 Weak Good Suffix
Strong Good Suffix - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 7 Strong Good Suffix!
Strong Good Suffix - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 18 Shift um 6 Bereits überprüfter Bereich wird erneut verglichen.
Kein Strong Good Suffix?! ,[object Object],[object Object],Anzahl der Vergleiche: 7 Weak Good Suffix
Regel für die Ränder ,[object Object],[object Object],[object Object]
Randregel  - Beispiel ,[object Object],[object Object],Anzahl der Vergleiche: 7 In einer 2. Sprungtabelle werden die eigentlichen Ränder des Musters berücksichtigt.
Randregel - Beispiel ,[object Object],[object Object],[object Object],Anzahl der Vergleiche: 9 Vorheriger Mismatch
Boyer-Moore: Top-Down ,[object Object],[object Object],[object Object],[object Object]
Algorithmus für die  Bad Character-Regel ,[object Object],[object Object],[object Object],[object Object]
Algorithmus für die Sprungtabelle ,[object Object],[object Object],[object Object]
Berechnung der Zwischentabelle ,[object Object],[object Object],[object Object],N(i):= max{j: j  ≥ 0  Λ  P[(i – j + 1)..i] ist Suffix von P}
Berechnung der Zwischentabelle ,[object Object],[object Object],[object Object],N( 6 ):= max{j: j  ≥ 0  Λ  P[( 6  – j + 1).. 6 ]  ist Suffix von P} =  2
Algorithmus für die Berechnung der Zwischentabelle (1) ,[object Object],d c b a b a c  b a i,e b a a N(i) = i – a Muster  P
Algorithmus für die Berechnung der Zwischentabelle (2) ,[object Object],[object Object],[object Object],d c b a b a c b a b a i c  b a  b a N(i) = N(|P| + i – e - 1) N(3) = N(8) = 2 e a c  b a b a
Algorithmus für die Berechnung der Zwischentabelle (3) ,[object Object],a  b a  b a c b  a b a i b a  b a N(i) >= N(|P| + i – e - 1) N(2) = N(7) + 1 = 2 + 1 = 3 e a b a  b a
Berechnung der Sprungtabelle 1. ,[object Object],[object Object],Text Muster  P Muster  P Fehler bei  i + j i s |P| - j - 1 s
Berechnung der Sprungtabelle 2. ,[object Object],[object Object],Text Muster  P Muster  P Fehler bei  i + j i s |P| - s
Laufzeiten bei Boyer-Moore I ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Laufzeiten bei Boyer-Moore II ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fazit: Vorteile von Boyer-Moore ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vergleich zu Knuth-Morris-Pratt Um so größer das verwendete Alphabet ist und um so weniger Wiederholungen das Muster und der Text enthält, um so stärker nähert sich die tatsächliche Laufzeit der Laufzeit im Best-Case an. 3 (n + m) 2 (n + m) Worst-Case n / m 2 (n + m) Best-Case Boyer-Moore Knuth-Morris-Pratt Algo Case
Noch Fragen??? ,[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
 
Assembly language 8086 intermediate
Assembly language 8086 intermediateAssembly language 8086 intermediate
Assembly language 8086 intermediate
John Cutajar
 

Was ist angesagt? (14)

Python- Regular expression
Python- Regular expressionPython- Regular expression
Python- Regular expression
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
String matching, naive,
String matching, naive,String matching, naive,
String matching, naive,
 
Scale-out ccNUMA - Eurosys'18
Scale-out ccNUMA - Eurosys'18Scale-out ccNUMA - Eurosys'18
Scale-out ccNUMA - Eurosys'18
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Simple Matrix Factorization for Recommendation in Mahout
Simple Matrix Factorization for Recommendation in MahoutSimple Matrix Factorization for Recommendation in Mahout
Simple Matrix Factorization for Recommendation in Mahout
 
Rabin karp string matching algorithm
Rabin karp string matching algorithmRabin karp string matching algorithm
Rabin karp string matching algorithm
 
Apache Helix presentation at SOCC 2012
Apache Helix presentation at SOCC 2012Apache Helix presentation at SOCC 2012
Apache Helix presentation at SOCC 2012
 
Zeus: Locality-aware Distributed Transactions [Eurosys '21 presentation]
Zeus: Locality-aware Distributed Transactions [Eurosys '21 presentation]Zeus: Locality-aware Distributed Transactions [Eurosys '21 presentation]
Zeus: Locality-aware Distributed Transactions [Eurosys '21 presentation]
 
Loops in Python
Loops in PythonLoops in Python
Loops in Python
 
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019Breaking Dependencies Legacy Code -  Cork Software Crafters - September 2019
Breaking Dependencies Legacy Code - Cork Software Crafters - September 2019
 
Assembly language 8086 intermediate
Assembly language 8086 intermediateAssembly language 8086 intermediate
Assembly language 8086 intermediate
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86opti
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)
 

Andere mochten auch (8)

Boyer more algorithm
Boyer more algorithmBoyer more algorithm
Boyer more algorithm
 
KMP Pattern Matching algorithm
KMP Pattern Matching algorithmKMP Pattern Matching algorithm
KMP Pattern Matching algorithm
 
Boyer–Moore string search algorithm
Boyer–Moore string search algorithmBoyer–Moore string search algorithm
Boyer–Moore string search algorithm
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Rabin Karp - String Matching Algorithm
Rabin Karp - String Matching AlgorithmRabin Karp - String Matching Algorithm
Rabin Karp - String Matching Algorithm
 
25 String Matching
25 String Matching25 String Matching
25 String Matching
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Fast Fourier Transform
Fast Fourier TransformFast Fourier Transform
Fast Fourier Transform
 

Mehr von Martin Szugat

Facebook ist tot. Eine Obduktion in sieben Akten.
Facebook ist tot.  Eine Obduktion in sieben Akten.Facebook ist tot.  Eine Obduktion in sieben Akten.
Facebook ist tot. Eine Obduktion in sieben Akten.
Martin Szugat
 
Referenten martin szugat_snip_clip 2013
Referenten martin szugat_snip_clip 2013Referenten martin szugat_snip_clip 2013
Referenten martin szugat_snip_clip 2013
Martin Szugat
 
SnipClip @ LMU - Tag der offenen Türe 2013
SnipClip @ LMU - Tag der offenen Türe 2013SnipClip @ LMU - Tag der offenen Türe 2013
SnipClip @ LMU - Tag der offenen Türe 2013
Martin Szugat
 
Referentenprofil Martin Szugat
Referentenprofil Martin SzugatReferentenprofil Martin Szugat
Referentenprofil Martin Szugat
Martin Szugat
 

Mehr von Martin Szugat (20)

Self-Service.AI - Pitch Competition for AI-Driven SaaS Startups
Self-Service.AI - Pitch Competition for AI-Driven SaaS StartupsSelf-Service.AI - Pitch Competition for AI-Driven SaaS Startups
Self-Service.AI - Pitch Competition for AI-Driven SaaS Startups
 
MENSCHEN STATT SEITEN - Ein Plädoyer für People Analytics
MENSCHEN STATT SEITEN - Ein Plädoyer für People AnalyticsMENSCHEN STATT SEITEN - Ein Plädoyer für People Analytics
MENSCHEN STATT SEITEN - Ein Plädoyer für People Analytics
 
Pylba: App-as-a-Service für Mobile Content Marketing
Pylba: App-as-a-Service für Mobile Content MarketingPylba: App-as-a-Service für Mobile Content Marketing
Pylba: App-as-a-Service für Mobile Content Marketing
 
Datentreiber - Wir treiben Ihr Unternehmen voran.
Datentreiber - Wir treiben Ihr Unternehmen voran.Datentreiber - Wir treiben Ihr Unternehmen voran.
Datentreiber - Wir treiben Ihr Unternehmen voran.
 
Facebook Newsfeed Optimierung: Gefällt mir
Facebook Newsfeed Optimierung: Gefällt mirFacebook Newsfeed Optimierung: Gefällt mir
Facebook Newsfeed Optimierung: Gefällt mir
 
German CRM Forum 2014: Social Data für Customer Intelligence
German CRM Forum 2014: Social Data für Customer IntelligenceGerman CRM Forum 2014: Social Data für Customer Intelligence
German CRM Forum 2014: Social Data für Customer Intelligence
 
LMU - Tag der offenen Türe 2014 - Big Data = Big Business?
LMU - Tag der offenen Türe 2014 - Big Data = Big Business?LMU - Tag der offenen Türe 2014 - Big Data = Big Business?
LMU - Tag der offenen Türe 2014 - Big Data = Big Business?
 
Facebook ist tot. Eine Obduktion in sieben Akten.
Facebook ist tot.  Eine Obduktion in sieben Akten.Facebook ist tot.  Eine Obduktion in sieben Akten.
Facebook ist tot. Eine Obduktion in sieben Akten.
 
Daumen hoch: Conversion Optimierung für Social Commerce
Daumen hoch: Conversion Optimierung für Social CommerceDaumen hoch: Conversion Optimierung für Social Commerce
Daumen hoch: Conversion Optimierung für Social Commerce
 
Young Brand Awards 2013 - Auf Facebook sind meine Eltern.
Young Brand Awards 2013 - Auf Facebook sind meine Eltern.Young Brand Awards 2013 - Auf Facebook sind meine Eltern.
Young Brand Awards 2013 - Auf Facebook sind meine Eltern.
 
Social CRM als Grundlage für persönliche Kundenkommunikation und personalisie...
Social CRM als Grundlage für persönliche Kundenkommunikation und personalisie...Social CRM als Grundlage für persönliche Kundenkommunikation und personalisie...
Social CRM als Grundlage für persönliche Kundenkommunikation und personalisie...
 
What will Facebook do?
What will Facebook do?What will Facebook do?
What will Facebook do?
 
Social Media und Mobile Anwendungen sinnvoll verknüpfen
Social Media und Mobile Anwendungen sinnvoll verknüpfenSocial Media und Mobile Anwendungen sinnvoll verknüpfen
Social Media und Mobile Anwendungen sinnvoll verknüpfen
 
Referenten martin szugat_snip_clip 2013
Referenten martin szugat_snip_clip 2013Referenten martin szugat_snip_clip 2013
Referenten martin szugat_snip_clip 2013
 
SnipClip @ LMU - Tag der offenen Türe 2013
SnipClip @ LMU - Tag der offenen Türe 2013SnipClip @ LMU - Tag der offenen Türe 2013
SnipClip @ LMU - Tag der offenen Türe 2013
 
Die Mobile-Plattform der Zukunft: Facebook
Die Mobile-Plattform der Zukunft: Facebook Die Mobile-Plattform der Zukunft: Facebook
Die Mobile-Plattform der Zukunft: Facebook
 
Referentenprofil Martin Szugat
Referentenprofil Martin SzugatReferentenprofil Martin Szugat
Referentenprofil Martin Szugat
 
Facebook Marketing: Grundlagen und Erfolgsfaktoren
Facebook Marketing: Grundlagen und Erfolgsfaktoren Facebook Marketing: Grundlagen und Erfolgsfaktoren
Facebook Marketing: Grundlagen und Erfolgsfaktoren
 
So funktioniert erfolgreiches Facebook-Marketing
So funktioniert erfolgreiches Facebook-Marketing So funktioniert erfolgreiches Facebook-Marketing
So funktioniert erfolgreiches Facebook-Marketing
 
Ein bisschen Spaß muss sein: Game Mechanics im Social Media Marketing
Ein bisschen Spaß muss sein: Game Mechanics im Social Media MarketingEin bisschen Spaß muss sein: Game Mechanics im Social Media Marketing
Ein bisschen Spaß muss sein: Game Mechanics im Social Media Marketing
 

Boyer-Moore-Algorithmus

  • 1. Boyer-Moore-Algorithmus Ein Textsuchalgorithmus für große Alphabete Martin Szugat (Martin.Szugat@GMX.net)
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72. Vergleich zu Knuth-Morris-Pratt Um so größer das verwendete Alphabet ist und um so weniger Wiederholungen das Muster und der Text enthält, um so stärker nähert sich die tatsächliche Laufzeit der Laufzeit im Best-Case an. 3 (n + m) 2 (n + m) Worst-Case n / m 2 (n + m) Best-Case Boyer-Moore Knuth-Morris-Pratt Algo Case
  • 73.