void preBmBc(char *x, int m, int bmBc[]) {
int i;
for (i = 0; i < ASIZE; ++i)
bmBc[i] = m;
for (i = 0; i < m - 1; ++i)
bmBc[x[i]] = m - i - 1;
}
void suffixes(char *x, int m, int *suff) {
int f, g, i;
suff[m - 1] = m;
g = m - 1;
for (i = m - 2; i >= 0; --i) {
if (i > g && suff[i + m - 1 - f] < i - g)
suff[i] = suff[i + m - 1 - f];
else {
if (i < g)
g = i;
f = i;
while (g >= 0 && x[g] == x[g + m - 1 - f])
--g;
suff[i] = f - g;
}
}
}
void preBmGs(char *x, int m, int bmGs[]) {
int i, j, suff[XSIZE];
suffixes(x, m, suff);
for (i = 0; i < m; ++i)
bmGs[i] = m;
j = 0;
for (i = m - 1; i >= 0; --i)
if (suff[i] == i + 1)
for (; j < m - 1 - i; ++j)
if (bmGs[j] == m)
bmGs[
BM算法实现源代码
Bad Character & Good Suffix 算法(BM算法)实现解析
最新推荐文章于 2023-09-16 12:51:06 发布
本文介绍了BM算法的实现细节,包括预处理Bad Character Shift(bmBc)数组和Good Suffix Shift(bmGs)数组的方法,以及在文本中查找模式匹配的步骤。通过`preBmBc`、`suffixes`和`preBmGs`函数,计算出对应的shift值,最后在`BM`函数中进行字符串匹配。

最低0.47元/天 解锁文章
179





