fft算法:BM算法



当比对每个字串时从右边开始匹配...

# <stdlib.h>
# <stdio.h>
# <.h>

/*Show usage*/
void usage(char * prog)
{
prf(\"Usage: %s text pattern\\n\", prog);
exit(123);
}

/*Get dist for \'a\' to \'z\'*/
void bm_dist(char * patt, patt_length, * dist)
{
char ch;
k;
for(ch = \'a\'; ch <= \'z\'; ch ) /*only \'a\' to \'z\' here*/
dist[ch-97] = patt_length;
for(k = 0; k <= patt_length -1; k )
dist[patt[k] - 97] = patt_length - k - 1;
prf(\"dist: \");
for(k = 0; k < 26; k )
prf(\"%d \", dist[k]);
prf(\"\\n\");
}

/*Algorithm*/
void bm_sm(char * patt, char * text, patt_length, text_length, * dist)
{
i, j, k;
i = patt_length - 1; /*Start from text[patt_length-1]*/
while(i < text_length)
{
j = patt_length - 1;
k = i;
while(j >= 0 && patt[j] text[k])
{
j --;
k --;
}
(j < 0)
{
prf(\"position %d\\n\", k + 1);
prf(\"text: %s\\n\", text);
prf(\"patn: \");
for(j = 1; j <= k +1; j )
prf(\" \");
prf(\"%s\\n\", patt);
;
}

{
i = i + dist[text[i] - 97] - patt_length + j + 1;
}
}
prf(\"Not match!\\n\");
}
( argc, char * argv)


{
char * text = NULL;
char * pattern = NULL;
dist[26];

/*Check arguments*/
(argc != 3)
usage(argv[0]);

{
text = argv[1];
pattern = argv[2];
}

prf(\"text: %s\\n\", text);
prf(\"patn: %s\\n\", pattern);
bm_dist(pattern, strlen(pattern), dist);
bm_sm(pattern, text, strlen(pattern), strlen(text), dist);
1;
}


Tags:  蚂蚁算法 电梯调度算法 md5加密算法 fft算法

延伸阅读

最新评论

发表评论