最小数字 -- 算法
Smallest number -- 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
有人可以提供任何帮助吗?
几个问题:
comp = compMatrix1(matrix2, m3);
compMatrix1 是什么样的?什么是矩阵2?
您还能解释一下以下代码的作用吗?
m3.push_back( matrix1[i*mat1Cols+row*mat1Cols+col+j] );
您可能只是不正确地比较矩阵或未正确填充 m3。也
int min_val = 0;
将最小值初始化为低于某些值。当最小值实际上是 2 时会发生什么?那么没有矩阵将具有min_val。
您的min_val
为零,这意味着您的条件if(comp < min_val)
只捕获负最小值。
因此,要解决此问题,请更改您的
int min_val = 0;
自
int min_val = INT_MAX;
这可确保第一个计算矩阵的条件(comp < min_val)
为 true。
min_val应初始化为大于最大可能值。
相关文章:
- 检查数字是否为素数的算法
- 使用C++具有两个数字的最短路径算法.(C++)
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 我可以在移动平台上有效地使用用C/C 编写的数字算法
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 使用位移算法计算平方根始终输出相同的数字
- 计数交换/比较合并排序算法的数字
- 接收数字和数字的算法并检查数字内部数字的次数
- C 搜索算法第一个数字= n
- 如何在较高和较低数字的阵列中适应搜索算法(3N / 2)-2
- 生成跨系统唯一数字的算法
- 更好的算法来检查一个数字是否既不是素数也不是单个素数的幂
- 给定数字与重复的组合的算法?C
- 需要一个高效的减法算法取模一个数字
- 优化算法以查找满足某些属性的六位数字的数量
- 算法-检查数字是否已经在列表中
- 以从 a 到 b 的数字的二进制表示形式计算 "1" 位数字的算法
- FFT Cooley Tukey 算法 - 不适用于多个数字
- RSA数字和字符值算法