摊销分析 测量序列中每个操作的平均成本,即使单个操作偶尔会花费更多。它解释了为什么动态数组的 append 是"O(1) 摊销",尽管偶尔会发生 O(n) 的重新调整大小。
动态数组示例
当动态数组满时,它会分配一个新数组(通常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...
