平攤分析

平攤分析在計算機科學中 ， 是用於算法分析中的方法 ， 平攤分析常用於分析資料結構 （ 動態的資料結構 ） ， 在使用平攤分析前須知道資料結構各種操作所可能發生的時間 ， 並計算出最壞情況下的操作情況並加以平均 ， 得到操作的平均耗費時間 。 平攤分析只能確保最壞情況性能的每次操作耗費的平均時間 ， 並不能確認平均情況性能 。 一個簡單的例子 ， 一個長度爲n的list ， 在list的最後要加入一筆新的資料此時要花費的操作時間爲O ( n ) ， 此時也是加入新的資料的最糟糕的情況 。 但是 ， 一個 n 個插入的操作序列仍然可以在 O ( n ) 的時間內完成 ， 因爲剩下的插入可以在常數時間內完成 ， 因此n 個插入可以在 O ( n ) 的時間內完成 。 因此每操作的平攤耗費爲O ( n ) / n = O ( 1 ) 。 注意平攤分析與平均時間分析和概率算法的概率分析不同 。 在平均時間分析中 ， 我們平均化所有可能的輸入 ； 在概率算法的概率分析中 ， 我們平均化所有可能的隨機選擇 ； 在平攤分析中 ， 我們平均化一系列操作的耗費 。 平攤分析假設的是最壞情況輸入並且通常不運行隨機選擇 。 平攤分析中幾種常用的技術: 聚合分析決定 n 個操作序列的耗費上界T ( n ) ， 然後計算平均耗費爲 T ( n ) / n 。 記賬方法確定每個操作的耗費 ， 結合它的直接執行時間及它在對運行時中未來操作的影響 。 通常來說 ， 許多短操作增量累加成 「 債 」 ， 而通過減少長操作的次數來 「 償還 」 。 勢能方法類似記賬方法 ， 但通過預先儲蓄 「 勢能 」 而在需要的時候釋放 。