algorithm - 这个递归关系代表了什么样的算法?

标签 algorithm time-complexity complexity-theory

<分区>

看看这个算法复杂度的递归关系:

T(n) = 2 T(n-1) - 1

这个递归关系代表了什么样的算法。请注意,有一个 minus 而不是 plus,因此它不可能是分而治之的算法。

什么样的算法会因为它的递归关系而变得复杂?

最佳答案

T(n) =  2 T(n-1)-1
T(n) =  4 T(n-2)-3
T(n) =  8 T(n-3)-7
T(n) = 16 T(n-4)-15
...
T(n) = 2^k T(n-k) - 2^(k-1)

如果,例如T(1) = O(1)然后

T(n) = 2^(n-1) O(1) - 2^(n-2) = O(2^(n-1)) = O(2^n)

呈指数级增长。


现在让我们看看O(1) - 1 = O(1) .来自 CLRS:

O(g(n)) = { f(n) : there exist positive constants c and n0 such that 0 <= f(n) <= c g(n) for all n >= n0 }

从而消除 -1 的影响我们只需要增加隐藏常量 c一个。

因此,只要您的基本案例具有像 O(1) 这样的复杂性, O(n)n > 0你不应该关心-1 .换句话说,如果你的基础案例重复发生 T(n) = 2 T(n-1)至少呈指数增长 n你不关心这个-1 .


示例:假设您被要求告知字符串是否为 Sn characters 包含指定的字符。然后你像这样继续,你在 S[0..n-2] 上递归运行算法和 S[1..n-1] .当字符串是一个字符长度时,你停止递归,然后你只检查字符。

关于algorithm - 这个递归关系代表了什么样的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549175/

相关文章:

algorithm - 如果它们需要 O(n) 时间对列表进行排序,为什么我们不使用尝试进行排序?

python str.index 时间复杂度

arrays - 无法理解寻峰算法的差异

algorithm - OCR:根据最后 N 个结果选择最佳字符串(OCR 自适应过滤器)

java - 获取等差数列或等比数列中的下一个序列

algorithm - 我们能说任何线段树都是平衡的吗?

c++ - 在大矩阵中找到一个矩阵

java - Java中String CompareTo函数的时间复杂度是多少?

if-statement - 算法复杂度 : if/else under for loop

big-o - 用大 O 符号比较 2 个函数