【问题标题】:why is the time complexity of square matrix multiplication defined as O(n^3)?为什么方阵乘法的时间复杂度定义为 O(n^3)?
【发布时间】:2012-11-10 12:47:28
【问题描述】:

我在多个来源(在线和书籍)中遇到过这个问题 - 对于大小为 nXn 的矩阵,方阵乘法的运行时间为 O(n^3)。 (示例 - matrix multiplication algorithm time complexity

该语句将表明此乘法过程的运行时间上限为 C.n^3,其中 C 是某个常数,n>n0 其中 n0 是某个输入,超出该上限成立。 (http://en.wikipedia.org/wiki/Big_O_notationWhat is the difference between Θ(n) and O(n)?) 问题是,我似乎无法推导出常数 C 和 n0 的值。

我的问题 -

  1. 有人可以为“方阵乘法的大哦是 O(n^3)”这句话提供数学证明吗?

  2. C 和 n0 的值是多少?

【问题讨论】:

  • 对于每个单元格(n^2),你会遍历相应行和列中的n个单元格,然后将它们相乘,所以是O(n^3)。
  • 所以如果我们有 2 个矩阵 A 和 B,每个矩阵都是 nXn。它们的乘积是大小为 nXn 的矩阵 X。您是在暗示对于 X 中的每个值(X 中有 n^2 个值),您必须遍历 A 和 B 中的总共 n 个元素?还是更像A中的n个元素和B中的n个元素,这会使这个n^4而不是n^3。
  • A 中的 n 个元素和 B 中的 n 个元素,是的,但总计最多为 2n,而不是 n^2。所以最终结果是O(n^3)。

标签: big-o matrix-multiplication


【解决方案1】:
  1. 彼此之间有 3 个 for 循环,每个循环从 0 到 n-1(或 1 到 n)(可以看到 in the link you provided,即使它不完全正确),这导致 O(n3)。将其形式化为适当的证明应该很容易。

  2. a) 对于正式证明,运行时间需要根据一组操作来定义,通常被认为是任何算术运算。在 3 个 for 循环中,有 2 个算术运算(1 个乘法,1 个加法),因此我们得到 2.n<sup>3</sup>,因此 C = 2。

    b) n0 = 0 因为这在 n = 1 时成立

注意,由于 big-O 只是一个上限,我们也可以说这个算法的复杂度是 O(nk) 对于任何 k >= 3(同样不会如果我们使用 big-Theta 表示法,则为真)。我们也可以将 C 和 n0 分别取为大于 2 和 0 的任何值(因为要求不是找到可能的最小值)。

【讨论】:

  • 谢谢!感谢您纠正我的错误,我的意思是渐近上限。很抱歉混淆。相关 - mathforum.org/library/drmath/view/51904.html
  • @QuestMonger 非常感谢您提供的数学论坛链接...这是我还没有遇到过的最容易理解的答案!
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 2022-10-24
  • 2023-02-10
  • 2020-06-25
  • 1970-01-01
  • 2020-12-16
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多