蛮力字符串匹配概念

时间:2014-10-26 07:44:31

标签: string algorithm search time-complexity brute-force

我在其中一本书中看到了这个问题。它陈述如下:

         Suppose we use brute-force string matching to search for a pattern of length     
         m in a string of length n. In which of these cases will the worst-case
         running time be MAXIMUM? (k>1 is 
         an integer constant.)

         A. m = n-k
         B. m = n/k
         C. m = (n)^(1/k)
         D. m = k

对我而言,如果能确定我们从4个选项中获得的模式,我们没有任何意义 会给我们最坏的时间复杂性。 由于k是常数,因此对于n和k的不同值,我们将得到不同的m长度。 它如何影响搜索算法的复杂性?

PS:考虑到n非常大且k = 1,我将选择第4个选项。

但对于那种情况,我也必须做出假设,而且这是一个错误的答案。

2 个答案:

答案 0 :(得分:1)

对于强力字符串搜索,您必须执行的测试次数为:

m(n-m)

也就是说,你需要在每个位置测试m(n-m),m的每个测试需要m个字符。

当渐变为零时,此函数处于最大值,因此,相对于m进行区分,您得到:

n-2m=0

这是选项B.

答案 1 :(得分:0)

蛮力R(m,n) = (n - m + 1) * m的运行时间最短。 (这是O(mn),但我们暂时保留精确值。)

您需要选择上述m成为最大值的R(m,n),这将是您的答案。

  • 甲。 m = n - k; R = (k + 1) * (n - k) - 即n乘以常数,即O(n) - 也不算太差 ......
  • d。 m = k; R = (n - k + 1) * k - 同样是O(n)。

所以答案必须是B,C中的一个。你能根据描述的想法找出哪一个? (提示:选项B将为您提供二次O(n ^ 2)复杂度)

相关问题