如果你能帮助我做一部分,我可能会弄清楚b部分。我一整天都在关注这个和类似的问题,而我只是在掌握如何处理嵌套循环方面遇到了问题。对于第一个循环,有n次迭代,第二次循环有n-1,第三次有n-1 ..我是否正确地考虑过这个问题?
考虑以下算法,
它将n个整数的序列作为输入a1,a2,...,a
并产生矩阵M = {mij}
作为输出
其中mij是最小期限
在整数序列中ai,a + 1,...,aj为j> = i而mij = 0否则。
如果j> = i且mij = 0
,则初始化M使得mij = aifor i:=1 to n do
for j:=i+1 to n do
for k:=i+1 to j do
m[i][j] := min(m[i][j], a[k])
end
end
end
return M = {m[i][j]}
(a)证明该算法使用Big-O(n ^ 3)比较来计算矩阵M.
(b)证明该算法使用Big-Omega(n ^ 3)比较来计算矩阵M.
使用这个面和部分(a),得出结论该算法使用Big-theta(n ^ 3)比较。
答案 0 :(得分:5)
在A部分中,您需要找到min
操作数的上限。
为了做到这一点,很明显上面的算法有少 min
操作,然后是:
for i=1 to n
for j=1 to n //bigger range then your algorithm
for k=1 to n //bigger range then your algorithm
(something with min)
上面有完全 n ^ 3 min
操作 - 因此在您的算法中, less 然后n^3
min ops。
由此我们得出结论:#minOps <= 1 * n^3
(对于每个n> 10,其中10是任意的)。
通过definition of Big-O,这意味着算法为O(n^3)
你说你可以单独做B,所以我会让你尝试一下:)
提示:中间循环有更多次迭代,然后for j=i+1 to n/2
答案 1 :(得分:0)
对于外循环内部的每次迭代,如果n^2
,则两个嵌套循环将给出i == n
复杂度。外循环将运行i = 1 to n
。所以总复杂度将是一系列:1^2 + 2^2 + 3^2 + 4^2 + ... ... ... + n^2
。此总和值为n(n+1)(2n+1)/6
。忽略此总和项的低阶项,最终订单为O(n^3)