AuK/ String matching WS13-14
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
<language>Java</language>
<language>Java</language>
== Allgemeines und Festlegungen ==
String matching befasst sich allgemein mit dem Finden eines Wortes in einem Text. <br>
Beim Text handelt es sich um eine endliche Folge von Zeichen (bestehend aus dem Alphabet der Groß- und Kleinbuchstaben, Zahlen und Satzzeichen) und wird mit $t$ abgekürzt. Das Wort setzt sich ebenfalls aus den selben Zeichen zusammen und wird abgekürzt als $w$ dargestellt. Obwohl es aus mehreren Wörtern bestehen kann, wird es im Folgenden als "Wort" bezeichnet. <br>
Sowohl der Text, als auch das Wort, weisen eine bestimmte Länge auf. Dies bezieht sich auf die Anzahl der Zeichen des Textes bzw. des Wortes. Beim Text wird die Länge mit $n$ bezeichnet und beim Wort mit $m$. <br>
Um nun festzustellen, ob sich ein Wort in einem Text befindet, müssen einzelne Zeichen verglichen werden. Deren Positionen werden folgedermaßen beschrieben:
* das $i$-te Zeichen von $t$ heißt $t[i]$, wobei $1\leq i \leq n$ gilt
* das $j$-te Zeichen von $w$ heißt $w[j]$, wobei $1\leq j \leq m$ gilt.
Somit ist eine präzise Positionsangabe möglich.
== Naiver Algorithmus ==
Der Algorithmus sucht und vergleicht Zeichen für Zeichen im Text.
<code id="52d0732515910">
void nativeSuche(String text, String wort){
int laengeText = text.length();
int laengeWort = wort.length();
int position = 0;
int aktZeichen;
boolean gefunden = false;
while (position <= laengeText-laengeWort){
aktZeichen = 0;
while (aktZeichen < laengeWort && wort.charAt(aktZeichen)==text.charAt(position+aktZeichen))
aktZeichen++;
if (aktZeichen == laengeWort){
System.out.println("Wort an der Stelle " + (position+1) + " im Text gefunden.");
gefunden=true;
}
position++;
}
if (gefunden == false)
System.out.println("Keine Treffer bei der Suche.");
}
</code>
<run id="52d0732515992">
nativeSuche("Das ist das Haus vom Nikolaus","aus");
</run>
== Weitere Algorithmen ==
Einige weitere Algorithmen.
== Der Boyer-Moore-Horspool Algorithmus ==
Ein sehr bekannter Algorithmus für das String-Matching-Problem.