【发布时间】:2020-11-03 22:48:09
【问题描述】:
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总是矩形的,每一行的列数都是一样的
【问题讨论】:
-
除非数组有任何模式(例如有序),否则我认为没有其他算法可以做。你可以尝试使用workers做多线程(一个worker for row)
-
你想找到数组中最大值的索引还是实际的最大值?在第一种情况下,如果最大值在 2 个地方,你想返回哪个?
-
我会尝试的唯一改进是将最大值复制到一个变量中,以便在以后的比较中它是一个变量访问而不是两个数组访问。
-
@Maxwells.c 谢谢,这里真的没有模式。
-
@GabrielePetrioli 我想要索引,argmax 不是最大值。如果有退化,任何可能性都是好的。
标签: javascript arrays optimization