这是一个 O(2n + sort) 在大多数情况下应该产生良好结果的算法
O(2n + sort)
item.yield = item.profit / item.cost
remaining_budget > 0
number_of_items = floor(remaining_budget / item.cost)
item.id
number_of_items * item.cost
remaining_cost
如果您是离散操作,它不会总是捕获所有边缘情况,例如,说你有 budget = 100 和一个项目 A 同 cost = 51, yield = 1.5 和另一个项目 B 同 cost = 50, yield = 1.4 ,
budget = 100
A
cost = 51, yield = 1.5
B
cost = 50, yield = 1.4
100 - 51 = 49
51 * 1.5 = 76.5
125
25.5
100 - 2 * 50 = 0
2 *
50 * 1.4 = 70
140
40
但是,如果您持续运营,它将开始提高绩效,因为预算不再是一个限制因素
优化可能包括
remaining_budget < minumum_unit_cost