javascript – 获取数组(JS)的组合最接近的值

前端之家收集整理的这篇文章主要介绍了javascript – 获取数组(JS)的组合最接近的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一个算法,我可以使用它来组合数组中的值,以尽可能接近“另一个值”.

例如,我想找出给出关闭结果的组合的数量是2.5.而我的阵列是[0.5,1.0,1.5,2.0,3.0].在这种情况下的组合将为2.0 0.5.

2.7将产生相同的组合(2.5是最接近的),而3.7将产生3.0±0.5,7.0将为3.0±3.0±1.0.

我一直在阅读不同的算法来创建可用的组合,例如这个:https://codereview.stackexchange.com/questions/7001/better-way-to-generate-all-combinations但是,我很难编写一个允许多次使用相同值的函数(像我的例子7.0 ).这使得组合的数量相当大.

有一个很好的例子呢?还是有任何指针给?

编辑
@zkar告诉我有关“背包问题”.我可以补充说,对于我的例子,追求的值在一个指定的范围(1.0和10.0) – 这有限的组合.

解决方法

你可以尝试这个简单的算法( JSFiddle demo):
/**
 * @param src {Array} List of available values
 * @param val {Number} Target value
 * @returns {Array}
 */
function get_combinations(src,val)
{
    var result = [];
    var source = src.slice();
    source.sort();

    while (val > 0)
    {
        for (var i = source.length - 1; i >= 0; i--)
        {
            if (source[i] <= val || i == 0)
            {
                val = val - source[i];
                result.push(source[i]);
                break;
            }
        }
    }

    return result;
}

猜你在找的JavaScript相关文章