使用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