(lecture_05)动态规划(2)

合集下载

动态规划超级详细的讲义

动态规划超级详细的讲义

动态规划入门1(2008-09-20 21:40:51)第一节动态规划基本概念一,动态规划三要素:阶段,状态,决策。

他们的概念到处都是,我就不多说了,我只说说我对他们的理解:如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。

显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。

每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。

下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样没个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态变成固态=_=||)。

每个形态就是一个状态,那从液态变成固态经过了冰冻这一操作,这个操作就是一个决策。

一个状态经过一个决策变成了另外一个状态,这个过程就是状态转移,用来描述状态转移的方程就是状态转移方程。

经过这个例子相信大家对动态规划有所了解了吧。

下面在说说我对动态规划的另外一个理解:用图论知识理解动态规划:把动态规划中的状态抽象成一个点,在有直接关联的状态间连一条有向边,状态转移的代价就是边上的权。

这样就形成了一个有向无环图AOE网(为什么无环呢?往下看)。

对这个图进行拓扑排序,删除一个边后同时出现入度为0的状态在同一阶段。

这样对图求最优路径就是动态规划问题的求解。

二,动态规划的适用范围动态规划用于解决多阶段决策最优化问题,但是不是所有的最优化问题都可以用动态规划解答呢?一般在题目中出现求最优解的问题就要考虑动态规划了,但是否可以用还要满足两个条件:最优子结构(最优化原理)无后效性最优化原理在下面的最短路径问题中有详细的解答;什么是无后效性呢?就是说在状态i求解时用到状态j而状态j就解有用到状态k…..状态N。

动态规划的基本原理和基本应用

动态规划的基本原理和基本应用

动态规划的基本原理和基本应用动态规划(Dynamic Programming)是一种通过将一个问题分解为较小的子问题并存储子问题的解来解决复杂问题的方法。

动态规划的基本原理是通过记忆化或自底向上的迭代方式来求解问题,以减少不必要的重复计算。

它在计算机科学和数学中具有广泛的应用,尤其是在优化、组合数学和操作研究等领域。

1.确定最优子结构:将原问题分解为较小的子问题,并且子问题的最优解能够推导出原问题的最优解。

2.定义状态:确定存储子问题解的状态变量和状态方程。

3.确定边界条件:确定初始子问题的解,也称为边界状态。

4.递推计算:利用状态方程将子问题的解计算出来,并存储在状态变量中。

5.求解最优解:通过遍历状态变量找到最优解。

1.背包问题:背包问题是动态规划的经典应用之一、它有多种变体,其中最基本的是0/1背包问题,即在限定容量的背包中选择物品,使得所选物品的总价值最大。

可以使用动态规划的思想来解决背包问题,确定状态为背包容量和可选物品,递推计算每个状态下的最优解。

2. 最长递增子序列:最长递增子序列(Longest Increasing Subsequence)是一种常见的子序列问题。

给定一个序列,找到其中最长的递增子序列。

可以使用动态规划来解决这个问题,状态可以定义为以第i个元素为结尾的最长递增子序列的长度,并递推计算每个状态的解。

3.矩阵链乘法:矩阵链乘法是一种优化矩阵连乘计算的方法。

给定一系列矩阵,求解它们相乘的最小计算次数。

可以使用动态规划解决矩阵链乘法问题,状态可以定义为矩阵链的起始和结束位置,递推计算每个状态下最小计算次数。

4.最短路径问题:最短路径问题是在有向图或无向图中找到两个节点之间最短路径的问题。

可以使用动态规划解决最短路径问题,状态可以定义为起始节点到一些节点的最短距离,递推计算每个状态的最优解。

动态规划的基本概念与方法

动态规划的基本概念与方法

动态规划的基本概念与方法动态规划(Dynamic Programming,简称DP)是解决一类最优化问题的一种方法,也是算法设计中的重要思想。

动态规划常用于具有重叠子问题和最优子结构性质的问题。

它将问题分解为子问题,并通过求解子问题的最优解来得到原问题的最优解。

动态规划的基本概念是“最优子结构”。

也就是说,一个问题的最优解可以由其子问题的最优解推导出来。

通过分解问题为若干个子问题,可以形成一个递归的求解过程。

为了避免重复计算,动态规划使用一个表格来保存已经计算过的子问题的解,以便后续直接利用。

