【问题标题】:How to optimise search如何优化搜索
【发布时间】:2013-08-09 20:07:13
【问题描述】:

给定多个选项,我需要选择其中的 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);

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

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

【问题讨论】:

标签: javascript algorithm node.js optimization


【解决方案1】:

这正是knapsack problem,也就是NP-Complete - 所以没有已知的多项式解决方案。

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

【讨论】:

  • 比伦特。感谢您为其命名。我现在知道用 Google 做什么了。
猜你喜欢
  • 2019-10-17
  • 2016-12-05
  • 2020-10-20
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 2012-10-24
相关资源
最近更新 更多