0

这听起来可能真的很无聊,而且我可能遗漏了一些非常愚蠢的东西。但是,我正在尝试计算矩阵之间的差异,而具有最小值(结果)的是匹配数。但是,对于某些人原因我的算法似乎缺少最小的数字,我不知道为什么..

这是代码:

int min_val = 0;
double comp = 0;
const int ROW_BOUNDS(mat1Rows-mat2Rows+1);
const int COL_BOUNDS(mat1Cols-mat2Cols+1);

for(int i=0; (i < ROW_BOUNDS); i++) {
    for(int j=0; (j < COL_BOUNDS); j++) {
        m3.clear();
        for (int row(0); row < mat2Rows; row++){
            for (int col(0); col < mat2Cols; col++){
                //cout << matrix1[i*mat1Cols+row*mat1Cols+col+j] << ' ';
                m3.push_back( matrix1[i*mat1Cols+row*mat1Cols+col+j] );
                currentRow = i;
                currentCol = j;
            }
        }
        comp = compMatrix1(matrix2, m3);
        //printMatrix(m3, 2, 2);
        //cout << endl << " = " << comp << endl; 

        if(comp < min_val)
        {
            minRow = currentRow;
            minCol = currentCol;
            m4 = m3;
            min_val = comp;
            cout << min_val;
        }
    }
}    
//printMatrix(m4, 2, 2);

这是输出:

0 0 
0 0 
    = 2
0 1 
0 1 
    = 4
1 0 
1 0 
    = 0
0 0 
1 1 
    = 2
0 1 
1 1 
    = 3
1 0 
1 0 
    = 0
1 1 
0 1 
    = 3
1 1 
1 0 
    = 1
1 0 
0 0 
    = 1

它打印:

  0 0 
  0 0

当实际结果应该是:

1 0 
1 0

有人可以提供任何帮助吗?

4

3 回答 3

1

几个问题:

comp = compMatrix1(matrix2, m3); 

compMatrix1 是什么样的?什么是矩阵2?

您还可以解释以下代码的作用吗?

m3.push_back( matrix1[i*mat1Cols+row*mat1Cols+col+j] );

您可能只是不正确地比较矩阵或未正确填充 m3。还,

int min_val = 0;

将最小值初始化为低于某些值。当最小值实际上是 2 时会发生什么?那么没有矩阵会有min_val。

于 2012-04-25T01:22:10.963 回答
1

min_val是零,这意味着你的条件if(comp < min_val)只捕获负最小值。

所以,要解决这个问题,改变你的

int min_val = 0;

int min_val = INT_MAX;

这确保(comp < min_val)了第一个计算矩阵的条件为真。

于 2012-04-25T01:26:37.113 回答
0

min_val 应初始化为大于 MAXIMUM 可能值。

于 2012-04-25T01:24:30.327 回答