证明求最短路径问题具有最优子结构(动态规划)
算法导论218页说了很多来说明最长路径问题不能用动态规划算法,最短路径可以。在证明最短路径子问题无关时候应该是默认承认了最短路径的最优子结构的。可是证明最优子结构需要用到复制粘贴法,在用复制粘贴法的时候又不免会因为子问题不是无关的从而不能复制粘贴,所以不能证明最优子结构,这样的话,那段用最优子结构证明子问题无关看得我逻辑有点乱。。。
当然也可能是没仔细看,对书上表达的逻辑理解有误,闲话不多说,我还是用自己的逻辑来理解吧,也能够严谨证明。
我断言最短路径问题满足最优子结构,最长路径不满足,下面证明。
1.证明:最短路径问题满足最优子结构。
设 是从顶点u到顶点v的最短路径, w是路径内部异于u和v的任一点,推断
和
也分别是从u到w和从w到v的最短路径。
下面用反证法证明上面的推断成立。
1) 若存在路径比
更短,并且
和
无关,即他们不含有除了w之外的公共点。则利用复制粘贴法用
代替
,这样从u到v就存在更短的路径,这与
是u到v的最短路径这一假设矛盾,所以从u到w的所有和
无关的路径中,
最短
2) 若存在路径比
更短,并且
和
有关,设存在公共点x,这时候不能用复制粘贴将
代替
因为最短路径不允许存在环。但是可以将
分解为
和
,
分解为
和
,
=
+
由于比
更短,与
是最短路径矛盾。所以从w到v的所有和
有关的路径中,
最短。
综合1)和2)可知是子问题u到w的最短路径。对称的可证明
也是顶点w到v的最短路径。所以最短路径问题满足最优子结构。
2.说明为什么最长子问题不满足最优子结构。
类似于最短路径的例子,在证明步骤2)中,可以假设存在路径比
更长,并且
和
有关,即存在公共点x。因为最长路径不能有环,所以
不能代替
使得
更长,也不能像证明最短路径那样分解。所以没法通过反证法得出存在从u到v的更长路径的矛盾结果,所以假设没法推翻,
不一定是子问题中最长路径。因此不满足最优子结构
证明求最短路径问题具有最优子结构(动态规划)相关推荐
- java 动态规划求最短路径_使用分支界定和动态规划解决最短路径问题(原)
算法的思想: 分析题目要求,我们可以得知:算法要实现找到一条花费在1500元以下的最短的路径.其中这里面涉及两个变量,一个是路径的长度,要求最短.一个是花费,要求不大于1500元.基于这两个变量的不同 ...
- The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))
思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- python用动态规划求最短路径_动态规划之最短路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1], ...
- “chaos”的算法--之Floyd算法详解(求最短路径)
倘若我们要在计算机上建立一个交通咨询系统则可以采用图的结构来表示实际的交通网络.其实现最基本的功能,求出任意两点间的最短路径, 求最短路径的经典方法有很多种,最常用的便是迪杰斯特拉算法和佛洛依德(Fl ...
- 最优子结构(Optimal Substructure)
最优子结构的存在是应用动态规划的前提(或者说必要条件),由此可以避免重复计算: 1. 图算法 最短路径的子路径也一定是最短的: 简单地反证,如果最短路径的中间两点,之间的路径不是最短路径的话,那么一定 ...
- 【README3】动态规划之“找零钱”说明最优子结构怎么解决
接上文:[README2]动态规划之斐波那契数列说明重叠子问题如何解决 文章目录 找零钱问题说明最优子结构 (1)何为最优子结构 (2)状态转移方程 暴力解法 (3)备忘录解决重叠子问题 (4)迭代解 ...
- 使用A*算法求最短路径
图论中最短路径的求解之A*算法实现 代码链接 利用A*算法找到从A城市到B城市的最短路径,以及代价,其中A *算法中的h也就是从当前点到目标点的距离已经给出.程序要有通用性,即其中城市A.B可以为下图 ...
- 弗洛伊德算法(求最短路径)
弗洛伊德算法(求最短路径) 在一个加权图中,如果想找到各个顶点之间的最短路径,可以考虑使用弗洛伊德算法. 弗洛伊德算法既适用于无向加权图,也适用于有向加权图.使用弗洛伊德算法查找最短路径时,只允许环路 ...
最新文章
- SQL的基本数据类型
- 赛码浪潮笔试题库软件实施岗位_赛码 -HRTechChina中国人力资源科技-向上的力量!...
- 提取Windows用户密钥文件cachedump
- 针对智能车声标组的声音定位方案研究
- Java学习之数据类型
- 金蝶K3cloud问题单排查
- 【Tools】Ubuntu18.04破解root密码
- python实现杨辉三角形博客园_Python实现杨辉三角
- php抽象类的构造函数,抽象类的构造函数
- 选择 Veeam ONE v10 的其他三大原因!
- UI组件-UIPickerView
- Python机器学习 使用sklearn构建决策树复习
- 乌班图系统修改服务器时间的命令,ubuntu 修改系统时间无效
- Linked server的一个问题
- Python学习笔记(六)——查询天气脚本
- 游戏后台管理工具帮助文档
- nginx日志json化后问题(\x22)解决
- HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)...
- 机器学习——支持向量机(SVM)之超平面、间隔与支持向量
- Prometheus客户端节点监控node_exporter
热门文章
- 《JSP程序设计》报告
- BZOJ:3441 乌鸦喝水
- 微信小程序---验证码倒计时
- C++实现matlab中的interp1和interp2插值
- LRUCache算法
- win10 修复打印机服务器,Windows Update修复了打印机错误(win10/win7)
- 手把手教你制作一目了然的可视化地图
- Cglib入门到使用
- ch.ethz.ssh2._MindTerm SSH客户端3.4版已发布
- CS3825EO 2X25W D类功放芯片 耐压5V-26V 可替换AD52068