使用lodash和javascript。我有两个集合,我试图将其中一个集合的值分发到其他集合中的关联范围。我的最佳尝试如下所示,以解决这个问题,但是它很快就会遇到我所学到的时间问题,名为“quadratic complexity”。对于我的函数,一旦我开始获得大于大约20个值的数组,该函数需要大量的时间。如何快速分配范围集合之间的值
我该如何更快地做到这一点?有关如何以线性方式做到这一点的任何想法?
var colA = [
{point: 3, value: 5},
{point: 10, value: 8},
{point: 6, value: 18},
{point: 12, value: 13},
{point: 11, value: 2},
{point: 19, value: 4},
{point: 7, value: 2},
{point: 8, value: 12},
];
var colB = [
{min: 1, max: 5, value: 0},
{min: 5, max: 10, value: 0},
{min: 10, max: 15, value: 0},
{min: 15, max: 20, value: 0}
];
_.forEach(colA,function(source){
var resume = true;
_.forEach(colB,function(dest){
if(resume === true && source.point >= dest.min && source.point < dest.max){
dest.value += source.value;
resume = false;
}
});
});
==== ====产量
var colB = [
{min: 1, max: 5, value: 5},
{min: 5, max: 10, value: 32},
{min: 10, max: 15, value: 23},
{min: 15, max: 20, value: 4}
];
注:此功能已经从目前的形式被大大简化。这是我想要做的基本理论的代表。
应该输出什么样的? –
您可以对colA进行排序,然后使用二分搜索查找每个colB的范围内的值 - 不会是线性的,而是改善的 –
是的,这是二次方,但我很惊讶,在这个时代它只需要“大于约** 20 **值“之前”此功能需要很长时间。“这种设置中的函数调用是否涉及大量开销? – AakashM