这个表格也被称为“记忆化表”或“DP表”。

动态规划的基本方法是“状态转移”。

状态转移指的是,通过已求解的子问题的解推导出更大规模子问题的解。

常用的状态转移方程可以通过问题的递推关系定义。

通过定义好状态转移方程,可以通过迭代的方式一步步求解问题的最优解。

在动态规划中,通常需要三个步骤来解决问题。

第一步,定义子问题。

将原问题划分为若干个子问题。

这些子问题通常与原问题具有相同的结构,只是规模更小。

例如,对于计算斐波那契数列的问题,可以定义子问题为计算第n个斐波那契数。

第二步,确定状态。

状态是求解问题所需要的所有变量的集合。

子问题的解需要用到的变量就是状态。

也就是说,状态是问题(解决方案)所需要的信息。

第三步,确定状态转移方程。

状态转移方程通过已求解的子问题的解推导出更大规模子问题的解。

通常情况下,状态转移方程可以通过问题的递推关系确定。

在实际应用中,动态规划常用于求解最优化问题。

最优化问题可以归纳为两类:一类是最大化问题,另一类是最小化问题。

例如,最长递增子序列问题是一个典型的最大化问题,而背包问题是一个典型的最小化问题。

动态规划的优势在于可以解决许多复杂问题,并且具有可行的计算复杂度。

但是,动态规划也有一些限制。

首先,动态规划要求问题具有重叠子问题和最优子结构性质,不是所有问题都能够满足这两个条件。

其次,动态规划需要存储计算过的子问题的解,对于一些问题来说,存储空间可能会非常大。

动态规划讲义

动态规划讲义

第6章动态规划最优化原理1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶段决策问题变换为一系列互相联系的单阶段问题,然后逐个加以解决。

一些静态模型,只要人为地引进“时间”因素,分成时段,就可以转化成多阶段的动态模型,用动态规划方法去处理。

与此同时,他提出了解决这类问题的“最优化原理”(Principle of optimality):上述程序实现方法同样适合于背包问题,最优库存问题等,只是针对具体情况,最优决策表的表示和生成会有所不同。

“一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”。

简言之,一个最优策略的子策略,对于它的初态和终态而言也必是最优的。

这个“最优化原理”如果用数学化一点的语言来描述的话,就是:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的。

最优化原理是动态规划的基础。

任何一个问题,如果失去了这个最优化原理的支持,就不可能用动态规划方法计算。

能采用动态规划求解的问题都需要满足一定的条件:(1)问题中的状态必须满足最优化原理;(2)问题中的状态必须满足无后效性。

所谓的无后效性是指:“下一时刻的状态只与当前状态有关,而和当前状态之前的状态无关,当前的状态是对以往决策的总结”。

问题求解模式动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。

这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。

如图所示。

