(投资策略规划)你所掌握的算法知识帮助你从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}
d⋅rij美元。回报率是有保证的,即未来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
j−1年也必须选择第
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,j−1]−f1)⋅rij。
2) 第
j
j
j年做了投资转移
这种情况下,第
j
−
1
j-1
j−1年可以选择除
i
i
i种之外的其他任意一种投资产品,显然我们要从中选择使得前
j
−
1
j-1
j−1年总收益最大的那种投资产品。故
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]=max1≤k≤n且k̸=i{(e[k,j−1]−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
j−1年选择哪种投资产品。
从以上分析可以看出,规划最优投资策略问题具有最优子结构。因为求解第
j
j
j年的最大化收益,依赖于第
j
−
1
j-1
j−1年的最大化收益。
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
算法导论 — 思考题15-10 投资策略规划
最新推荐文章于 2019-05-19 23:49:06 发布