http://stackoverflow.com/questions/200384/constant-amortized-time
一定のタイムシェアリング:
償却時間は、簡単な言葉で説明しました:
あなたが百万回の操作を行うと言うならば、あなたは本当に最悪の場合またはその操作のベストケースを気にしないでください - あなたが操作を百万回繰り返すとき、あなたはどのくらいの時間は、合計で撮影されている気に何。
遅さが離れて希釈するための操作は、「たまに」限り、たまには非常に遅いのであればそれは問題ではないことは十分に稀です。「あなたは多くの操作を行う場合は、操作ごとに要した平均時間を」本質的に償却時間を意味します。償却時間が一定である必要はありません。あなたは、線形および対数償却時間または任意の他を持つことができます。
あなたが繰り返し新しいアイテムを追加した動的配列のマット例を見てみましょう。通常、項目を追加する(つまり、一定の時間を要します O(1)
)。しかし、配列がいっぱいになるたびに、あなたは、2倍の領域を割り当てる新しい領域にデータをコピーし、古い領域を解放します。一定の時間で実行割り当て及び解放を仮定すると、この拡大プロセスがかかり O(n)
、nは、アレイの現在の大きさである時間。
だから、あなたが拡大するたびに、最後の拡大の約2倍の時間がかかります。しかし、あなたはまた、それを実行する前に、倍の長待ってました!各拡大のコストは、このように挿入の間に「広がる」ことができます。これは、長期的に、追加の総時間を意味 Mの アレイに項目があり O(m)
、そのため償却時間(挿入あたりすなわち時間)です O(1)
。
ます。https://www.cnblogs.com/diegodu/p/3806437.htmlで再現