对以下代码进行的更改可以使其有效地进行矩阵乘法(热带代数)。

热带代数为:x y = x和yx的最小值x = y

  for(i=0;i<m;++i)
  {
   for(j=0;j<q;++j)
   {
    c[i][j]=0;
    for(k=0;k<n;++k)      

     c[i][j]=c[i][j]+(a[i][k]*b[k][j]);       

     cout<<c[i][j]<<" ";
   }
   cout<<"\n";
  }

我也在C#中开发它。 如果在C#中内置了为此功能的库,将对您有很大帮助。

===============>>#1 票数:2 已采纳

如果您要实现的矩阵乘法确实是c_ij = a_i1 ⊗ b_1j ⊕...⊕ a_in ⊗ b_nj ,则您的代码应为

for (i = 0; i < m; ++i) {
   for (j = 0; j < q; ++j) {
      auto tmp = (a[i][0] + b[0][j]); // this is the first ⊗
      for (k = 1; k < n; ++k)
         // std::min is the ⊕ operation
         tmp = std::min(tmp, (a[i][k] + b[k][j]));

      c[i][j] = tmp;
      cout << c[i][j] << " ";
   }
   cout << "\n";
}

如果不使用c ++ 11,则必须用矩阵中元素的类型替换auto

  ask by Muhammad Noman Sajid translate from so

未解决问题?本站智能推荐: