用核算法进行摊还分析时,我们对不同操作赋予不同费用,赋予某些操作的费用可能多于或少于其实际代价。我们将赋予一个操作的费用称为它的摊还代价。当一个操作的摊还代价超出其实际代价时,我们将正差额存入数据结构中的特定对象,存入的正差额称为信用。对于后续操作中摊还分析小于实际代价的情况,信用可以用来支付负差额。
摊还分析,即均摊法,用于评估一系列数据结构操作的平均代价,衡量某个操作看似高成本但总体成本相对较低的情况。该方法形象地将高代价操作的“负担”均摊至其他操作中,关注均摊后的平均代价。常见的摊还分析技术有聚合分析、核算法和势能法。聚合分析中,通过证明公式表示的总时间复杂度,得出每个操作的平均...
当某个操作的摊还开销小于其实际开销,我们计算亏欠差额(difference),可以用信用来支付亏欠差额。也就是每个操作的摊还开销可以被分解为实际开销和信用(存入的或者用掉的)。 评:核算法把摊还分析模拟成记账了,amortized 翻译成摊还确实比较合适。信用是不需要提供物资保证,不立即支付现金,而凭信任所进行的,如信用贷款和...
也可以使用势能法来分析。我们要定义一个势函数 [公式] ,在扩张之后其值为0,而表满时其值为表的规模,这样就可以用势能来支付扩张的代价。势函数定义为[公式] 可以满足上述要求,并且由于转载因子始终大于等于 [公式] ,势函数始终为非负数,因此摊还代价是实际代价的一个上界。为了分析第[公式] ...
也可以使用势能法来分析。我们要定义一个势函数\Phi,在扩张之后其值为0,而表满时其值为表的规模,这样就可以用势能来支付扩张的代价。 势函数定义为\Phi(T)=2*T.num-T.size可以满足上述要求,并且由于转载因子始终大于等于1/2,势函数始终为非负数,因此摊还代价是实际代价的一个上界。
即用\Phi' 表示的摊还开销与用 \Phi 表示的摊还开销相同。 16.3-2 用势能法的重做练习 16.1-3。 解答: 对应第三版 17.3-2。 定义势函数 \Phi 为: \Phi(D_i)= \left\{ \begin{aligned} &0&&i=0\\ &-2^{\lfloor\lg i\rfloor+1}+2i&&i>0\end{aligned}\right. 对于所有 i, \Phi(D_i...