8 Eylül 2007 Cumartesi

Boyer-Moore-Horspool function

#include 
#define ALPHABETSZ 128
#define PATGRD 0xfe
#define TXTGRD 0xff
static int d[ALPHABETSZ];
void bmhInit(char *txt, int m, char *pat)
{
int i;
/* initialize */
pat[0] = PATGRD;
txt[0] = TXTGRD;
for (i = 0; i < ALPHABETSZ; i ++)
d[i] = m;
for (i = 1; i < m; i++)
d[pat[i]] = m - 1;
}

int bmhFind(int n, char *txt, int m, char *pat)
{
int i, j, k;
int nmatch = 0;
i = m;
while (i <= n) {
k = i;
for (j = m; txt[k] == pat[j]; j--)
k--;
if (j == 0) {
nmatch++;
printf("%d \n", k);
}
i += d[txt[i]];
}
return(nmatch);
}
/* End of File */

Hiç yorum yok: