/linux/lib/ts_bm.c /include/linux/textsearch.h
static unsigned int bm_find(struct ts_config *conf, struct ts_state *state)
{
struct ts_bm *bm = ts_config_priv(conf);
unsigned int i, text_len, consumed = state->offset;
const u8 *text;
int shift = bm->patlen, bs;
for (;;) {
text_len = conf->get_next_block(consumed, &text, conf, state);
if (unlikely(text_len == 0))
break;
while (shift < text_len) {
DEBUGP("Searching in position %d (%c)/n",
shift, text[shift]);
for (i = 0; i < bm->patlen; i++)
if (text[shift-i] != bm->pattern[bm->patlen-1-i])
goto next;
/* London calling... */
DEBUGP("found!/n");
return consumed += (shift-(bm->patlen-1));
next: bs = bm->bad_shift[text[shift-i]];
/* Now jumping to... */
shift = max_t(int, shift-i+bs, shift+bm->good_shift[i]);
}
consumed += text_len;
}
return UINT_MAX;
}
Boyer-Moore算法实现
本文介绍了一种高效的字符串搜索算法——Boyer-Moore算法的实现细节。该算法通过预处理模式串生成坏字符跳转表和好后缀跳转表,在文本中进行模式匹配,能够快速跳过大量不匹配的字符,显著提高搜索效率。

被折叠的 条评论
为什么被折叠?