动态规划的设计都有着一定的模式,一般要经历以下几个步骤:初始状态→│决策1│→│决策2│→…→│决策n│→结束状态(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。

动态规划专题讲义课件

动态规划专题讲义课件

VS
状态转移方程是动态规划中的重要概念,它描述了状态之间的转移关系。在求解问题时,通过状态转移方程可以将一个状态转移到另一个状态,从而逐步求解出问题的最优解。
状态转移方程的建立需要通过对问题进行深入分析,找出状态之间的依赖关系,并建立数学模型。在应用状态转移方程时,需要注意状态的初始状态和终止状态,以及状态转移过程中的约束条件。
02
动态规划的基本概念
最优化原理是动态规划的核心思想,它认为一个问题的最优解可以通过子问题的最优解来构建。在解决复杂问题时,将问题分解为若干个子问题,分别求解子问题的最优解,再利用子问题的最优解来求解原问题的最优解。
最优化原理的应用范围很广,包括计算机科学、运筹学、经济学等领域。通过将问题分解为子问题,可以降低问题的复杂度,提高求解效率。
自顶向下策略
自底向上策略
分支定界法:通过将问题分解为多个分支来解决问题,同时使用界限来排除不可能的解。与动态规划结合,可以更有效地处理具有大量状态和决策的问题。
THANK YOU
感谢各位观看
排班问题
如求解最优的排班方案,使得员工的工作计划合理且满足各种约束条件。
03
递推关系
建立子问题的解之间的递推关系,通过这种关系逐步求解更大规模的问题,直到达到原问题的解。
01
将原问题分解为子问题
将原问题分解为若干个子问题,这些子问题是原问题的较小规模或部分问题的解。
02
存储子问题的解
将已解决的子问题的解存储起来,以便在求解更大规模的问题时重复使用,避免重复计算。
03
动态规划的算法实现
状态空间法是动态规划的基本方法,通过构建状态转移方程来求解最优化问题。
状态转移方程描述了从状态转移至其他状态的过程,通过迭代更新状态变量的值,最终得到最优解。

动态规划求解方法

动态规划求解方法

动态规划求解方法动态规划(Dynamic Programming)是一种常见的求解优化问题的方法,它通过将问题分解成更小的子问题,并保存子问题的解来降低时间复杂度。

动态规划通常使用一个表格来记录子问题的解,然后根据递推关系计算出更大问题的解。

动态规划的求解方法一般包含以下几个步骤:1.定义问题:首先,需要明确要解决的问题是什么。

动态规划通常适用于求解具有最优子结构性质的问题,即原问题的最优解可以通过一系列子问题的最优解得到。

2.确定状态:接下来,需要确定动态规划的状态。

状态是问题中会变化的量,它包含了问题的关键信息。

在动态规划中,状态可以是一个或多个变量。

3.建立转移方程:然后,需要建立问题的转移方程。

转移方程描述了问题状态之间的关系,用来计算子问题的最优解。

转移方程可以通过观察问题的特点或者使用递推关系得到。

4.确定初始条件:接下来,需要确定边界条件或初始条件。

边界条件是问题中的一些特殊情况,它们通常是一些最小子问题的解。

初始条件是指将边界条件中的解赋值给表格中对应的位置。

5.使用递推关系计算:最后,使用递推关系将表格中的其他位置的解计算出来。

通常,可以使用自底向上的方法,从表格的第一个位置开始计算,依次填充整个表格。

动态规划的优点在于它可以将一个复杂的问题分解成多个子问题,然后通过记录子问题的解来减少重复计算。

这样,可以大大提高求解问题的效率。

动态规划通常适用于求解满足最优化原理和无后效性条件的问题。

最优化原理是指问题的最优解具有递归的结构,即解可以通过子问题的最优解得到。

无后效性条件是指问题的当前状态决定了未来的决策,与过去的决策无关。

动态规划在算法设计和实现中有很多经典的应用,例如最长公共子序列问题、0/1背包问题、最短路径问题等。

下面简要介绍其中的两个经典应用。

1.最长公共子序列问题:给定两个字符串s1和s2,求它们的最长公共子序列。

最长公共子序列是指在两个字符串中以相同的顺序出现的最长的子序列。

《动态规划》课件

《动态规划》课件
《动态规划》PPT课件
动态规划(Dynamic Programming)是一种用来解决复杂问题的算法思想。
什么是动态规划
动态规划是一种将问题拆分成子问题并进行最优解比较的算法,常用于求解最优化问题。
问题模型
状态
将问题抽象成能够描述当前情况的状态。
目标
定义问题的目标,通常是最小化或最大化某 个指标。
经典面试题:爬楼梯问题
爬楼梯问题是指给定楼梯的阶数,求解爬到楼顶的不同方式的数量。
经典面试题:硬币找零问题
硬币找零问题是指给定一定面值的硬币和一个金额,找到凑出该金额的最少 硬币数。
经典面试题:最长回文子串问题
最长回文子串问题是指找到给定字符串中最长的回文子串。
实用案例:机器人找出路
机器人找出路是指给定一个迷宫,找到从起点到终点的路径。
决策
根据状态作出选择或决策。
转移方程
根据子问题的最优解推导出整体问题的最优 解。
最优子结构和重叠子问题
1 最优子结构
问题的最优解包含了子问题的最优解。
2 重叠子问题
子问题之间存在重复的计算,可以利用记 忆化存储中间结果来优化。
动态规划三部曲
1
定义状态
明确问题的状导转移方程
国王游戏问题
国王游戏问题是指在一个棋盘上放置国王,使得它们无法互相攻击。
编辑距离问题
编辑距离问题是指计算两个字符串之间转换的最小操作次数,包括插入、删 除和替换操作。
矩阵连乘问题
矩阵连乘问题是指给定一系列矩阵,找到最佳的乘法顺序,使得计算乘法的总次数最小。
最长递增子序列问题
最长递增子序列问题是指找到给定序列中最长的递增子序列的长度。
斐波那契数列问题

大学运筹学经典课件第五章动态规划

大学运筹学经典课件第五章动态规划

生产计划问题的动态规划解法
根据生产阶段和生产量的不同组合,构建动 态规划模型进行求解。
经典案例
多阶段生产问题、批量生产计划问题等。
图像处理与计算机视觉中的应用
图像处理中的动态规划应用
通过动态规划算法对图像进行分割、边缘检测、特征提取等 操作。
计算机视觉中的动态规划应用
在目标跟踪、立体视觉、光流计算等领域,利用动态规划求 解最优路径或策略。
决策的无后效性
在动态规划中,每个阶段的决策只与 当前状态有关,而与过去的状态和决 策无关。
边界条件与状态转移方程
边界条件
动态规划问题的边界条件通常指的是问题的初始状态和终止 状态。
状态转移方程
描述问题状态之间转移关系的方程,通常根据问题的具体性 质建立。通过状态转移方程,可以逐步推导出问题的最优解 。
应用领域
03
适用于具有时序性和阶段性特点的问题,如资源分配、任务调
度、路径规划等。
动态规划与人工智能的融合应用
强化学习
结合动态规划和强化学习算法, 通过智能体与环境交互学习最 优决策策略,实现自适应的动
态规划求解。
深度学习
利用深度学习模型强大的特征 提取和表达能力,对动态规划 中的状态转移和决策规则进行
经典案例
图像分割中的最短路径算法、立体匹配中的动态规划算法等 。
06
动态规划的扩展与前沿研究
随机动态规划
随机动态规划模型
描述随机环境下多阶段决策 问题的数学模型,涉及期望 总收益最大化或期望总成本
最小化。
求解方法
通过引入状态转移概率和决 策规则,将随机动态规划问 题转化为确定性动态规划问 题求解,常用方法有值迭代
自顶向下的求解方法(记忆化搜索)

动态规划讲稿.

动态规划讲稿.
=4 P[0][2] = P[0][1]+h[1][0] = 3+2 = 5 P[2][0] = P[1][0]+v[1][0] = 2+4 = 6
对于阶段3
P[1][2] = min{ P[0][2]+v[0][2], P[1][1]+h[1][1]} = min{5+3, 4+1} = 5
P[0][3] = P[0][2]+h[0][2] = 5+3 = 8 P[2][1] = min{ P[1][1]+v[1][1], P[2][0]+h[2][0]}
• Else
• Begin

S1:=Max(I+1,j)+triangle[I,j]; {沿左斜线向下走}

S2:=Max(I+1,j+1)+triangle[I,j]; {沿右斜线向下走}

If s1>s2 then A[I,j]:=s1 Else A[I,j]:=s2; {选取最优走法}
• Max:=A[I,j];
让我们来换一个思路思考本题,因为本题是要求总和除以4 余数最小的一条路径,我们先撇开最小余数不去管它,而是 将本题改为从点1到点4的所有路径中,求出每条路上权值和 除以4的不同余数的个数。
我们设一个数组can[I,j]表示从点1至点I可不可以求出一 条路径是该路径的权值总和除以4的余数为J,那么又可以 得出一个方程:
• Else
• Begin

S1:=Max(I+1,j)+triangle[I,j]; {沿左斜线向下走}

S2:=Max(I+1,j+1)+triangle[I,j]; {沿右斜线向下走}

动态规划

动态规划



状态 B1 在决策 u2 ( B1 ) 作用下的一个新的状态,记作u2 ( B1 ) C2 . 4、策略 策略是一个按顺序排列的决策组成的集合。由过程的第 k 阶段开始到 终止状态为止的过程,称为问题的后部子过程(或称为 k 子过程)。
返回 结束
动态规划
由每段的决策按照顺序排列组成的决策函数序列
k 1,2,, n.
对于动态规划模型的指标函数,应具有可分离性,并满足递推关系
Vk ,n k [ sk , uk ,Vk 1,n ( sk 1 ,, sn1 )]
在实际问题中指标函数都满足这个性质。 常见的指标函数有下列两种形式 (1)过程和任一子过程的指标是它所包含的各阶段指标的和,即
指标函数的最优值,称为最优值函数,记作 f k (sk ) 它表示从第 k 阶段 的状态 sk 开始到第 n 阶段的终止状态的过程,采取最优策略所得到的 指标函数值。即
f k ( sk ) opt Vk ,n ( sk , uk ,, sn1 )
uk ,,un
返回 结束
动态规划
在不同的问题中,指标函数的含义不同,它可能是距离,利润,成本 ,产品的产量,资源消耗等。 二、动态规划的基本思想和基本方程 结合最短路问题介绍动态规划的基本思想 。最短路线有一个重要特性,
这种递推关系式称为动态规划的基本方程。
返回
结束
动态规划
资源分配问题 某工业部门根据国家计划的安排,将某种高效率的设备 五台,分配给所属的甲、乙、丙三个工厂,各工厂若获得 这种设备之后,可以为国家提供盈利如表2-2所示。
问这五台设备应如何分配给工厂,才能使国家得到的 盈利最大。
返回
结束
动态规划
表2-2

第二节 动态规划

第二节 动态规划

第二节动态规划动态规划是近来发展较快的一种组合算法,是运筹学的一个分支,是解决多阶段决策过程最优化的一种数学方法。

我们可以用它来解决最优路径问题,资源分配问题,生产调度问题,库存问题,装载问题,排序问题,设备更新问题,生产过程最优控制问题等等。

在生产和科学实验当中,有一类活动的过程,可将它分成若干个阶段,在它的每个阶段要作出决策,从而使全局达到最优。

当各个阶段决策确定后,就组成一个决策序列,因而也就决定了整个过程的一条活动路线。

这种把一个过程看作一个前后相关具有链状结构的多阶段过程就称为多阶段决策过程。

所谓动态是指在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前的状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生,故有"动态"的含义。

下面,我们结合最短路径问题来介绍动态规划的基本思想。

)。

