我一直在计算并行计算最小的两个值的行和列的问题。例如,我有以下内容:
foreach(var row in matrix){
foreach(var col in matrix[row]){
var value = matrix[row][col];
if (value < lowestRow[row][0]){
lowestRow[row][1] = lowestRow[row][0];
lowestRow[row][0] = value;}
else if (value < lowestRow[row][1]){
lowestRow[row][1] = value;}
if (value < lowestCol[col][0]){
lowestCol[col][1] = lowestCol[col][0];
lowestCol[col][0] = value;}
else if (value < lowestCol[col][1]){
lowestCol[col][1] = value;}}}
现在代码很简单,但是如果我想并行化它,我觉得很难。因为假设我这样做:
Parallel.Foreach(matrix, row => {
foreach(var col in matrix[row]){
var value = matrix[row][col];
if (value < lowestRow[row][0]){
lowestRow[row][1] = lowestRow[row][0];
lowestRow[row][0] = value;}
else if (value < lowestRow[row][1]){
lowestRow[row][1] = value;}
if (value < lowestCol[col][0]){
lowestCol[col][1] = lowestCol[col][0];
lowestCol[col][0] = value;}
else if (value < lowestCol[col][1]){
lowestCol[col][1] = value;}}})
我无法比较行的值,因为所有内容都会同时发生。我想,我可以比较一下这些专栏。一个简单的解决方案是使用额外的for循环,但这没有任何意义,因为它会使工作量增加一倍。
我也考虑了聚合器模式,但是我不认为选择最低的两个值是关联的和可交换的。有什么建议我可以这样做吗?
谢谢!
更新
对不起,我忘了告诉,我想要最低的两个值。我已经更新了我的问题。谢谢你指出这个!
答案 0 :(得分:0)
我认为我得到了你的问题,我没有得到的是为什么你这样做:
lowestRow[row][1] = lowestRow[row][0];
lowestRow[row][0] = value;}
你有2个单元格或什么?,为什么lowestRow
有2个索引?