【问题标题】:Divide and conquer on rectangular matrices在矩形矩阵上分而治之
【发布时间】:2016-02-24 06:22:05
【问题描述】:

对于这个问题的含糊之处,我深表歉意,但我正在尝试确定一种方法来执行矩形矩阵 A 和 B 的分而治之乘法,使得 A = n x m 和 B = m x p

我做了一些阅读,Strassen 的方法看起来很有希望,但我无法确定如何在矩形矩阵上使用该算法。我看到有些人提到用零“填充”以使两个矩阵都成正方形,然后“取消填充”结果,但我不清楚取消填充阶段需要什么。

感谢您的建议!

【问题讨论】:

    标签: algorithm matrix divide-and-conquer


    【解决方案1】:

    结果矩阵将包含“添加”到操作数矩阵的所有项目的零。要返回您的矩形结果,您只需裁剪结果,即根据操作数的尺寸获取结果矩阵的左上角。

    但是,仅在 n、m 和 p 非常接近的情况下,填充本身似乎是明智的。当这些不成比例时,您将进行大量零矩阵乘法。

    例如,如果 n = 2m = p,Strassen 算法会将乘法划分为 7 个 m 大小矩阵的乘法。但是,其中 4 次乘法将涉及零矩阵,并且没有必要。

    我认为有两种方法可以提高性能:

    • 使用填充并记住矩阵的哪一部分被填充。然后对于每个乘法步骤,检查您是否没有乘以零矩阵。如果这样做,结果也将是一个零矩阵,无需计算。这将消除与填充有关的大部分成本。
    • 不要使用填充。 NonSquare_Strassen:将矩形矩阵划分为正方形区域和余数。在方形区域运行 vanilla Strassen。在余数上再次运行 NonSquareStrassen。之后,结合这些结果。这个算法很可能比第一个更快,但并不完全容易实现。但是,其逻辑将与 Strassen 的方阵算法非常相似。

    为了简单起见,我会选择第一个选项。

    注意: 请记住,您也可以将 Strassen 的方法用于矩形矩阵,并且在特定矩阵大小以下,额外矩阵加法的 O(n^2) 成本变得更加重要,最好使用普通三次乘法来完成小尺寸。这意味着 Strassen 的方法对于非方阵仍然很容易实现。以上期望您已经实现了方阵算法。

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 2012-03-04
      • 2020-04-11
      • 2017-12-05
      • 2017-07-16
      • 2011-06-18
      • 1970-01-01
      • 2016-11-17
      • 2021-11-20
      相关资源
      最近更新 更多