2015-05-17 4 views
0

Какие изменения в следующем коде могут заставить его работать, чтобы умножить матрицы на тропические (Tropical Algebra).Умножение тропических матриц

Tropical Алгебра: х ⊕ у = минимум х и у х ⊗ у = х + у

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# построены библиотеки для этого.

+0

Вы недостаточно хорошо объясняете, что вы подразумеваете под тропической алгеброй. Кроме того, что означает точечный продукт, в частности, какое дополнение используется в точечном продукте? – user1978011

+0

@ user1978011: Я предполагаю, что он означает [max-plus алгебру] (http://en.wikipedia.org/wiki/Max-plus_algebra)? – Mints97

+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 типом элементов в вашей матрица.

+0

100% сработало .... –

Смежные вопросы