-[算法导论]Dynamic Programming总结(没完成)
来源:互联网 发布:数据库定义语言 编辑:程序博客网 时间:2024/06/01 08:55
最近又把算法导论部分的dp看了,感觉看的时候懂,但是遇到新的题目就。。。LeetCode还是赶快刷吧!
综述
第15章首先就说明了dp(主要用于求最优问题)存在的必要性,dp有时(subproblem 有重复)比divide-and-conquer更有效率,主要思路是通过一个
table将重复的计算记录下来,下次再用到的时候直接存取就可以了。
然后给出了dp的4个步骤:
这张主要探讨了以下几个问题:
Rod cutting
问题描述如下
这个问题一看就是个最优问题,实际我们可以不用dp做,就用穷举法,首先这个问题是有最优解结构的,
长度为n分成j和n-j,如果j和n-j都是最优的,则n肯定为最优,其次,最优解的可以用下面的形式来表示
总结出这个递归式以后,可以直接用递归法来求解,
但是这个算法有很多的重复计算,运行时间呈指数级上升,所以这个时候,dp就派上用场了。
常见的dp 有两种模式:top-down with memoization 和 bottom-up method。
首先展示top-down method,
Matrix-chain muliplication
代码很容易看懂,然后就是bottom-up method方法了
最后就是step 4了,怎么恢复原来的路径,通常还需要另外的一个数据结构来存储这种关系。
到这儿就差不多了,这个是最简单的dp情况,因为子问题只有一个。
Matrix-chain multiplication
这个题目在看了上面的可以很简单的总结出来,唯一一个障碍就是step 4,怎样把路径打印出来。
其实难点在于怎么严格证明这些问题。
我们知道Ai*k和Bk*j相乘,需要运算i*k*j次
按照正常分析可以很简单的写出递归式
同时可以用m来记录路径,然后打印出来即可。
打印代码如下
Elements of dynamic programming
这个是dp的理论分析,暂时没有看。Longest common subsequence
这个就是典型的dp问题了,首先首先问题
下面的定理既证明了dp的适用性,又提供了方法。
根据这,可写出递归式
下面就是伪代码了
最后打印出路径
下面的图很形象的展示出了结果
最后还有Improving the code的讨论,主要是当不需要路径时,直接求结果,可以节省空间
还有就是求c时,实际只需要记录前3个变量即可。
Optimal binary search trees
还没完成。。。
0 0
- -[算法导论]Dynamic Programming总结(没完成)
- 算法导论-动态规划(dynamic programming)
- 算法导论15章 动态规划 dynamic programming 复习
- 【算法总结】Dynamic Programming 动态规划
- dynamic programming 题目总结
- 跟着《算法导论》学习——动态规划法(Dynamic programming)
- 算法导论15章 动态规划 dynamic programming 复习第二弹 最长公共子序列
- 动态规划(Dynamic programming)--算法
- 动态规划算法Dynamic Programming
- 【算法】【Dynamic Programming】Unique Paths
- 【算法】【Dynamic Programming】Wiggle Subsequence
- 【算法】【Dynamic Programming】Wildcard Matching
- Leetcode Dynamic Programming 题型总结
- 算法竞赛入门经典 Dynamic Programming
- 算法初探-动态规划(Dynamic Programming)
- 【算法学习】动态规划 Dynamic Programming
- 【算法】【Dynamic Programming】Unique Paths II
- 【算法】【Dynamic Programming】Longest Valid Parentheses
- shell排序
- Python & 数据分析学习笔记[第1篇]
- 线段树入门(1)
- LR中,URL -based script与HTML -based script区别
- jQuery 事件方法
- -[算法导论]Dynamic Programming总结(没完成)
- 线段树入门(2)区间插入求和
- 【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方案。
- Java学习笔记(二)最近使用eclipse时遇到的一些故障
- Uva-1369-Travel
- 手动部署项目时遇到的问题
- Stanford 机器学习练习 Part 1 Linear Regression
- OpenJDK 源码阅读之 Java 字节流输出类的实现
- ThreadLocal的使用方法