热带矩阵乘法

Tropical Matrix Multiplication

本文关键字:热带      更新时间:2023-10-16

对下面的代码做些什么修改可以使矩阵进行热带乘法(热带代数)

热带代数是: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#中有这样的内置库,将会有很大的帮助。

如果您的目标矩阵乘法确实是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替换为矩阵中元素的类型。

相关文章: