离散数学Big-O表示法算法复杂性

时间:2012-10-14 15:12:36

标签: algorithm math matrix complexity-theory big-o

如果你能帮助我做一部分,我可能会弄清楚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 = ai
for 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)比较。

2 个答案:

答案 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)