首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算最大子序列和的时间复杂度

计算最大子序列和的时间复杂度
EN

Stack Overflow用户
提问于 2013-11-11 18:13:04
回答 3查看 517关注 0票数 0

大家好,我试着计算最大子序列和的时间复杂度。实际上,我知道的答案是O (n^3 ),它是从函数(n^3+ 3n^2 + 2n)/6得到的。

我的问题是这个函数是如何得到的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-13 00:59:17

这里是如何..。

代码语言:javascript
复制
i=0
j=0 k=0              (count=1 )
j=1 k=0,1            (count =2)
j=2 k=0,1,2          (count = 3)
...
j=n-1 k=0,1,2,...n-1  (count = n)

Total number of times code executed = 1+2+3+...+n =  n(n+1)/2

i=1
j=1 k=1              (count=1 )
j=2 k=1,2            (count =2)
j=3 k=1,2, 3          (count = 3)
...
j=n-1 k=1,2,...n-1  (count = n-2)

Total number of times code executed = 1+2+3+...+n-1 =  (n-1)n/2

...

i=n-1
j=n-1 k=n-1     ( count = 1)
Total number of  of times code executed = 1 = 1(1+1)/2


 Now if we sum for all the values of i

 n(n+1)/2 + ((n-1)((n-1)+1)/2+.....+1(1+1)/2

 =∑ N(N+1)/2 =1/2∑(N^2 +N) =1/2(∑N^2+∑N)=1/2{  1/6  N(N+1)(2N+1) + 1/2 N(N+1) } =1/2{ (2N^3 + 3N^2+N )/6 +(N^2+N)/2} =(N^3 + 3N^2 + 2N)/6
票数 1
EN

Stack Overflow用户

发布于 2013-11-12 21:01:18

很简单,实际上:看看代码中的循环。

代码语言:javascript
复制
for (int i=0; i<n; i++)
    for(j = i; j<n; j++) {
        ...
        for (int k=i; k<=j; k++)
            XXX;

XXX被执行n^3时间(模一些常数因子和n的一些较低的幂),因为外部循环显然从0运行到n-1,“中间”循环运行于i (从01,.)开始。对于n-1,意味着内部循环将“启动”大约n^2时间。现在,ij都依赖于n (例如,在第一次外部迭代结束时,i将是0j=n-1 ),因此,行XXX将是n^2时间(对于内部循环)乘以n^2时间(对于外两个循环),从而导致总的n^3

要获得具体的函数(n^3 + 3n^2 + 2n)/6,您必须在计算中更加彻底,并处理我前面忽略的所有因素。

票数 2
EN

Stack Overflow用户

发布于 2014-03-16 02:54:37

请查看Mark建议的这个解决方案 (在他的书中)。

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

https://stackoverflow.com/questions/19913015

复制
相关文章

相似问题

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