【问题标题】:Why is the input size divided by 2 and not 4 in the recurrence of square matrix multiplication?为什么在方阵乘法的递归中输入大小除以2而不是4?
【发布时间】:2018-04-04 08:46:20
【问题描述】:

在分析方阵乘法运行时,我知道运行时是

对于天真的分治法,并且

对于施特拉森的方法。

为什么 N 除以 2 而不是 4?

我怎么理解, 的系数(8 表示朴素,7 表示 Strassen)是每个级别引入的递归数,或者子问题的增长率。除数是减少问题的因素。 加数是每个特定重复节点的运行时。

如果朴素算法和 Strassen 方法都将输出矩阵划分为 矩阵,其中 是行数和列数,那么问题不是减少了 4 倍而不是 2 倍,因为在每个级别上,我们都解决了 4 个较小矩阵的问题?

下面是我从 GeeksforGeeks 获得的幼稚方法的图像:

【问题讨论】:

  • 元素数量确实减少了4,但问题是由矩阵的单个维度的size参数化的,它只有一半。
  • 我认为,如果您至少提供伪代码并据此进行辩论,这将大大改善您的问题。重复与算法相关联,而不是问题,您只提出后者。
  • 我必须补充一点,我的意思是 $T(n/4)$。
  • @cadaniluk 公开提供。只需简单的搜索!
  • @Media “它是公开的。只需简单的搜索!”并不意味着它是问题的一部分。如果 OP 要特别争辩子问题应该除以 4,那么问题将变得显而易见,他可能会自己解决。 (您可以删除 LaTeX 标记,反正 Stack Overflow 不支持它。)

标签: algorithm recursion matrix-multiplication divide-and-conquer


【解决方案1】:

来自Introduction to Algorithms, 3rd Edition,p。 77:

令 T(n) 为使用此 [朴素矩阵乘法] 过程将两个 n x n 矩阵相乘的时间。

n 不是任何一个矩阵中元素的数量,它是一个维度。所以,由于矩阵维度被递归地分成两半,除数是2而不是4。

【讨论】:

  • 亲爱的朋友,感谢您的回复,但问题是关于递归的。很明显我们有 7 个调用,但为什么是 T(n/2)?为什么它不被4除?至少我是这个意思。
  • @Media T(n) 中的参数 n 是一个维度。它是矩阵的宽度和长度。现在,您将两个矩阵减半,并将一个 n/2 x n/2 矩阵乘以另一个 n/2 x n/2 矩阵。只看尺寸。他们被减半。再次注意,n 测量的不是元素的数量,而是矩阵维度。在重读时,我注意到我的答案的最后一部分有点不整洁,我会解决这个问题。
猜你喜欢
  • 2017-02-02
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多