首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间复杂度

时间复杂度
EN

Stack Overflow用户
提问于 2017-05-10 05:37:38
回答 3查看 1.2K关注 0票数 0

我有一些算法,我想找出它的时间复杂度。我想出了一些答案,但我不确定他们是对还是错。有人能帮帮我吗?

代码语言:javascript
复制
public static int f4(int N){
   if (N == 0) return 0;
   return f4(N/2) + f1(N) + f4(N/2);
} // f1 had a time complexity of O(n)

1)我相信这个是O(n)。

代码语言:javascript
复制
public static find f6(int N){
   if (N == 0) return 1;
   return f6(N-1) + f6(N-1);
}

2)我相信这是O(n!)或O(n)。

EN

回答 3

Stack Overflow用户

发布于 2017-05-10 06:43:58

第一个问题的分析

master theorem指出,给定表单f(n) = a*f(n/b) + O(n^k)的重复出现,可能会导致三种类型的复杂性:

如果log_{b}(a) < k

  • The时间复杂度为

  • ,则时间复杂度为O(n^k);如果log_{b}(a) < k

  • The时间复杂度为log_{b}(a) == k

  • The,则时间复杂度为O(n^k);如果时间复杂度为O(n^k log n),则时间复杂度为O(n^(log_{b}(a))

第一次递归采用以下形式:

代码语言:javascript
复制
f4(N) = 2f4(N/2) + O(n) = 2f4(N/2) + O(n^1)

这显然属于第二种情况,即log_{2}(2) == 1。因此,正确的答案是O(n log n)

您的第一个问题具有polylogarithmic时间复杂性。

第二个问题的分析

递归的形式为

代码语言:javascript
复制
f6(N) = 2f6(N - 1)

您可以按如下方式展开:

代码语言:javascript
复制
f6(N) = (2^k)f6(N - k)

只需将该关系应用于f6(N-1)f6(N-2)等。

由于f6(0)立即返回,即只需一个步骤即可返回,因此完整的运行时复杂度为

代码语言:javascript
复制
f6(N) = 2^N 

只需插入k == N即可。

因此,第二个问题具有指数时间复杂度

票数 1
EN

Stack Overflow用户

发布于 2017-06-14 17:47:37

我认为最好像调用方法那样递归地解决这个问题。对于函数f6:

代码语言:javascript
复制
T(n) = 2T(n-1) + c      = > T(n-1) = 2T(n-2) + c
Then : T(n) = 2(2T(n-2)) + c) + c 
T(n) = 4T(n-2) + 2c + c      => T(n-2) = 2T(n-3) + c
T(n) = 4(2(T(n-3) + c) + 2c + c 
T(n) = 8T(n-3) + 4c + 2c + c
.
.
.
T(n) = 2^i T(n - i) + 2^(i-1)c + 2^(i-2)c + ... + (2^0)c
When i asymptotically goes to n , that is : i => n , then : 
T(n) = 2^n T(n-n) + 2^(n-1)c + 2^(n-2)c + ... + (2^0)c
T(n) = O(2^n)
票数 0
EN

Stack Overflow用户

发布于 2017-05-10 05:55:56

Akshat的答案是详细的。

https://stackoverflow.com/a/43880977/6866309

如果第二个函数内部有一个循环,那么它将变成O(n!)。

类似下面的例子是O(n!)。

代码语言:javascript
复制
f6(int N){
   if (N == 0) return 1;

   for(int i=0; i<N; i++) {
      f6(N-1) + f6(N-1);
   }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43880269

复制
相关文章

相似问题

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