从点O到点U,可以按经过的路径,分成七个阶段,分别为:O->AB->CDE->FGHJ->KLMN->PQR->ST->U。

最短路径有一个重要特性:如果点O经过点H到达点U是一条最短路径,则在这条最优路径上由点H 出发到达点U的子路径,是由点H出发到达点U所有可能选择的不同路径的最短路径(证明略)。

根据这一特点,寻找最短路径的时候,可以从最后一段开始,用由后向前逐段递推的方法,求出个点到点U的最短路径。

如若考虑到从点O到点U的最短路径,也是该路径上个点到点的最短路径,令O点到U点的最短距离为dO,A点到U点的最短距离为dA,...,故有:dO=min{2+dA,1+dB},dA=min{3+dC,2+dD},dB=min{2+dD,3+dE},................dQ=min{5+dT,2+dS}.下面按照动态规划的方法,将上例从最后一段开始计算,由后向前逐步递推移至O点。

计算步骤如下:阶段7:从S点或T点到达U点,这时各自只有一种选择,故:dS=2;dT=3;阶段6:出发点有P,Q,R三个,其中Q点到达U点有两种选择,或是经过S点,或是经过T点,故:dQ=min{2+dS,5+dT}=min{4,8}=4;dP=min{1+dS}=min{3}=3;dR=min{3+dT}=min{6}=6;阶段5:出发点有K,L,M,N四个,同理有:dK=min{3+dP}=min{6}=6;dL=min{2+dP,4+dq}=min{5,8}=5;dM=min{2+dQ,4+dR}=min{6,10}=6;dN=min{4+dR}=min{10}=10;阶段4:出发点有F,G,H,J四个,同理有:dF=min{2+dK}=min{8}=8;dG=min{1+dK,3+dL}=min{7,8}=7;dH=min{1+dL,1+d}=min{6,7}=6;dJ=min{3+dM,3+dN}=min{9,13}=9;阶段3:出发点有C,D,E三个,同理有:dC=min{2+dF,2+dG}=min{10,9}=9;dD=min{4+dG,2+dH}=min{11,8}=8;dE=min{1+dH,2+dJ}=min{7,11}=7;阶段2:出发点有A,B两个,同理有:dA=min{3+dC,2+dD}=min{12,10}=10;dB=min{2+dD,3+dE}=min{10,10}=10;阶段1:出发点是O,同理有:dO=min{2+dA,1+dB}=min{12,11}=11.由此得到全过程的最短路径是11,并且可以由以上推导过程反推得最短的路线是:O->B->D->H->L->P->S->U;或O->B->E->H->L->P->S->U。

