考虑以下(不切实际的!)投资问题。
我们有一组n个潜在投资,每个投资由一对浮点数(金额,估计收益)给出。总投资额A;我们希望选择投资以最大化此金额的回报。
可以选择每个投资(a,r)作为一个整体(花费所有a,并获得r回报)或者只能选择一个分数f(消费(f * a)和获得(f * r)返回)。一组选择的估计回报是各个选择的回报的总和。显然,在选择S的元素时,我们不能花费超过可用的总金额。
描述一种有效的算法,用于计算可以通过金额A和投资组合S实现的最大估计回报。算法的时间复杂度是多少(以大写符号表示)?
这是最好的吗?
用文字和/或伪代码描述你的算法是很好的;没有必要在编程语言中包含代码。
答案 0 :(得分:3)
这是fractional knapsack problem,与整数对应物不同,幸运的是很容易用贪心算法求解最优解。
至于复杂性,你有O(n)来计算比率,O(n logn)用于分类投资,O(n)用于分配资金。这意味着整个算法是O(n logn)。