一.摊还分析(平摊分析)
1.通过求数据结构的一个操作序列中所执行的所有操作的平均时间来评价操作的代价
2.摊还分析不同于平均情况分析,它不涉及到概率,它只是保证了最坏情况下每个操作的平均性能
3.三种方法:
(1)聚合分析:确定一个n个操作的序列的总代价的上界(最坏情况下的总代价),从而得到每个操作的摊还代价(/n),不能具体地确定某一个操作的摊还代价
(2)核算法(记账法):对不同类型的操作可能赋予不同的摊还代价,并且信用必须非负值
1)赋予操作的平摊代价作为第i步操作的代价,其中有一部分作为一般操作代价,还有一部分可能剩余作为存款用作其他特殊操作
2)分析平摊代价和存款,存款非负
(3)势能法:对不同类型的操作可能赋予不同的摊还代价,
1)定义势能函数,把数据结构集映射为实数,势能不为负
2)分析平摊代价
4. 记账法和势能法
记账法:先给定平摊代价,再分析存款和摊还代价
势能法:已知存款(势能),分析平摊代价
5.总结
(1)平摊分析为数据结构的性能提供了一个简洁的抽象概念,关注聚集行为而不是实时表现,如果根据实时表现,平摊分析毫无用处
(2)通常情况下,三种方法都能用,可以互相转换,但每一种都有特定情况使得他是最简单或最精确
(3)不同的势能函数或记账代价可能产生不同的上界
二.动态表
1.问题描述:为一个表分配一定的内存空间,进行插入和删除操作,若内存不够,则重新分配更大的空间,并将原表对象复制到新空间
2.表扩张的策略:为新表分配两倍于旧表的空间
3.表收缩的策略:允许表的装载因子低于1/2,比如1/4
4.摊还分析: