逐行和逐列地计算两个最小值?

时间:2015-03-06 08:56:21

标签: c# parallel-processing task-parallel-library

我一直在计算并行计算最小的两个值的行和列的问题。例如,我有以下内容:

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循环,但这没有任何意义,因为它会使工作量增加一倍。

我也考虑了聚合器模式,但是我不认为选择最低的两个值是关联的和可交换的。有什么建议我可以这样做吗?

谢谢!

更新

对不起,我忘了告诉,我想要最低的两个值。我已经更新了我的问题。谢谢你指出这个!

1 个答案:

答案 0 :(得分:0)

我认为我得到了你的问题,我没有得到的是为什么你这样做:

 lowestRow[row][1] = lowestRow[row][0];
 lowestRow[row][0] = value;}

你有2个单元格或什么?,为什么lowestRow有2个索引?