/**
*
* LasVegas:<br />
* TODO
*
* @author zhangzhaoyu
* @param S
* 正文字符串数组
* @param n
* 正文字符串数组长度
* @param P
* 模式字符串数组
* @param m
* 模式字符串数组长度
* @param loc
* 匹配的字串在正文中的起始位置
* @param q
* q 是素数 改进为随机产生的大的素数
* @return
* loc
*/
public static long LasVegas(char S[], int n, char P[], int m, long loc, long q) {
long b = BASE; // 字符集的字符个数
int i, j, k;
long w = 0, p = 0;
long x = 1;
n = S.length;
m = P.length;
for (i=0; i<m-1; i++) {
x = (x * b) % q;
}
for (i=0; i<m; i++) {
w = (w * b + new String(S[i] + "").hashCode()) % q;
}
for (i=0; i<m; i++) {
p = (p * b + new String(P[i] + "").hashCode()) % q;
}
i = 0; loc = -1;
while ((i<n-m) && (loc==-1)) {
if (w == p) {
for (k = 0; k<m; k++)
if (S[k+i] != P[k])
break;
if (k>=m)
loc = i;
}
w = ((w - new String(S[i]+"").hashCode() * x) * b + new String(S[i+m] +"").hashCode()) % q;
if (w < 0) {
w = w + q;
}
i++;
}
return loc;
}
Las_Vegas 字符串匹配算法
最新推荐文章于 2022-01-21 14:53:04 发布