Lecture2-动态规划

Lecture2-动态规划
13
最优子结构
• DP以自底向上的方式来利用最优子结构。 即首先找到子问题的最优解,解决子问题, 然后找到问题的一个最优解。寻找问题的 一个最优解需要在子问题中做出选择,即 选择将用哪一个来求解问题。问题解的代 价通常是子问题的代价加上选择本身带来 的开销。
14
最优子结构存在与否的例子
• 无权最短路径—存在 • 无权最长简单路径—不存在
19
LCS的重叠子问题
• LCS的重叠子问题:为找出X和Y的一个LCS,可能需要找 出X和Yn-1的一个LCS,以及Xm-1和Y的一个LCS。但这两 个问题都包含找Xm-1和Yn-1的一个LCS的子子问题。原问 题总共包含O(mn)个不同的子问题,所以可以用DP自底向 上来计算解。 ( X m 2 , Yn 2 ) ... ( X , Y ) ( X m 1 , Yn 2 ) ... m 1 n 1 ( X , Y ) ... m 2 n 1 ( X m 1 , Yn 2 ) ... ( X m , Yn ) ( X m , Yn 1 ) ( X m , Yn 2 ) ... ( X , Y ) ... m 1 n 1 ( X m 2 , Yn 1 ) ... ( X , Y ) ( X , Y ) ... m 1 n 1 m 1 n ( X , Y ) ... m2 n
2
装配线调度
• • • • ai,j –装配线上的节点的处理时间 ei – 进入装配线的时间 xi – 离开装配线的时间 ti,j – 在不同装配线之间进行切换的时间
3
装配线调度—分析
• 如何计算最优解
4
装配线调度—一个最优解
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3个物品选一对,… 4个物品选一对?(如何利用前面的知识) n个物品选一对,… 最终问题:n个物品选k对,如何?(n>=2k)

