Использование 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