我在其中一本书中看到了这个问题。它陈述如下:
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个选项。
但对于那种情况,我也必须做出假设,而且这是一个错误的答案。
答案 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) - 也不算太差
...... m = k; R = (n - k + 1) * k
- 同样是O(n)。所以答案必须是B,C中的一个。你能根据描述的想法找出哪一个? (提示:选项B将为您提供二次O(n ^ 2)复杂度)