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)
BM算法实现源代码
最新推荐文章于 2023-09-24 23:57:22 发布
本文介绍了BM算法的实现细节,包括预处理Bad Character Shift(bmBc)数组和Good Suffix Shift(bmGs)数组的方法,以及在文本中查找模式匹配的步骤。通过`preBmBc`、`suffixes`和`preBmGs`函数,计算出对应的shift值,最后在`BM`函数中进行字符串匹配。
摘要由CSDN通过智能技术生成