算法导论学习笔记-第十七章-平摊分析
2010-07-14 23:29
232 查看
第十七章 平摊分析
总结:平摊分析是一种用来分析执行一系列类似操作的算法的工具,它对整个操作序列的真实代价限界。本章介绍了平摊分析的三种方法,分别是聚集分析、记账方法、势能方法。每种方法都通过分析栈操作和二进制计数器增1来举例分析。最后,本章用平摊分析的方法分析了表动态扩张和收缩的代价限界。
1. 聚集分析
证明对所有的n,有n个操作所构成的序列的总时间在最坏情况下为T(n)。因此,每个操作的平均代价为T(n)/n
2. 记账方法
对不同的操作赋予不同的费用,某些操作的费用比它们的实际代价或多或少。一个操作的平摊代价可以看作两部分:实际代价和存款(或被储蓄或被用完)。必须注意,数据结构中的总存款必须始终是非负的。
例如,对于栈操作,每次PUSH的时候支付2元,1元用于支付该PUSH操作的实际代价,还有1元用于支付该元素被POP出来时的代价。而对POP操作不收取任何费用。
3. 势能方法
势能方法的关键就是定义势函数。势函数将每个数据结构Di映射为一个实数Φ(Di),即与数据结构Di相联系的势。Di为对数据结构Di-1作用第i个操作的结果。势函数需要满足Φ(Dn)>= Φ(D0)。
每个操作的平摊代价为其实际代价加上由于该操作所增加的势。n个操作的总平摊代价即为总的实际代价的一个上界。
总结:平摊分析是一种用来分析执行一系列类似操作的算法的工具,它对整个操作序列的真实代价限界。本章介绍了平摊分析的三种方法,分别是聚集分析、记账方法、势能方法。每种方法都通过分析栈操作和二进制计数器增1来举例分析。最后,本章用平摊分析的方法分析了表动态扩张和收缩的代价限界。
1. 聚集分析
证明对所有的n,有n个操作所构成的序列的总时间在最坏情况下为T(n)。因此,每个操作的平均代价为T(n)/n
2. 记账方法
对不同的操作赋予不同的费用,某些操作的费用比它们的实际代价或多或少。一个操作的平摊代价可以看作两部分:实际代价和存款(或被储蓄或被用完)。必须注意,数据结构中的总存款必须始终是非负的。
例如,对于栈操作,每次PUSH的时候支付2元,1元用于支付该PUSH操作的实际代价,还有1元用于支付该元素被POP出来时的代价。而对POP操作不收取任何费用。
3. 势能方法
势能方法的关键就是定义势函数。势函数将每个数据结构Di映射为一个实数Φ(Di),即与数据结构Di相联系的势。Di为对数据结构Di-1作用第i个操作的结果。势函数需要满足Φ(Dn)>= Φ(D0)。
每个操作的平摊代价为其实际代价加上由于该操作所增加的势。n个操作的总平摊代价即为总的实际代价的一个上界。
相关文章推荐
- 平摊分析 (amortized analysis) -算法导论学习笔记
- 算法导论学习笔记(一)排序算法之分治排序
- 算法导论学习笔记——第1部分
- 算法导论学习笔记(4)-3种方法求最大连续子串
- 算法导论学习笔记(一)排序算法之插入排序
- 算法导论学习笔记-第七章-快速排序
- 算法导论学习笔记(3)-习题2.3-7-排序+二分
- 算法导论学习笔记-5.1 雇佣问题
- 算法导论学习笔记——动态规划
- 算法导论学习笔记——第7章 快速排序
- 算法导论学习笔记——第9章 中位数和顺序统计学
- 算法导论学习笔记——散列表
- 算法导论学习笔记——红黑树
- C++ Primer复习和学习笔记 第十七章 异常处理
- 算法导论第三章 学习笔记
- 算法导论第二章学习笔记
- 算法导论学习笔记之四--堆排序
- 算法导论学习笔记-2
- 算法导论学习笔记(一)
- 算法导论学习笔记-第5章 概率分析和随机算法