【问题标题】:Raising a 2D array to a power in C将二维数组提升到 C 中的幂
【发布时间】:2015-05-15 07:14:09
【问题描述】:

我正在使用 C 并且有一个表示方阵的二维数组。我想要做的是计算矩阵到n 的幂,一个给定的整数。

我正在寻找最有效的方法。我的第一个想法是将矩阵与自身相乘n 次,但后来我听说了乘方求幂。但是我不确定如何实现这一点,有人可以指导我吗?

【问题讨论】:

标签: c arrays matrix


【解决方案1】:

这是基本大纲:

Matrix matrixExponent(Matrix m, int n)
{
      Matrix accumulator = MatrixIdentity();
      Matrix power2 = m;

      while(n != 0)
      {
           if(n & 1)
                 accumulator = MatrixMultiply(&accumulator, &power2);
           power2 = MatrixMultiply(&power2, &power2);
           n = n / 2;
      }
      return accumulator;
}

您存储一个累加器,它是部分计算的指数。给定的整数指数可以分解为一系列乘以 2 的指数。例如,当一个数组的 14 次方(二进制为 1110)时,矩阵乘以自身 14 次等于:

m14 = m8 * m4 * m2

因此,您只需通过重复将 power2 与自身相乘来计算 2 的所有幂,同时遍历整数指数 n 的每一位,并在每次位为 1 时将 power2 与累加器相乘。

【讨论】:

  • 不错的答案,虽然我会将 Matrix.identity() 更改为 MatrixIdentity() 并将 Matrix.multiply(x,y) 更改为 MatrixMultiply(&x,&y),因为这是 C,而不是 C++。
  • MatrixIdentity 需要将矩阵作为参数复制:MatrixIdentity(m)
  • @KlasLindbäck MatrixIdentity() 不会从矩阵 m 复制或复制到矩阵 m,因此不需要 m 作为参数。它只是返回一个矩阵,对角线上为 1,其他地方为 0。顺便说一句,感谢您之前的编辑,它修复了我的代码中的一个错误。
  • 呃(我没有想清楚)。您仍然需要尺寸信息,但这可能超出了基本大纲的范围。
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2021-09-25
  • 2016-08-15
相关资源
最近更新 更多