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

标签 algorithm math matrix complexity-theory big-o

如果你能帮我做 a 部分,我也许可以弄清楚 b 部分。我一整天都在研究这个问题和类似的问题,但我只是在掌握如何处理嵌套循环方面遇到问题。对于第一个循环,有 n 次迭代,第二次循环有 n-1 次迭代,第三次循环有 n-1 次迭代。我的想法正确吗?

考虑以下算法,
它将 n 个整数 a1, a2, ..., an 的序列作为输入
并生成矩阵 M = {mij}
作为输出 其中 mij 是最小项
在整数 ai、a + 1、...、aj 的序列中,j >= i,否则 mij = 0。

初始化 M,如果 j >= i 且 mij = 0,则 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) 比较。

最佳答案

在 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 ops - 因此在你的算法中,有更少然后 n^3最小操作数。

由此我们可以得出结论:#minOps <= 1 * n^3 (对于每个 n > 10,其中 10 是任意的)。
作者:definition of Big-O ,这意味着算法是 O(n^3)

你说你可以单独算出B,所以我让你试试:)


提示:中间循环比for j=i+1 to n/2更多次迭代

关于algorithm - 离散数学 Big-O 表示法 算法复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12883484/

相关文章:

javascript - 如何根据离散步骤插值进度?

python - 获取矩阵相邻元素的总和

Android NDK 包含 Eigen

python - 使用numpy在python中存储可变数量的矩阵

java - Java中的Dijkstra算法

algorithm - 如何打印表达式所有可能的平衡括号?

algorithm - 什么散列函数在对 n 个键进行散列时产生最大碰撞次数?

java - 在 x 分钟做某事,然后每隔 n 分钟再做一次

c - 最大化产生给定总和的不同数字的计数 'k'

math - float 学有问题吗?