结论?
9 2013-9-23
本题算法(略):

哪位同学做个陈述?
10 2013-9-23
二、HDOJ_1058 Humble Numbers
Problem Description

6 2013-9-23
预备工作:
排序!
7 2013-9-23
第二感觉:
对于一次操作,显然提的物品重量越接 近越好,是不是可以贪心呢? 请思考…

考虑以下情况: 1 4 5 8 什么结论?
8 2013-9-23

详细分析:
从最简单的情况考虑: 2个物品选一对,结论显然


终点
从 V0到各终点的D值 i=1 ∞ 10 ∞ 30 100 V2 i=2 i=3 i=4 i=5
V1 V2 V3 V4 V5 Vj
25 2013-9-23
练习:模拟求最短路径
V5
终点
V0 V4
从 V0到各终点的D值 i=1 ∞ 10 ∞ 30 100 V2 i=2 ∞ 60 30 100 V4 i=3 ∞ 50 90 V3 60 V5 i=4 ∞ i=5 ∞
23 2013-9-23
3)选出下一条最短路径,重复以上 操作,直到求出所有的最短路径。
搞定!!!
说明:求两点之间的最短路径和 求一个点到其余所有点的最短路 径工作量一样。
24 2013-9-23
练习:模拟求最短路径
V5
100 V0 10 V1 5 V2 50 30 10 60 V4 20 V3
A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... shows the first 20 humble numbers. Write a program to find and print the nth element in this sequence
11 2013-9-23
思考:
动态规划的特征体现在什么 地方?
12 2013-9-23
算法分析:典型的DP!

1 ->?
1 ->2=min(1*2,1*3,1*5,1*7)
1 ->2 ->3=min(2*2,1*3,1*5,1*7)
1 ->2 ->3 -> 4 = min(2*2,2*3,1*5,1*7) 1 ->2 ->3 -> 4 ->5= min(3*2,2*3,1*5,1*7)
ACM 程序设计
计算机学院 刘春英
1 2013-9-23
今天,
你 了吗?
2 2013-9-23
每周一星(4):
我爱小芳
3 2013-9-23
第五讲 动态规划(2)
(Dynamic programming)
4 2013-9-23
一、HDOJ_1421 搬寝室
Sample Input 21 13
35 2013-9-23
下次课内容:
贪心算法
36 2013-9-23
Thank you!
See you next week.
37 2013-9-23
20 2013-9-23
求最短路径的迪杰斯特拉算法:
0)准备工作: 设置辅助数组Dist,其中每个分量 Dist[k] 表示:当前所求得的从源点到 其余各顶点 k 的最短路径。
21 2013-9-23
1)在所有从源点出发的弧中选取一条权 值最小的弧,即为第一条最短路径。
G.arcs[v0][ k ] Dist[k ] INFINITY
13 2013-9-23
状态转移方程?

