【问题标题】:Big Omega Analysis大欧米茄分析
【发布时间】:2014-11-14 12:47:25
【问题描述】:

我一直在努力理解它的最佳运行时间:

for t = 1 to n
    sum = 0

    for i = 1 to t
        sum = sum + x[i]

我知道第一个循环会进行 n 次。这是我挣扎的内部循环。 内部循环将第一次执行 n(n+1)/2,但下一次执行 n(n+1)/2 -1。 我不确定如何将其转化为最佳运行时间。

如果可能的话,我可以朝正确的方向推动。 谢谢!

【问题讨论】:

  • 请详细说明---这里的t是什么(t的值)?另外,我猜你需要更严格的分析!

标签: algorithm analysis big-o


【解决方案1】:

为了形象化这一点,在更复杂的情况下,我采用了一种方法来想象一个充满正方形的区域或一个充满骰子的体积。每个方块代表一个原子步骤。外循环迭代的所有步骤都放在同一行。对于您的情况,它看起来像这样:

t=1 #
t=2 ##
t=3 ###
t=4 ####
t=5 #####

如您所见,它们形成了一个三角形,其高度为 N,宽度也为 N。如果您现在计算正方形 (N * (N + 1) / 2),您就有了内部的迭代次数环形。将其相乘并删除不相关的项会得到复杂度 Θ(N*N)。

【讨论】:

    【解决方案2】:

    您为分析 O(n) 的尝试增加了一点复杂性。这可能就是您感到困惑的原因。

    我们知道外部 for 循环 1 到 t 是线性的。随着时间的推移,内循环运行得更多。在 t = 1 时,它运行一次,在 t = n 时,它运行 n 次。

    我们执行 for 循环的平均次数是多少?

    avg = (1 + n)/2

    这是您找到的值,尽管您尝试遍历它。我们只需要计算的平均值。

    因为对于较大的 n 值,1 对 n 相对无关紧要,我们可以将其近似为 n/2

    所以外循环运行 n 次。内循环运行 n/2 次。

    n * n / 2 = 0.5n^2

    由于我们通常忽略大多数乘法值,我们可以说O(n) = n^2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2017-08-12
      相关资源
      最近更新 更多