热带矩阵乘法
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_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
替换为矩阵中元素的类型。
相关文章: