我一直在努力了解最佳的运行时间:
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。 我不确定如何将其转换为最佳运行时间。
如果可能的话,我可以使用正确的方向推动。 谢谢!
答案 0 :(得分:1)
为了想象这一点,我采用了在更复杂的情况下想象一个充满正方形或填充骰子的体积的方法。每个方块代表一个原子步骤。外循环迭代的所有步骤都放在同一行上。对于您的情况,它看起来像这样:
t=1 #
t=2 ##
t=3 ###
t=4 ####
t=5 #####
正如你所看到的,这些形成一个三角形,高度为N,宽度也是N.如果现在计算正方形(N *(N + 1)/ 2),你就有了内部的迭代次数环。乘以它并删除不相关的项会给出复杂度Θ(N * N)。
答案 1 :(得分:0)
您为分析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