在二维数组中找到argmax的最快方法

时间:2020-11-03 13:55:56

标签: javascript arrays optimization

JavaScript对我来说不是一种熟悉的语言。我有一个逻辑要尝试优化速度。它在于查找二维数组(矩形)的argmax,行和列索引。目前,我有一个简单的实现

function argMax2d(arr) {
  var rowMax = 0, colMax = 0;
  for( var rowIndex = 0; rowIndex < arr.length; rowIndex++){
    for( var colIndex = 0; colIndex < arr[rowIndex].length; colIndex++){
      if (arr[rowIndex][colIndex] > arr[rowMax][colMax]){
        rowMax = rowIndex;
        colMax = colIndex;
      }
    }
  }
  return [rowMax, colMax];
}

在Python中,由于不利用数据的连续性,这将是完成工作的一种非常缓慢的方法。

PS:arr始终为矩形,每行的列数相同

1 个答案:

答案 0 :(得分:2)

根据问题中的评论,我认为唯一的 minimum 优化是缓存数组的长度,以避免在每次迭代中访问它们,对于用于比较。

    function argMax2d(arr) {
      var rowMax = 0,
          colMax = 0,
          vLength = arr.length,
          hLength = arr[0].length,
          maxValue = -Infinity;
          
      for (var rowIndex = 0; rowIndex < vLength; rowIndex++) {
        for (var colIndex = 0; colIndex < hLength; colIndex++) {
          if (arr[rowIndex][colIndex] > maxValue) {
            maxValue = arr[rowIndex][colIndex];
            rowMax = rowIndex;
            colMax = colIndex;
          }
        }
      }
      
      return [rowMax, colMax];
    }

JS performance comparison