ならし解析(amortized analysis) は、個々の操作がときに非常に高コストになる場合でも、一連の操作にわたる1操作あたりの平均コストを測定する手法です。これにより、ときおりO(n)のリサイズが発生するにもかかわらず、動的配列の append が「ならしO(1)」である理由を説明できます。
動的配列の例
動的配列がいっぱいになると、新しい配列(通常は 2倍)を確保してすべての要素をコピーします。これはO(n)の処理です。しかし容量が 倍々 になるため、高コストなコピーは指数関数的に稀になります。
text
Appending into a doubling array (cap shown):
ops: 1 2 3 4 5 6 7 8 9
cap: 1 2 4 4 8 8 8 8 16
copy: * * * * * <- copies at 1,2,4,8,16...
