【问题标题】:Nested Loops Time Analysis嵌套循环时间分析
【发布时间】:2013-03-02 16:14:04
【问题描述】:

好的,我正在上算法课,并且正在准备考试... 不幸的是..我无法理解嵌套循环时间分析背后的概念

这段代码中有三个循环

for (i=1->n)
 for (j=1->i)
   for (k=1->i)
     x=x+1;

我不明白如何找出答案:s 任何答案都会有很大帮助 谢谢大家:)

【问题讨论】:

    标签: algorithm time-complexity nested-loops


    【解决方案1】:

    您需要总结循环,它只是需要计算的多个 sigma:

    inner sigma 中的 1 是您在最内层循环中所做的事情的复杂性。

    【讨论】:

    • 甜蜜的方程式,但你把第二个和弄错了。这只是 i^2,而不是 i(i+2)/2。
    【解决方案2】:

    i=1 时,k-loop 运行 1 次,j-loop 运行 1 次。总计=1.1=1 次
    i=2 时,k-loop 运行 2 次,j-loop 运行 2 次。总计=2.2=4 次
    i=3 时,k-loop 运行 3 次,j-loop 运行 3 次。总计=3.3=9 次
    i=n 时,k-loop 运行 n 次,j-loop 运行 n 次。总计=n.n=n^2次

    所以,算法的时间复杂度为 O(1+2^2+3^2+...n^2)=O(n(n+1)(2n+1)/6) =O(n ^3)

    【讨论】:

    • 请回答另一个问题:for (i=1 - > n) for (j=1 -> i) for (k=1 -> j) //code here
    • @Umar 现在弄清楚怎么做,就像我做的那样。我把答案写的很详细,方便大家学习。
    • 好吧..你能检查一下我的答案吗? , j 循环运行 2 次,k 循环运行 3 次,所以当 i=3 时它的 2.3=6,j 循环运行 3 次,k 循环运行 6 次,所以它的 3.6=18
    • @Umar 不,这是不正确的。你仍然没有抓住重点。基本上,对您来说重要的是内部循环在您执行某些操作(恒定时间操作)的地方实际运行了多少次。我以逐步的方式编写它,以便您更容易弄清楚发生了什么。对于复杂的问题,你应该使用 Yochai 的方法。无论如何,我已经为你解决了。见pastebin.com/s3mmGG2i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多