首页 >
动态规划
✍ dations ◷ 2025-10-06 17:23:57 #动态规划
动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构(英语:Optimal substructure)性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。背包问题作为NP完全问题,暂时不存在多项式时间算法。动态规划属于背包问题求解最优解的可行方法之一。此外,求解背包问题最优解还有搜索法等,近似解还有贪心法等,分数背包问题有最优贪心解等。
背包问题具有最优子结构和重叠子问题。动态规划一般用于求解背包问题中的整数背包问题(即每种物品所选的个数必须是整数)。
解整数背包问题:
设有
n
{displaystyle n}
件物品,每件价值记为
P
i
{displaystyle P_{i}}
,每件体积记为
V
i
{displaystyle V_{i}}
,用一个最大容积为
V
max
{displaystyle V_{text{max}}}
的背包,求装入物品的最大价值。
用一个数组
f
[
i
,
v
]
{displaystyle f}
表示取
i
{displaystyle i}
件商品填充一个容积为v的背包的最大价值,显然问题的解就是
f
[
n
,
V
max
]
{displaystyle f}
。f
[
i
,
v
]
=
{
f
[
i
−
1
,
v
]
,
v
<
V
i
max
{
f
[
i
−
1
,
v
]
,
f
[
i
−
1
,
v
−
V
i
]
+
P
i
}
,
v
≥
V
i
0
,
i
v
=
0
{displaystyle f={begin{cases}f,v<V_{i}\max{f,f+P_{i}},vgeq V_{i}\0,iv=0\end{cases}}}对于特例01背包问题(即每件物品最多放1件,否则不放入)的问题,状态转移方程:f
[
i
,
v
]
=
{
f
[
i
−
1
,
v
]
,
v
<
V
i
max
{
f
[
i
−
1
,
v
]
,
f
[
i
−
1
,
v
−
V
i
]
+
P
i
}
,
v
≥
V
i
0
,
i
v
=
0
{displaystyle f={begin{cases}f,v<V_{i}\max{f,f+P_{i}},vgeq V_{i}\0,iv=0\end{cases}}}参考Pascal代码参考C++代码(不含include和数组声明)
相关
- 诺贝尔生理学或医学奖诺贝尔生理学或医学奖(瑞典语:Nobelpriset i fysiologi eller medicin),通常合称诺贝尔生理医学奖,由诺贝尔基金会管理,该奖项每年颁发一次,用于表彰在生理学或医学领域作出重要发
- 相关在概率论和统计学中,相关(Correlation),显示两个随机变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。在这个广义的定义下,有许
- 鼻冲洗鼻冲洗(英语:Nasal irrigation),又称鼻腔冲洗、鼻窦浇灌、鼻内冲洗、洗鼻、鼻窦盥洗,是清洁及稀释鼻腔内的过敏原、鼻涕、干掉的鼻涕及脏污的一种方法,可以缓解鼻塞、过敏性鼻炎、
- 牙周病牙周炎又称牙周病 (Periodontal disease),是牙周组织的疾病。侵犯牙龈、牙周、牙周膜、牙周韧带及牙槽骨等组织的慢性炎症。常见的慢性牙周病一般可分为牙龈炎和牙周炎,这两种
- 电磁相互作用电磁力(英语:electromagnetic force)是处于电场、磁场或电磁场的带电粒子所受到的作用力。大自然的四种基本力中,电磁力是其中一种,其它三种是强作用力、弱作用力、引力。光子是
- 法利斯克语法利斯克语(拉丁语:Lingua Falerica;又称:法利希语)是古代法利希人的一种已经灭亡的语言。它与拉丁语一同构成了拉丁-法利希语支。 法利斯科语虽然逐渐充满拉丁语词,但至少存在至
- 离子通道闸门离子通道(英语:Ion channel)是一种膜蛋白,它通过允许某种特定类型的离子依靠电化学梯度穿过该通道,来帮助细胞建立和控制质膜间的微弱电压压差(见动作电位)。这些离子通道存在于所
- 首过效应首渡效应或首关效应(英语:First pass effect)是指口服药物在消化道吸收后,首先进入肝门静脉系统;部分药物在通过肠黏膜和肝脏时,可能被代谢失去活性,从而使进入循环的药量减少,药效
- 扩张性心肌病扩张性心肌病(英语:Dilated cardiomyopathy、簡稱DCM),也称充血性心肌病,表现为心脏功能减弱,各心腔扩大,不能充分泵血。心脏功能的减弱也会影响肺、肝和其它器官。扩张性心肌病是
- 德奥合并德奥合并(德语:Anschluss ,意指联合或政治联盟,也称为Anschluss Österreichs;同样指德奥合并),是1938年3月11日纳粹德国与奥地利第一共和国统一,组成大德意志的事件。一个历史渊源