動的に増加するリスト (C++ ベクトル、Java ArrayList、C# リストなどの連続したメモリ) で動作するアルゴリズムがあります。最近まで、これらのアルゴリズムはリストの途中に新しい値を挿入していました。もちろん、これは通常、非常に遅い操作でした。アイテムが追加されるたびに、それ以降のすべてのアイテムをより高いインデックスにシフトする必要がありました。これをアルゴリズムごとに数回行うと、処理が非常に遅くなります。
新しいアイテムをリストの最後に追加し、後で位置を変えることができることに気づきました。それは一つの選択肢です!
もう 1 つのオプションは、追加するアイテムの数が事前にわかっている場合、その数のアイテムを後ろに追加し、既存のアイテムをシフトしてから、自分で作成した穴の中でアルゴリズムをインプレースで実行することです。欠点は、リストの最後にデフォルト値を追加してから上書きする必要があることです。
これらのオプションを簡単に分析した結果、2 番目のオプションの方が効率的であるという結論に達しました。私の推論は、最初のオプションを使用したローテーションではインプレース スワップが発生するというものでした (一時的なスワップが必要です)。2 番目のオプションに関する私の唯一の懸念は、捨てられるだけのデフォルト値を大量に作成していることです。ほとんどの場合、これらの既定値は null または mem で満たされた値の型になります。
ただし、アルゴリズムに精通している他の人に、どのアプローチがより高速になるか教えてもらいたいと思います。あるいは、私が考えていなかったさらに効率的な解決策があるかもしれません。