次のようにsplice()を使用して配列から1つの要素を削除すると、次のようになります。
_arr.splice(i, 1);
_
最悪の場合、これはiの後のすべての要素をシフトするため、O(n)
になりますか?それとも、リンクリストの魔法が下にある一定の時間ですか?
最悪の場合shouldO(n)
(すべての_n-1
_要素を新しい配列にコピー)。
リンクリストは、1回の削除ではO(1)
になります。
興味のある人のために、私はこれを怠惰に作成しました ベンチマーク 。 ( Windows XP/Vistaでは実行しないでください )。 ただし、これからわかるように、かなり一定に見えます(つまり、O(1)
)。したがって、これを非常に高速にするために、舞台裏で何をしているのかは誰にもわかりません。とにかく、実際のsplice
は非常に高速であることに注意してください。
拡張ベンチマーク をV8シェルで直接再実行すると、O(n)
が示唆されます。ただし、コードに影響を与える可能性のあるランタイムを取得するには、巨大な配列サイズが必要であることに注意してください。これは、memmove
を使用して新しい配列を作成するV8コードを見るかのように予想されます。