1.问题
投资问题(一般性描述):
设m万元钱,n项投资,函数fi(x)表示将x万元投入第i项项目所产生的效益,i = 1,2,…,n.
问:如何分配这m万元钱,使得投资的总效益最高?
组合优化问题:
假设分配给第i个项目的钱数是xi,问题描述为:
2.解析
投资问题的实现思路:
设Fk(x)表示x万元投给前k个项目的最大效益,k = 1,2,…,n,x = 1,2,…,m
说明:第k步,前后共分配x万元,其中分配给第k个项目为xk;x - xk万元分配给前k-1个项目。
投资问题的实现步骤(基于表1):
1、k=1,即只有一个项目
2、k=2,即有两个项目
3、k=3,即有三个项目
4、k=4,即有四个项目
综上,整理成表格如下所示
3.设计
投资问题的伪代码:
xi(x) = k: 新加第 i 项时,总共分配 x 元时,第 i 项分配了 k 元(xk)
建立f表(已知),建立x表,建立F表;
递推方程: Fk(x) = max{f k(xk )+Fk-1 (x -xk )}, k =1,2,3,...,n
For k =1,2,3,...,n // 第 k 个项目
For 𝑥 = 1,2,3,...,𝑚 // k 个项目共分配 x 万元
For xk = 0,1,2,3,...,x // 第 k 个项目分配 xk
4.分析
投资问题的时间复杂度:
5.源码
投资问题的源码地址:
https://github.com/Ying917/Algorithm-Analysis/blob/master/invest.cpp