#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
void HitungPinggiran(int m, char P[], int b[])
{
int k;
int q;
b[1]=0;
q=2;
k=0;
for(q=2;q<=m;q++){
while ((k>0) && (P[q]=!P[k+1])){
k=b[k];
}
if (P[q]=P[k+1]){
k=k+1;
}
b[q]=k;
}
}
void KMPsearch(int m, int n, char P[],char T[], int idx)
{
int i,j;
bool ketemu;
int b[m];
HitungPinggiran(m,P,b);
j=0;
i=1;
ketemu=false;
while (i<=n && !ketemu){
while ((j>0) && (P[j+1]=!T[i])){
j=b[j];
}
if (P[j+1]=T[i]){
j=j+1;
if (j=m){
ketemu = true;
}
else
i=i+1;
}
if (ketemu){
idx=i-m+1;
}
else idx = -1;
}
}
int main(int argc, char *argv[])
{
string T="bananananobona";
string P="nano";
int idx;
KMPsearch(4, 14, P, T, idx);
cout<<"Pattern ditemukan di index ke- "<<idx<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
0 comments:
Posting Komentar