势能分析

势能分析简介

势能分析是一种常用的数据结构时间复杂度分析的手段,我们常常会定义一个势能函数,用于评价数据结构某个状态的势能,把每个操作的时间复杂度加上操作导致的势能变化作为摊还复杂度,如果经过了一系列操作以后,势能不减少,这一系列操作的时间复杂度之和不大于这一系列操作的摊还复杂度之和。

势能分析更加严谨的简介

我们对一个初始数据结构D0执行n个操作,对于每个i=1,2,...,nCi为第i个操作的实际代价,令Di为在数据结构Di1上执行第i个操作后得到的结果数据结构,势能函数Φ将每个数据结构Di映射到一个实数Φ(Di),此值即为关联到数据结构Di的势,第i个操作的摊还代价Ci^=Ci+Φ(Di)Φ(Di1),则n个操作的总摊还代价为i=1nCi^=i=1nCi+Φ(Dn)Φ(D0),如果势能函数满足Φ(Dn)Φ(D0),则总摊还代价i=1nCi^是总实际代价i=1nCi的一个上界

后记

笔者在此不会做势能分析,能进行势能分析的东西太多了,例如splay、pairing heap、fibonacci heap、link cut tree等等,我们将其留在后边的博文中详细介绍。