gpt4 book ai didi

javascript - 处理大量数字时函数会变慢

转载 作者:行者123 更新时间:2023-12-02 15:29:04 28 4
gpt4 key购买 nike

我编写了一个脚本,它不是给出一组数据的实际平均值,而是返回一个包含大多数数据点的窗口。让我展示一些代码:

time.tic()
var selectedAverage = 0;
var highestPointCount = 0;
for (var i = 1; (i*step) <= maxValue; i++) {
var dataPointCount = 0;
for (var j = 0; j < myArray.length; j++) {
if (myArray[j] >= minValue+(i-1)*step && myArray[j] <= minValue+i*step) {
dataPointCount++;
}
}
if (dataPointCount > highestPointCount) {
highestPointCount = dataPointCount;
selectedAverage = (minValue+(i-1)*step)+Math.round(0.5*step);
}
}
console.log(time.toct().ms)
return selectedAverage;

首先通过最大值减去最小值来计算步长值,然后除以 10。因此有 10 个“水平”窗口。然后脚本计算每个窗口内的数据点数量并返回适当的平均值。

然而,当传入较大数字的数组(例如 1.000.000)时,脚本速度似乎会极度减慢(有时超过 200 倍)。数组长度大约为 200,但长度始终相同,因此它必须与实际值相关联。知道哪里出了问题吗?

编辑:获取步长值的代码:

var minValue = myArray.min();
var maxValue = myArray.max();
var step = Math.round((maxValue-minValue)/10);
if (step === 0) {
step = 1
}

.min() 和 .max() 是附加到数组的原型(prototype)。但这一切进行得很快。我测量了每一步,发现是 for 循环减慢了速度。

最佳答案

如果我正确理解你的算法,这应该删除所有不必要的计算并且速度更快:

var arr = [];
var maxQty=0;
var wantedAverage = 0;
for (var j = 0; j < 11; j++) {
arr[j]=0;
}
for (var j = 0; j < myArray.length; j++) {
var stepIndex = Math.floor((myArray[j]-minValue)/step)
arr[stepIndex]+=1;

if(arr[stepIndex] > maxQty ){
wantedAverage = minValue + stepIndex*step +Math.round(0.5*step);
maxQty = arr[stepIndex]
}
}
console.log(maxQty, wantedAverage)

我们只迭代数组的每个元素一次,并计算它所属的窗口的索引,并将数量数组加一。然后,如果我们在窗口中发现了更多的点,我们会更新 WantAverage

关于javascript - 处理大量数字时函数会变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485223/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com