考虑以下(不现实!)投资问题

时间:2012-02-25 00:21:10

标签: algorithm return complexity-theory pseudocode

考虑以下(不切实际的!)投资问题。

我们有一组n个潜在投资,每个投资由一对浮点数(金额,估计收益)给出。总投资额A;我们希望选择投资以最大化此金额的回报。

可以选择每个投资(a,r)作为一个整体(花费所有a,并获得r回报)或者只能选择一个分数f(消费(f * a)和获得(f * r)返回)。一组选择的估计回报是各个选择的回报的总和。显然,在选择S的元素时,我们不能花费超过可用的总金额。

描述一种有效的算法,用于计算可以通过金额A和投资组合S实现的最大估计回报。算法的时间复杂度是多少(以大写符号表示)?

这是最好的吗?

用文字和/或伪代码描述你的算法是很好的;没有必要在编程语言中包含代码。

1 个答案:

答案 0 :(得分:3)

这是fractional knapsack problem,与整数对应物不同,幸运的是很容易用贪心算法求解最优解。

  1. 首先根据递减比率r / a
  2. 订购投资
  3. 将您的可用资金分配给此类订单中的投资。即购买所有的第一笔投资,然后用可用的钱购买第二笔投资,然后购买第三笔投资,等等,直到你完成了这笔钱。
  4. 至于复杂性,你有O(n)来计算比率,O(n logn)用于分类投资,O(n)用于分配资金。这意味着整个算法是O(n logn)。