我正在研究Naive字符串搜索算法(又名强力算法)。我知道,还有其他更有效的算法,但是当我从基础开始时,目前我只对这个算法感兴趣。 我有一个问题,如下: 此算法的平均时间复杂度(Θ)是多少? 我发现最佳和最差情况分别具有Θ= N,Θ= M * N
答案 0 :(得分:0)
从您的评论到问题,似乎 N 文本字符是统一随机生成的。对于此设置,无论搜索字符串的生成方式如何,暴力的平均时间都是 O(N - M)。 (请注意Wikipedia states O(N + M),但我们实际上可以使用以下分析来推断 O(N - M)。另请参阅these lecture notes)。
考虑搜索字符串与文本位置 i 处的文本匹配的迭代。对于任何搜索字符串,搜索字符串的每个字符的概率 p = 255/256 与搜索字符串的字符不匹配。假设我们定义“成功”不匹配。然后,成功之前的尝试次数为Geometric Distribution expected (1 - p) / p = O(1) failures until success。
因此,对于职位 i ,预期成本为 O(1)。到linearity of expectation,我们现在需要总结所有相关的 i 。有Θ(N - M)等 i 。