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;
}

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...