思考题15-9

首先我们在 LL 表的最前和最后面分别加上 00 和 nn,然后将 LL 表按照升序排列。记 L[i...j]L[i...j] 为 LL 中从下标 ii 到 jj。定义子问题 (i,j)(i,j) 是 S[L[i+1]..L[j]]S[L[i+1]..L[j]] 的一个最优拆分。这时候需要注意的是我们只关心 L[i+1,j−1]L[i+1,j-1] 怎么拆分。举例来说: L=[20,17,14,11,25],n=30L=[20,17,14,11,25],n=30,处理过后就是 L=[0,11,14,17,20,25,30]L=[0,11,14,17,20,25,30]。子问题是 (2,6)(2,6),即拆分 S[12...25]S[12...25],我们关心的是 L[3,5]L[3,5] 怎么拆。
那么现在就有点类似矩阵链乘法问题了。设子问题 (i,j)(i,j) 的拆分地方为 L[k],i<k<jL[k],i。拆分后变成两个子问题:前缀 (i,k)(i,k) 包括 L[i+1,k−1]L[i+1,k-1],后缀 (k,j)(k,j) 包括 L[k+1,j−1]L[k+1,j-1]。定义 cost[i,j]cost[i,j] 是子问题 (i,j)(i,j) 的最优拆分:

cost[i,j]={0mini<k<j{cost[i,k]+cost[k,j]+(L[j]−L[i])}if j - i ≤1if j - i >1

cost[i,j]= \begin{cases} 0& \text{if j - i ≤1}\\ \min \limits_{i1} \end{cases}

BREAK-STRING(n,L)prepend 0 to the start of L and append n to the end of Lm = L.lengthsort L into increasing orderlet cost[1..m,1..m] and break[1..m,1..m] be new tablesfor i = 1 to m - 1cost[i, i]  = cost[i, i + 1] = 0cost[m,m] = 0for len = 3 to mfor i = 1 to m - len + 1j = i + len - 1cost[i, j]  = ∞for k = i + 1 to j - 1if cost[i, k] + cost[k, j]  < cost[i, j] cost[i, j] = cost[i, k] + cost[k, j]break[i, j] = kcost[i, j] = cost[i, j]  + L[j] - L[i] print “The minimum cost of breaking the string is ” cost[1,m]
PRINT-BREAKS(L, break, 1,m)
PRINT-BREAKS(L, break, i, j)if j - i ≥ 2k = break[i, j] print “Break at ” L[k]PRINT-BREAKS(L, break, i, k)PRINT-BREAKS(L, break, k, j)

总的时间复杂度是 Θ(n3)\Theta(n^3)。

思考题15-10

a) 很显然我们把钱投资到回报率最高的那种投资上面会得到更多的回报。

b) 令 f(k,i)f(k,i) 为在第 kk 年我们把钱投资到第 ii 个中的回报,可以得到递归式:

f(k,i)=max{f(k–1,i)–f1,f(k–1),j)–f2}+d∗rik,j≠i and j∈[1,n]

f(k, i) = \max \{f(k – 1, i) – f1, f(k – 1), j) – f2\} + d*r_{ik}, j ≠ i \ and\ j\in [1,n]

c) 给出初始资金 dd 和回报率表 rr。

INVESTMENT-STG(d,r):Let c[0..n] be an array to store the money after ith year.Let j[0..n] be the array that store which investment is selected in ith year.for i = 0 to 10:c[i] = 0;j[i] = 0;for k = 1 to 10:for i = 1 to n:fee = i == j[k - 1] ? f1 : f2;new_sum = c[k - 1] * rik - fee;if new_sum > c[k]:c[k] = new_sum;j[k] = i;
    return c, j;

时间复杂度 O(n)O(n)。

d) 找出一个反例即可。

思考题15-11

定义子问题 (k,s)(k,s) 为在第 kk 个月开始时,在剩余 ss 台机器的情况下满足所有第 k...nk...n 个月的需求。设 ff 为第 kk 月中制造的机器数,因此第 k+1k+1 月开始时剩余的机器数是 s+f−dks+f-d_k。记 cost[k,s]cost[k,s] 是子问题 (k,s)(k,s) 的一个最优计划,第 kk 月中制造的机器数 ff 的上下界分别是:
1) 在上月剩下 ss 台机器时,最少生产 max(dk−s,0)\max (d_k-s,0) 台。记下界 L(k,s)=max(dk−s,0)L(k,s)=\max (d_k-s,0);
2) 在上月剩下 ss 台机器时,最多生产上界 U(k,s)=(∑i=kndi)−sU(k,s)=(\sum \limits_{i=k}^{n}d_i)-s。
最后一个月只需生产满足 L[n,s]L[n,s] 的台数即可。其他月生产的机器是弹性的,满足最优解就行。

