算法导论 — 思考题15-10 投资策略规划

投资策略规划)你所掌握的算法知识帮助你从Acme计算机公司获得了一份令人兴奋的工作,签约奖金1万美元。你决定利用这笔钱进行投资,目标是10年后获得最大回报。你决定请Amalgamated投资公司管理你的投资,该公司的投资回报规则如下。该公司提供 n n n种不同的投资产品,从 1 1 1~ n n n编号。在第 j j j年,第 i i i种投资产品的回报率为 r i j r_{ij} rij。换句话说,如果你在第 j j j年在第 i i i种投资产品投入 d d d美元,那么在第 j j j年年底,你会得到 d ⋅ r i j d·r_{ij} drij美元。回报率是有保证的,即未来10年每种投资产品的回报率均已知。你每年只能做出一次投资决定。在每年年底,你既可以将钱继续投入到上一年选择的投资产品中,也可以转移到其他投资产品中(转移到已有的投资产品,或者新的投资产品)。如果跨年时你不做投资转移,需要支付 f 1 f_1 f1美元的费用。否则,需要支付 f 2 f_2 f2美元的费用,其中 f 2 > f 1 f_2 > f_1 f2>f1
  a. 如上所述,本问题允许你每年将钱投入到多种投资产品中。证明:存在最优投资策略,每年都将所有钱投入到单一投资产品中(记住最优投资策略只需最大化10年的回报,无需关心任何其他目标,如最小化风险)。
  b. 证明:规划最优投资策略问题具有最优子结构性质。
  c. 设计最优投资策略规划算法,分析算法时间复杂度。
  d. 假定Amalgamated投资公司在上述规则上又加入了新的限制条款,在任何时刻你都不能在任何单一投资产品中投入15000美元以上。证明:最大化10年回报问题不再具有最优子结构性质。
  
  
  a.
  这里做一个简要的说明,分三种情况。
  (1) 每一年都做投资转移的情况
  这种情况下,显然每一年都应当选择回报率最大的那一款投资产品,才能使得10年总收益最大化。这里假设了每一年回报率最大的投资产品都不一样。
  (2) 每一年都不做投资转移的情况
  假设每年都选择固定的一种投资产品。选择第1种投资产品的10年总收益为 E 1 E_1 E1,选择第2种投资产品的10年总收益为 E 2 E_2 E2,… …,选择第 n n n种投资产品的10年总收益为 E n E_n En。如果选择的是两种投资产品 k 1 k1 k1 k 2 k2 k2,那么10年总收益必然是 E k 1 E_{k1} Ek1 E k 2 E_{k2} Ek2的加权和,不会超过 E k 1 E_{k1} Ek1 E k 2 E_{k2} Ek2中的较大者。因此,每年只选择一种投资产品所获得的总收益,不会比选择多种投资产品所获得的总收益要少。故在每一年都不做投资转移的情况下,每年只选择一种投资产品可以得到最大化收益。
  (3) 某些年份做投资转移,某些年份不做投资转移
  如果将连续不做投资转移的年份看做一个子问题,那么这个子问题属于情况(2),在这些连续的年份之中都只选择一种投资产品,可以得到这个子问题的最大化收益。
  再将连续不做投资转移的年份合并为一个整体,我们可以将这个整体也当做一年。这样每一处有连续不做投资转移的年份都看做是一年。现在来看整个问题,其中的每一年都做了投资转移,这属于情况(1)。每一年都选择单一的投资产品也可得到最大化收益。
  综上所述,无论做不做投资转移,在每一年都选择单一的投资产品,10年后可以得到最大化收益。
  
  b.
  用 e [ i , j ] e[i, j] e[i,j]表示在第 j j j年选择第 i i i种投资产品的前提下,前 j j j年总的最大化收益。分析 e [ i , j ] e[i, j] e[i,j]需要考虑两种情况:
  1) 第 j j j年不做投资转移
  这种情况下,第 j − 1 j-1 j1年也必须选择第 i i i种投资产品。此时 e 1 [ i , j ] = ( e [ i , j − 1 ] − f 1 ) ⋅ r i j e_1[i, j] = (e[i, j-1] - f_1) · r_{ij} e1[i,j]=(e[i,j1]f1)rij
  2) 第 j j j年做了投资转移
  这种情况下,第 j − 1 j-1 j1年可以选择除 i i i种之外的其他任意一种投资产品,显然我们要从中选择使得前 j − 1 j-1 j1年总收益最大的那种投资产品。故 e 2 [ i , j ] = m a x 1 ≤ k ≤ n 且 k ≠ i { ( e [ k , j − 1 ] − f 2 ) ⋅ r i j } e_2 [i,j]=max_{1≤k≤n且k≠i} \left\{(e[k,j-1]-f_2) · r_{ij}\right\} e2[i,j]=max1knk̸=i{(e[k,j1]f2)rij}
  综合以上两种情况, e [ i , j ] e[i, j] e[i,j]应当取二者中的较大值,即 e [ i , j ] = m a x { e 1 [ i , j ] , e 2 [ i , j ] } e[i, j] = max\left\{e_1[i, j], e_2[i, j]\right\} e[i,j]=max{e1[i,j],e2[i,j]}。我们还需用一个数组 p [ i , j ] p[i, j] p[i,j]来保存第 j − 1 j-1 j1年选择哪种投资产品。
  从以上分析可以看出,规划最优投资策略问题具有最优子结构。因为求解第 j j j年的最大化收益,依赖于第 j − 1 j-1 j1年的最大化收益。
  
  c.
  在这里插入图片描述
  该算法主要由一个3重循环构成,很容易得出它的时间复杂度为 O ( M n 2 ) O(Mn^2) O(Mn2)。这里的 M M M指的是总的年数,题目中为10年。
  
  d.
  略
  
  本题相关的code链接。
  https://github.com/yangtzhou2012/Introduction_to_Algorithms_3rd/tree/master/Chapter15/Problems/Problem_15-10

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值