リストへの変更のリストがあります-追加と削除。リストは非常に大きくなる可能性があります。たとえば、10,000 アイテムです。
変更後のリストの状態を知りたい 9'000.
リストを最初から9'000に変更するまで歩くことができました。それは私には少し長すぎるようです。
アイテムのリストを保持し、アイテムが追加されたときと削除されたときに記録し、このリストをたどって、特定の変更でリストに何があるかを確認できます。Adds と Deletes の可能性が同じである場合、実行する必要があるリスト要素の数は半分になります...
しかし、Big O 表記法では、問題のサイズを半分にしても効率が良くなることはありません (私の理解が正しければ)。
100 回目または 1000 回目の変更ごとにリストの状態をキャッシュすることもできますが、繰り返しになりますが、アイテムの数を 'n' で割っても効率が良くならないということです。
では、これを行う効率的な方法は何ですか?これを行う効率的な方法はありますか?
詳細: 具体的には、カスタム アロケーターでのメモリ割り当て/割り当て解除を追跡しています。各割り当て/解放は、リスト内のイベントです。各割り当てには一意の ID があります。(例) 9'000 イベントの後に現在割り当てられているものを知りたいです。
私の最初のアイデアは、IDごとに、割り当てられたイベントと割り当て解除されたイベントを保存することでした。次に、割り当てイベントが 9000 より大きい最初の割り当てまで、このリストをたどります。
私はマイク F が指摘した点が好きです - 最も近い 100 番目のアイテムから歩くのは一定の時間です...