🎯 什麼情境該想到我
當一個操作「偶爾很貴、多數很便宜」(如動態陣列滿了才擴容),你想算「一連串操作」的整體平均成本時。
⚙️ 怎麼用(三種方法擇一)
攤還分析算的是「一序列操作的總成本 ÷ 操作數」,而非單次最壞。
- 聚合法(Aggregate):直接算 n 個操作的總成本,再除以 n。
- 記帳法(Accounting):對便宜操作「多收費」存起來,用來支付未來昂貴操作。
- 位能法(Potential):定義一個位能函數,把成本變化攤到整個序列。
經典例:動態陣列 push——雖然擴容那次是 O(n),但攤還到每次 push 是 O(1)。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 攤還是「序列平均」不是「機率平均」——它保證的是總量上限,不靠輸入分布假設。
🔗 相關工具
- 工具-時間複雜度分析、工具-儲存引擎B-Tree與LSM-Tree(LSM compaction 的攤還成本)