最小的数字 - 算法

时间:2012-04-25 01:13:37

标签: c++ algorithm

这可能听起来真的很无聊,我可能错过了一些非常愚蠢的东西..但是,我正在尝试计算矩阵之间的差异,而具有最小值(结果)的那个是匹配数。但是,由于某种原因,我的算法似乎缺少最小的数字,我无法弄清楚为什么..

以下是代码:

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

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

3 个答案:

答案 0 :(得分:1)

几个问题:

comp = compMatrix1(matrix2, m3); 

compMatrix1是什么样的?什么是matrix2?

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

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

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

int min_val = 0;

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

答案 1 :(得分:1)

您的min_val为零,这意味着您的条件if(comp < min_val)仅会捕获负微量数据。

所以,要解决此问题,请更改

int min_val = 0;

int min_val = INT_MAX;

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

答案 2 :(得分:0)

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