回 帖 发 新 帖 刷新版面

主题:关于时间复杂度计算的问题


(1) x=1;
(2) for(i=1;i<=n;i++)
(3)     for(j=1;j<=i;j++)
(4)         for(k=1;k<=j;k++)
(5)             x++;

  该程序段中频度最大的语句是(5),内循环的执行次数虽然与问题规模n没有直接关系,但是却与外层循环的变量取值有关,而最外层循环的次数直接与n有关,因此可以从内层循环向外层分析语句(5)的执行次数:

[img]file:///C:/gailun2.gif[/img]

则该程序段的时间复杂度为T(n)=O(n3/6+低次项)=O(n3)。
我实在搞不懂执行次数公式是如何推导出来的,用到了哪些数学知识?


[em10]

回复列表 (共5个回复)

沙发

多看点例子,感觉和算法分析很重要,没什么好算的。

板凳

时间复杂度比时间频度(执行次数)容易算出,有时看就出来了.....

3 楼

组合数学的知识。

每一组满足 k≤j≤i≤N的(i,j,k)值对应一次最内层的操作。

问题与从N种不同颜色的球中挑出3个球(允许重复)的方案数等价。

结果为C(N+2,3) = (N+2)(N+1)N/6,  C(m,n)是组合数。

4 楼

明白了!非常感谢三楼兄弟的指教!

5 楼

你可以粗略的观察看出来,让n变得非常大,那每个循环都会是n量级的,所以感觉就是O(n3)

我来回复

您尚未登录,请登录后再回复。点此登录或注册