首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这种递归关系代表哪种算法?

这种递归关系代表哪种算法?
EN

Stack Overflow用户
提问于 2018-09-28 13:57:07
回答 2查看 90关注 0票数 0

看一下算法复杂度的递归关系:

代码语言:javascript
复制
T(n) = 2 T(n-1) - 1

这个递归关系代表什么样的算法。注意,这里有一个minus而不是plus,所以它不能是一个分而治之的算法。

作为递归关系,什么样的算法会有这样的复杂性?

EN

回答 2

Stack Overflow用户

发布于 2018-09-28 14:02:59

基于给定的时间复杂度,它是一个指数算法。

要将大小减少1,您需要将时间乘以2(大约)

因此,它不属于任何多项式时间算法范式,如分而治之,动态规划,...

票数 1
EN

Stack Overflow用户

发布于 2018-09-28 15:54:28

代码语言:javascript
复制
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),那么

代码语言:javascript
复制
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):存在正常量cn0,使得0 <= f(n) <= c g(n)适用于所有n >= n0 }

因此,为了消除-1的影响,我们只需要将隐藏常量c增加1。

所以,只要你的基本情况像O(1)O(n)n > 0一样复杂,你就不应该关心-1。换句话说,如果你的基本情况使得n中的递归T(n) = 2 T(n-1)至少是指数级的,那么你就不关心这个-1了。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52549175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档