【问题标题】:Naive string search algorithm - average time朴素的字符串搜索算法 - 平均时间
【发布时间】:2016-09-10 09:40:41
【问题描述】:

我正在研究 Naive 字符串搜索算法(又名蛮力算法)。我知道,还有其他更有效的算法,但由于我是从基础开始的,目前我只对这个算法感兴趣。 我有一个问题,如下: 此算法的平均时间复杂度 (ϴ) 是多少? 我发现最好和最坏的情况分别有 ϴ = N, ϴ = M*N

【问题讨论】:

  • 你的字符串中的所有字母都是以均匀随机的方式生成的吗?另外,它们的长度是否总是相同的?或者,如果字符串是自然语言的单词,或者由某个过程生成的数据,则 ϴ 估计可能不同。
  • 你也看过Wikipedia的解释吗?如果没有,就使用它。如果是,请说明那里不清楚的地方。
  • 要搜索的文本 (N) 是随机生成的。它有一个 256 个字符的字母表(字节缓冲区),
  • 要搜索的文本呢?也是随机生成的吗?

标签: algorithm search


【解决方案1】:

从您对问题的评论来看,似乎 N 个文本字符是均匀随机生成的。对于此设置,蛮力的平均时间为 O(N - M),与生成搜索字符串的方式无关。 (注意Wikipedia states O(N + M),但我们实际上可以使用以下分析推断出O(N - M)。另见these lecture notes)。

考虑搜索字符串与文本位置 i 处的文本匹配的迭代。对于任何搜索字符串,搜索字符串的每个字符都有p = 255/256的概率不匹配搜索字符串的字符。假设我们定义一个“成功”是匹配的。那么直到成功的尝试次数是Geometric Distributionexpected (1 - p) / p = O(1) failures until success

因此,对于位置 i,预期成本为 O(1)。通过linearity of expectation,我们现在需要总结所有相关的i。有Θ(N - M)这样的i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 2015-10-15
    • 2011-07-04
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多