我必须处理这样一种情况,即需要搜索来自服务器的传入数据以查找字符串,然后用另一个字符串替换(尽可能不缓冲数据。)
传入的数据可以在多个 block 中。因此,给定的字符串有可能被拆分成多个 block 。例如,如果字符串是“abc”,则 block 可以是 block 1:“aaab”和 block 2:“cbbb”。然后在第一个 block 中匹配 'a' 之后,我们将不得不等待下一个 block 中是否有 'b' 的匹配项。这意味着现在我们必须开始缓冲第一个 block 。或者,至少,需要缓冲第一个 block 中匹配的字母,直到我们可以确定第二个 block 是否包含字符串的其余部分。
如果不是,那么我们将不得不返回到第一个 block 并从字母 b 重新开始匹配。
鉴于应用程序的限制,需要尽可能避免缓冲。 有没有办法以最少的缓冲来实现这一目标?对我来说,这似乎是一个足够普遍的问题,在多种情况下都会遇到,但不幸的是,我在搜索后未能找到任何解决方案或方向。
最佳答案
如果我理解正确,要搜索的模式可以完全在一个 block 中,也可以跨越两个或多个 block ,具体取决于模式和 block 大小。如果模式在两个 block 中,那么我们需要跟踪在第一个 block 中找到的所有模式前缀(作为后缀),然后在第二个 block 中搜索相应的模式后缀(作为前缀)。 这里可能需要在每个 block 上进行多模式搜索,并且可以在此处使用后缀树。 当我们收到一个新夹头时,我们已经知道要在上面搜索的所有图案。我们可以创建该 block 的后缀树,进行所有搜索,根据需要进行处理,然后移动到下一个 block ,并对其执行相同的操作。
关于algorithm - 网络流中跨 block 的字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776103/