算法导论第17章 摊还分析

摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,从而说明一个操作的平均代价是很低的,即使序列中某一单一操作的代价很高,不涉及改了,但可以保证最坏情况下每个操作的平均时间。

摊还分析中主要的三种方法:1、聚合分析  2、核算法(即记账法) 3、势能法

1、聚合分析:证明对所有的n,一个n个操作的序列最坏情况下花费的总时间为T(n),因此,在最坏情况下,每个操作的平均代价,或称为摊还代价为T(n)/n,这点不同于以下两种方法,以下两种方法,不同的操作有不同的代价。

2、核算法:对不同的操作赋予不同的费用,赋予某些操作的费用可能多于其实际代价,这个费用称为他的摊还代价,当一个操作的摊还代价超出其实际代价时,将差额存进数组结构中的特定对象,存入的差额称为信用,对于后续操中摊还代价小于实际代价的情况,信用可以用来支付差额,因此,可将一个操作的摊还代价分解为其实际代价和信用。不同的操作可能有不同的瘫痪代价。如果用ci表示第i个操作的真实代价,用^ci代表其摊还代价,则对任意n个操作序列,要求:

                    

数据结构中存储的信用恰好等于总摊还代价与总实际代价的差额。数据结构所关联的信用必须一直为非负值。

3、势能法:并不将预付代价表示为数据结构中特定对象的信用,而是表示为“势能”,或"势",将势能释放用来支付未来操作的代价,势能与整个数据机构而不是特定对象相关联。

势函数Φ将每个数据结构Di映射到一个实数Φ(Di),次值即为关联到数据结构Di的势。对一个初始数据结构D0执行n个操作。对每个i = 1, 2, ,.....,n,令ci为第i个操作的实际代价,令Di为在数据结构Di-1上执行第i个操作得到的结果数据结构。第i个操作的摊还代价^ci用势函数Φ定义为:

^ci  = ci + Φ(Di) - Φ(Di-1) 

每个操作的摊还代价等于其实际代价加上次操作引起的势能变化。n个操作的总的平摊代价为:


定义一个Φ势函数,使得Φ(Dn)>= Φ(D0), 则总的平摊代价就是总的实际代价的一个上界。对所有的i,有Φ(Di)>= Φ(D0),可以保证预先支付,Φ(D0)一般为0

如果第i个操作的势差Φ(Di) - Φ(Di-1) > 0 则平摊代价^ci表示对第i个操作多收了非,同时数据结构的势也增加了,如果< 0,则表示平摊代价的不足收费,可以通过减少势来支付该操作的实际代价。不同的势函数,可能产生不同的平摊代价。但他们都是实际代价的上届。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值