このように表されたヒープに n 個の要素を挿入するとします。考慮する必要があるコストには、次の 2 つの異なるソースがあります。
- 基になる配列のサイズ変更を無視した、ヒープ操作のコスト。
- 包括的なヒープ操作を無視して、配列のサイズが変更されます。
(1) のコストは、合計 n 回の操作で O(n log n) です。これは、各ヒープ挿入に O(log n) の時間がかかるためです。
(2) のコストについては、配列のサイズを 2 倍にするために行われる作業は、2 倍になった時点での配列のサイズに正比例することに注意してください。これは、配列をサイズ 1 から 2 倍にするために 1 単位の作業を行うこと、サイズ 2 から配列を 2 倍にするために 2 単位の作業を行うこと、サイズ 4 から配列を 2 倍にするために 4 単位の作業を行うことなどを意味します。行われた作業は
1 + 2 + 4 + 8 + 16 + ... + 2 1 + log n ≤ 4n - 1 = O(n)
この計算では、サイズ n になる前に配列を最大で 1 + log n 回だけ 2 倍にするという事実と、1 + 2 + 4 + 8 + ... + 2 k = 2 k+1 - 1という事実を使用しています。 n回の挿入すべてで、配列を2倍にするO(n)作業を行うことを意味します。
全体として、n 回の操作で行われた作業の合計は O(n log n) であるため、操作ごとの償却コストは O(log n) です。