cost[k,s]=⎧⎩⎨c⋅max(L(n,s)−m,0)+h(s+L(n,s)−dn)minL(k,s)≤k≤U(k,s){cost[k+1,s+f−dk]+c⋅max(f−m,0)+h(s+f−dk)}if k=nif 0<k<n

cost[k,s]= \begin{cases} c·\max (L(n,s)-m,0)+h(s+L(n,s)-d_n)&\text{if k=n}\\ \min \limits_{L(k,s)≤ k≤U(k,s)}\{cost[k+1,s+f-d_k]+c·\max (f-m,0)+h(s+f-d_k)\} & \text{if 0

INVENTORY-PLANNING(n,m, c,D, d, h)let cost[1..n,0..D] and make[1..n,0..D] be new tables// Compute cost[n, 0..D] and make[n, 0..D].for s = 0 to Df = max(dn - s, 0)cost[n, s] = c·max(f - m, 0) + h(s + f - dn)make[n, s] = f// Compute cost[1..n-1,0..D] and make[1..n - 1,0..D].U = dnfor k = n - 1 downto 1U = U + dkfor s = 0 to Dcost[k, s] = ∞ for f = max(dk - s, 0) to U - sval = cost[k + 1, s + f - dk] +  c·max(f - m, 0) + h(s + f - dk)if val < cost[k, s]cost[k, s] = valmake[k, s] = fprint cost[1,0]PRINT-PLAN(make, n, d)PRINT-PLAN(make, n, d)s = 0for k = 1 to nprint “For month ” k “ manufacture ” make[k, s] “ machines”s = s + make[k, s] - dk

INVENTORY-PLANNING的时空复杂度分别是 O(nD2),O(nD)O(nD^2),O(nD)。

思考题15-12

设球员 pp 的签约费用和 VORP 分别是 p.cost,p.vorpp.cost,p.vorp,同时认为签约费用是以 10 万美元为单位。
由于先签约哪个位置的球员没有影响,我们假设从第一个位置签约到最后一个位置。对每个位置,要么签约一个队员,要么使用现有球员。假设签约位置 1 的球员 pp,我们剩下 X−pX-p 的钱签约其他位置的球员。
定义一个球员签约费用和 VORP 的集合,集合中所有球员签约费用和 VORP 的总和就是要求的。记 (i,x)(i,x) 为子问题:考虑位置为 i,i+1,...,Ni,i+1,...,N 并且总的费用 xx 美元,什么样的集合使得 VORP 最大?一个有效的集合 (i,x)(i,x) 是集合中球员都在 i,i+1,...,Ni,i+1,...,N 位置,每个球员打一个位置,每个位置至多一个球员,总的费用最多 xx 美元。球员最优集合是最大的 VORP 的有效集合 (i,x)(i,x)。子问题具有最优子结构的证明略。
当 i<Ni 时检查两个子问题并选择最优的一个,设 v[i,x]v[i,x] 为 (i,x)(i,x) 中的最大 VORP。S(i,x)S(i,x) 为打位置 ii 且签约费用至多为 xx 的球员集合,得到下列递归表达式,其中空集合返回 −∞-\infty。

v[i,x]=⎧⎩⎨⎪⎪maxp∈S(N,x){p.vorp}max{v[i+1,x],maxp∈S(i,x){p.vorp+v[i+1,x−p.vorp]}}if i=Nif i<N

v[i,x]= \begin{cases} \max \limits_{p\in S(N,x)}\{p.vorp\}&\text{if i=N}\\ \max \{v[i+1,x],\max \limits_{p\in S(i,x)}\{p.vorp+v[i+1,x-p.vorp]\}\} & \text{if i
令 pijp_{ij} 表示在第 ii 位置的第 jj 个球员。

FREE-AGENT-VORP(p,N,P,X)let v[1..N][O..X] and who[1..N][0..X] be new tablesfor x = 0 to Xv[N, x] = −∞who[N, x] = 0for k = 1 to Pif p_Nk.cost ≤ x and p_Nk.vorp > v[N,x]v[N,x] = p_Nk.vorpwho[N,x] = kfor i = N - 1 downto 1for x = 0 to Xv[i, x] = v[i + 1, x]who[i, x] = 0for k = 1 to Pif p_ik.cost ≤ x and v[i + 1, x - p_ik.cost] + p_ik.orp > v[i, x]v[i, x] = v[i + 1, x - p_ik.cost] + p_ik.vorpwho[i, x] = kprint “The maximum value of VORP is ” v[1,X]amt = Xfor i = 1 to Nk = who[i, amt]if k ≠ 0print “sign player ” p_ikamt = amt - p_ik.costprint “The total money spent is ” X - amt

时间和空间复杂度分别是 Θ(NPX),Θ(NX)\Theta(NPX),\Theta(NX)。

CLRS第十五章思考题9-12相关推荐

  1. CLRS第十五章思考题1-4

    思考题15-1 注意到此题是说有向无环图,因此存在动态规划算法计算最长加权简单路径. 设 dis[u]dis[u] 表示从 uu 到 tt 的最长加权简单路径,可以得到如下式子: dis[u]={0m ...

  2. CLRS第十四章思考题

    思考题14-1 a) 设最大重叠点不是重叠区间的任意一个区间的端点.令 pp 是最大重叠区间为 mm 段区间的一个点,但不是重叠区间的任何一个区间的端点.又设 p′p' 是和 mm 段区间重叠的一个端 ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  4. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. 《算法导论3rd第十五章》动态规划

    前言 和分治法一样, 动态规划 (dynamic programming)是通过组合子问题的解而解决整个问题的.分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解而得到原问题 ...

  6. Visual C++ 2008入门经典 第十五章 在窗口中绘图

    /*第十五章 在窗口中绘图 主要内容: 1 Windows为窗口绘图提供的坐标系统 2 设置环境及其必要性 3 程序如何以及在窗口中绘图 4 如何定义鼠标消息的处理程序 5 如何定义自己的形状类 6 ...

  7. 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...

  8. 鸟哥的Linux私房菜(基础篇)- 第二十五章、 Linux 备份策略

    第二十五章. Linux备份策略 最近升级日期:2009/09/18 万一不幸你的 Linux 被黑客入侵了.或是你的 Linux 系统由於硬件关系 (不论是天灾还是人祸) 而挂掉了!这个时候,请问如 ...

  9. 鸟哥的Linux私房菜(基础篇)- 第十五章、磁碟配额(Quota)与进阶文件系统管理

    第十五章.磁碟配额(Quota)与进阶文件系统管理 最近升级日期:2009/09/10 如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quo ...

最新文章

  1. linux下vim编辑器的基本使用
  2. Hyperopt中文文档:FMin
  3. 旷视三维视觉Workshop | 3D组组长与你畅聊三维技术新动态
  4. azkaban mysql参数_azkaban参数详解
  5. php excel 设置常规_php实现的操作excel类详解
  6. oracle中如何加字母,Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字...
  7. GET和POST区别详解
  8. 将网页转换成PDF文件的N种方式
  9. 联发科八核芯片MT6599 起步赢高通,辉达NVIDIA
  10. password unchanged Authentication token manipulation error
  11. 前端下载svg格式图片
  12. 软件测试的类型有那些?都有什么不同?
  13. autojs之酷炫字体效果
  14. 亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(中)
  15. 网站html保存,如何保存网页内容(高级篇)
  16. uni-app中使用uniCloud实现发送短信验证码(开通、配置、使用)
  17. P14-前端基础-CSS属性选择器
  18. 《现实世界的敏捷开发-大型敏捷研发团队》培训课程扩展阅读
  19. 成功,取决于你和什么样的人在一起
  20. 拜伦之女传奇一生:世界第一位计算机程序员

热门文章

  1. kail - 扫描与爆破
  2. LayaAir2.8版本新增3D粒子裁剪、预烘焙骨骼动画、视频贴图等3D功能,支持发布字节(抖音、今日头条)小游戏...
  3. 在线购物系统lab1
  4. SAP B1 成品BOM表展开
  5. myfocus官方网站已经挂掉,相关下载已经从googlecode转到csdn
  6. ISO20000与ISO27001有哪些区别?
  7. windows中MySQL主从配置【第一篇】
  8. pppoe服务器稳定性,架设pppoe服务器 实现欺骗的防御(3)
  9. 2023年系统集成项目管理工程师报考条件及时间安排
  10. 深度学习:GAN优化方法-DCGAN案例