javascript - 如何优化搜索

标签 javascript algorithm node.js optimization

给定多个选项,我需要选择其中的 n 个, 这样总评级最大化,但总成本 不超过预算。

var options = [
    { rating: 8, cost: 6, },
    { rating: 5, cost: 4, },
    //...100 of these in total
];

function select(n, budget) {
    //TODO: Replace this code with some real implementation
    return options.slice(0, 5);
}

//Sudocode:
var result = select(5, 25);
Assert(result.length == 5);
Assert(sum(result.cost) <= 25);
Assert(sum(result.rating) is maximized);

我已经尝试了几个不同的选项,循环内循环的所有变体。 但当然,它们的执行速度非常缓慢,或者根本不会返回。

我认为仅仅循环是行不通的,必须有一个 解决这个问题的根本不同的方法。

最佳答案

这正是 knapsack problem ,即 NP-Complete - 所以没有已知的多项式解。

但是,如果您的权重(成本)是相对较小的整数,则有一个非常有效的 pseudo-polynomial solution using dynamic programming .

关于javascript - 如何优化搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146111/

相关文章:

javascript - 如果在 React 中单击链接,SlideMenu 不会关闭

javascript - 为什么我的页面在 modal.close() 之后重新加载?

algorithm - 从每个类别中选择 k 个不重复的数字并最大化选择

json - 无法从 NodeJS 中的 JSON 响应获取值

node.js - 填充时连接字符串

javascript - 一旦屏幕通过特定点或 jsx 标签,如何获取滚动事件?

javascript - Angular 7 - 将数据添加到数组而不是替换它

javascript - 为什么 string.search 在这种情况下会失败?

java - 高效的有界偏置随机数生成器

c++ - 以最有效的方式合并 C++ vector 或类似数据结构中的某些元素