F(n)=min(F(i)*2,F(j)*3,F(k)*5,F(m)*7) (n>i,j,k,m)
特别的: i,j,k,m 只有在本项被选中后才移动
14 2013-9-23
三、经典问题
V5 100 V0 10 V1 5 V2 50 30 10 60 V4
最短路径问题
27 2013-9-23
思考题: 1074_Doing Homework
28 2013-9-23
思考:如何自顶向下的分析?
29 2013-9-23
思考:如何自底向上的计算?
30 2013-9-23
图示说明(假设有3门功课):
1,2,3
1,2
2,3
1,3
1
2
3
31 2013-9-23
图示说明(假设有4门功课):
附录:DP练习题(HDOJ):



1003、1074、1087、1159、1160、1176 1024、1025、1058、1069、1081 1157、1158、1466


1078、1080、1114 1203、1294、1227、1223 1500、1501、1502、1503 1505、1506、1510、2059 最短路径:1142 、1385 、1548
16 2013-9-23
假设,从源点到顶点V1的最短路径 是所有最短路径中长度最短者。
路径长度最短的最短路径的特点:
在这条路径上,必定只含一条弧,并且
这条弧的权值最小。
17 2013-9-23
下一条路径长度次短的最短路径的特 点: • 它只可能有两种情况:或者是直接 从源点到该点(只含一条弧); • 或者是从源点经过顶点v1,再到达 该顶点(由两条弧组成)。
V0和k之间存在弧
V0和k之间不存在弧
其中的最小值即为最短路径的长度。
22 2013-9-23
2)修改其它各顶点的Dist[k]值。 (为什么?)
具体操作:假设求得最短路径的顶点为 u,若 Dist[u]+G.arcs[u][k]<Dist[k] 则将 Dist[k] 改为 Dist[u]+G.arcs[u][k]。
1,2,3,4
1,2,3
1,2,4
1,3,4
2,3,4
1,2
2,3
1,3
1,4
2,4
3,4
1
2
3
4
32 2013-9-23
图示说明(假设有4门功课):
1,2,3,4
1,2,3
1,2,4
1,3,4
2,3,4
1,2
2,3
1,3
1,4
2,4
3,4
1
2
3
4
33 2013-9-23
象不象 数塔?
34 2013-9-23
18 2013-9-23
再下一条路径长度次短的路径特点:
它可能有三种情况:或者是直接从源
点到该点(只含一条弧); 或者是从源点 经过顶点v1,再到达该顶点(由两条弧组 成);或者是从源点经过顶点v2,再到达 该顶点:
它或者是直接从源点到该点(只含一条 弧); 或者是从源点经过已求得最短路 径的顶点,再到达该顶点。
V1
V2
V3
V1 V2 V3 V4 V5 Vj
26 2013-9-23
回顾原图:最短路径问题
V5 100 V0 10 V1 5 V2 50 30 10 60 V4
起 终 点 点
20
V3
最短 路径
路径 长度
10 50 30 60
V0
V1 无 V2 (V0,V2) V3 (V0,V4,V3) V4 (V0,V4) V5 (V0,V4,V3,V5)
最短 路径 路径 长度
10 50 30 60
起 终 点 点
20
V3
V0
V1 无 V2 (V0,V2) V3 (V0,V4,V3) V4 (V0,V4) V5 (V0,V4,V3,V5)
15 2013-9-23
求源点到终点的最短路径的算法
的基本思想::
按照最短路径的长度递增的 次序依次求得源点到其余各点的 最短路径。 …
Sample Output 4
5 2013-9-23
第一感觉:

根据题目的要求,每次提的两个物品重 量差越小越好,是不是每次提的物品一 定是重量相邻的物品呢?
证明:假设四个从小到大的数:a、b、c、 d,只需证明以下表达式成立即可: (a-b)^2+(c-d)^2< (a-c)^2+(b-d)^2 (a-b)^2+(c-d)^2< (a-d)^2+(b-c)^2 ……(略)
相关文档
最新文档