md5加密算法:RK算法



这是个有个性算法两位提出者都是Turing奖获得者.:)
基本思想就是把串映射成指纹Hash...
但是text太大时候预处理时间也是得考虑进来~不过最坏时候也就和平凡算法样了(还可能更坏吗...)

# <stdlib.h>
# <stdio.h>
# <.h>
void usage(char * prog)
{
prf(\"Usage: %s text pattern\\n\", prog);
exit(123);
}

/*Algorithm~*/
void rk_sm(char * patt, char * text, patt_length, text_length, c, q)
{
p = 0, t = 0;
long long h = 1;
i, k, s;
flag;
for(i = 0; i <= patt_length -1; i )
h *= c;
h = h % q;
for(i = 0; i < patt_length; i )
{
p = (c * p + patt[i])%q;
t = (c * t + text[i])%q;
}
for(s = 0; s < text_length - patt_length + 1; s )
{
(p t)
{
flag = 1;
for(i = 0; i < patt_length; i )
(patt[i] != text[s+i])
flag = 0; // flag, not match...
[Page] (flag)
{
prf(\"position %d\\n\", s);
prf(\"text: %s\\n\", text);
prf(\"patn: \");
for(k = 1; k <= s; k )
prf(\" \");
prf(\"%s\\n\", patt);
;
}
}
(s < text_length - patt_length)


t = (c * (t - text[s]* h) + text[s + patt_length])%q;
}
prf(\"Not match!\\n\");
}
( argc, char * argv)
{
char * text = NULL;
char * pattern = NULL;
[Page] (argc != 3)
usage(argv[0]);

{
text = argv[1];
pattern = argv[2];
}
prf(\"text: %s\\n\", text);
prf(\"patn: %s\\n\", pattern);
rk_sm(pattern, text, strlen(pattern), strlen(text), 26, 13);
1;
}

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

延伸阅读

最新评论

发表评论