摘要: 会计法介绍 为每个操作类型分配一个平摊代价,保证在整个操作序列中平摊代价始终大于实际代价 设计思路: 需要结合数据结构的特点和算法的规律灵活设计 【栈操作】 问题定义:初始为空的栈进行push,pop,multipop操作的代价分析 设计思路: 由操作的代价规律 : push >= pop+mult 阅读全文
posted @ 2020-06-21 15:33 梦里飞雪飘 阅读(448) 评论(0) 推荐(0)
摘要: 1. 聚集法介绍 将整体操作划分成单个的原子操作,用求和的方法计算 总代价 和 平摊代价 注意:求和时运用好整体操作的规律 【栈操作】 问题定义:对初始为空的栈进行 push,pop 和 multipop三种操作 规律: 调用次数满足 pop + multipop <= push , 代价关系满足 阅读全文
posted @ 2020-06-21 15:15 梦里飞雪飘 阅读(307) 评论(0) 推荐(0)
摘要: 写在前面(更新中) 这个系列的内容主要参考了《算法导论(第三版)》、哈工大算法设计与分析课程的内容 主要以理解算法思想、如何设计算法、分析算法为核心,着重点不在算法的实现 主要目的为个人的总结学习,不足之处还望指正 目录 算法设计的数学基础 1. 复杂性函数的阶 2. 递归方程的求解 (1)代入法 阅读全文
posted @ 2020-06-20 15:54 梦里飞雪飘 阅读(922) 评论(3) 推荐(1)
摘要: 公共子序列 和 字符串编辑距离 问题 阅读全文
posted @ 2020-06-20 15:33 梦里飞雪飘 阅读(355) 评论(0) 推荐(0)
摘要: 问题定义: 设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入character,算法应该返回carac。算法的运行时间是怎样的? 可以将问题中的回文看作前后缀匹配的问题,因此这个问题属于特殊的前缀动态规划的问题 1. 如何用子问题表示 dp[ i ][ j ]表示A[ i…j ]的最长 阅读全文
posted @ 2020-06-20 11:59 梦里飞雪飘 阅读(219) 评论(0) 推荐(0)
摘要: 问题一:最大值、最小值问题 输入:数组A[i,…,j] 输出:max和min 法一:遍历两次分别找到max和min,共需2n-2次 法二:归并思路,同时找到max和min,共需3/2n-2次 拓展--线性时间的选择问题(中位数和顺序统计量) 法一:按照快速排序的思路递归查找主元,最坏情况O(n^2) 阅读全文
posted @ 2020-06-19 20:07 梦里飞雪飘 阅读(370) 评论(0) 推荐(0)
摘要: 通过01背包问题和购物问题熟悉了数轴动态规划问题的求解 阅读全文
posted @ 2020-06-19 20:05 梦里飞雪飘 阅读(273) 评论(0) 推荐(0)
摘要: 【矩阵连乘问题】 输入:<A1,A 2,...,An>, Ai是矩阵 输出:计算A1 A2 ... An的最小代价方法 若A是p *q矩阵,B是q *r矩阵,则A *B的代价是O(pqr) 1.如何用子问题表示 dp[ i ][ j ]表示从 Ai 乘到 Aj 的最小代价方法 总问题表示为dp[ 1 阅读全文
posted @ 2020-06-19 18:02 梦里飞雪飘 阅读(122) 评论(0) 推荐(0)
摘要: 动态规划解决数组连续和不连续子问题的优化解 阅读全文
posted @ 2020-06-19 17:28 梦里飞雪飘 阅读(248) 评论(0) 推荐(0)
摘要: 一.Kruskal算法 1. 思路: 每次在图中选择一条最短的且不构成环的边,重复V-1次得到最小生成树 注:不在一个集合表示不连通,保证了不会形成环 2.伪代码实现 3. 时间复杂度分析 边排序:O(ElogE) 建立集合:O(V) 查找集合与合并集合O:O((V+E)logV) 时间复杂度:O( 阅读全文
posted @ 2020-06-19 16:02 梦里飞雪飘 阅读(396) 评论(0) 推荐(0)