热带矩阵乘法

时间:2015-05-17 10:25:34

标签: c# c++

对以下代码进行了哪些更改可以使其适用于热带矩阵(热带代数)。

热带代数是: x⊕y= x和y的最小值 x⊗y= 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 个答案:

答案 0 :(得分: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替换为矩阵中元素的类型。