问题标签 [boyer-moore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1157 浏览

python - Boyer moore 算法 - 计算所有匹配的子串

我在 python 中实现了 boyer moore 算法,我需要计算子字符串在字符串中出现的次数。

我的字符串存储在一个向量中:

针也是一个向量:

我的问题是:

我实现的算法只返回第一次出现针的索引。在上面的示例中,它返回1,但是,正如我之前所说,我需要每次计算针是否出现在数组中,并期望它返回 2;

示例和预期回报

1

2

我的代码i 在search函数中,我尝试用 更改return i(索引)counter += 1来计算匹配的针数,但是,如果我这样做,它会给我以下错误:

0 投票
1 回答
210 浏览

c - 在 C 中搜索子字符串

假设我有一个很长的字符串,比如一个文件路径,我想在其中搜索一些东西。例如,类似$ find命令的东西。这似乎是一个基本的实现方式:

这样做和像Boyer Moore这样的事情会有什么性能差异吗?还是strstr已经做了同样有效的事情?

基本上,我有大约十亿个非常长的字符串,我希望基于最有效的子字符串实现对它们进行快速(ish)查找(没有任何索引)。我应该使用什么?


更新:举一个更具体的例子,假设我有十亿个文件路径要搜索:

从这里我会搜索一个或多个字符串。示例示例为:

0 投票
0 回答
190 浏览

java - 有没有办法找到文本中所有模式的出现,而不是在 Boyer Moore 算法中找到第一次出现

我正在研究 Java 中的 Boyer Moore 字符串匹配算法,因此它可以充分处理阿拉伯文本,我有代码可以找到模式的第一次出现而不是所有出现。

我试图对其进行修改,但它不起作用,我得到了 arrayIndexoutofbounds 异常。
我得到的例外是:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: BM.findPattern(BM.java:27) 处 BM.main(BM.java:110) 处 -1

目的是修改算法,使其可以处理发声的阿拉伯语文本。这是输入和输出的示例:输入文本

安娜那那那那

输入模式

ana 在位置 0 找到然后我得到了上面的异常

0 投票
0 回答
74 浏览

c++ - 我的 Boyer-Moore 算法只搜索我的文本文件中的前 3000 个字符

我正在尝试实现 Boyer-Moore 字符串搜索算法。搜索算法本身似乎工作正常,直到某一点。它打印出所有匹配项,直到达到 3300 个字符区域左右,然后不再进行搜索。我不确定这是否与文本文件太大而无法放入我的字符串或完全不同的东西有关。当我尝试打印保存文本文件的字符串时,它也会切断前 185122 个字符。作为参考,文本文件是指环王:指环王——它有 1016844 个字符长。这是我的参考代码:

我试图对可能的原因进行一些研究,但找不到遇到此特定问题的任何人。将不胜感激任何朝着正确方向的推动。

0 投票
0 回答
26 浏览

algorithm - 为什么我们要在 Boyer-Moore 算法中模式的最后一个匹配字符中加 1?

下面是 Boyer-Moore 字符串匹配算法的伪代码。伪代码来自这个站点

last[T[i]]我的问题是在上面伪代码的第 12 行中添加 1 的原因是什么?

0 投票
0 回答
105 浏览

c++ - 我的 KMP 算法有问题吗?

我正在做一个项目来比较 2 个字符串搜索算法的时间复杂度。由于某些问题,我丢失了以前的代码,因此不得不重写大部分代码。然而,这一次,我的 KMP 算法似乎运行得慢了很多,而且无论我输入什么,我都无法真正让它比我的 Boyer-Moore 运行得更快。这是我的代码:

例如,在我之前的结果中,对于单词“the”,Boyer-Moore 大约需要 260 毫秒,而 KMP 大约需要 184 毫秒。现在,Boyer-Moore 当然仍然需要大约 260 毫秒,但是 KMP 现在需要大约 330 毫秒。任何指向正确方向的指针将不胜感激。谢谢你。

0 投票
0 回答
161 浏览

java - 如何使用 Boyer Moore 算法找到最合适的出现?

我必须实现 Boyer Moore,但它必须找到最合适的出现。(所以是 Boyer Moore 的反向版本)。返回文本中出现模式的最右侧位置的索引。搜索 * 从文本的右端开始,一直到第一个字符(左侧)。我试图反转 for 循环并计算出现次数,但我的代码仍然无法正常工作。我认为它不会以正确的方式转变,但我不确定。这是我的代码:

}

0 投票
1 回答
265 浏览

php - 如何实现流的 Boyer-Moore 搜索

我将如何为流实施Boyer-Moore 搜索?我了解如何为给定的字符串实现这一点,我们知道整个字符串的长度。但是,如果我们不知道字符串的大小(即,它是任意长度的字节流)怎么办。

我正在尝试在 PHP 中实现这一点,因此 PHP 中的任何代码都会有所帮助。

这是我在 PHP 中的 Boyer-Moore Search 的实现:

如果我们给它一个 haystack string like"barfoobazquix"和一个 needle string like "foo",这很好用,它将3按预期返回。但是,如果输入 haystack 是一个拆分为 4 字节块的流怎么办。第一个块是"barf",它将不返回匹配项,第二个块"ooba"也是不返回匹配项,依此类推......

在这种情况下,我们永远无法"foo"在当前实现的流的任何缓冲块中找到子字符串。我正在努力调整当前的实现,即使搜索字符串被分成多个块,它也能正常工作。

0 投票
1 回答
134 浏览

string - 字符串匹配boyer moore..字符数

在许多使用 Boyer moore 算法的示例中,有一个 256 个字符的声明,我不知道这个数字表示什么......请帮助

来自( https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm)的示例:

0 投票
0 回答
84 浏览

c - Boyer Moore 替换不止一种模式

我正在做一个字符串搜索和替换项目。我只能更改句子中目标模式的 1 个。但我可以找到两者。

例:就去做吧。你会做到的。

查找:做替换:认为预期---> 只是想它。你会想的。实际发生了什么--->就去做吧。你会想的。

我怎样才能同时更换它们?我从文件 input.txt 中读取了这句话