JavaScriptの配列は、アイテムを追加および削除することで非常に簡単に変更できます。ほとんどの言語の配列が固定サイズであり、サイズを変更するには複雑な操作が必要であるという事実をいくらか覆い隠しています。JavaScriptを使用すると、パフォーマンスの低い配列コードを簡単に記述できるようです。これは質問につながります:
配列のパフォーマンスに関して、JavaScriptの実装からどのようなパフォーマンス(時間の複雑さの点で)を期待できますか?
私は、すべての合理的なJavaScript実装には、せいぜい次の大きなOがあると思います。
- アクセス-O(1)
- 追加-O(n)
- プリペンディング-O(n)
- 挿入-O(n)
- 削除-O(n)
- スワッピング-O(1)
new Array(length)
JavaScriptを使用すると、構文を使用して、配列を特定のサイズに事前入力できます。(ボーナス質問:この方法で配列を作成していますかO(1)またはO(n))これは従来の配列に似ており、事前サイズの配列として使用すると、O(1)を追加できます。循環バッファロジックを追加すると、O(1)の先頭に追加できます。動的に拡張する配列を使用する場合、O(log n)は両方の平均的なケースになります。
ここでの私の仮定よりもいくつかのことでより良いパフォーマンスを期待できますか?仕様に何も概説されていないと思いますが、実際には、すべての主要な実装が舞台裏で最適化されたアレイを使用している可能性があります。動的に拡張するアレイやその他のパフォーマンスを向上させるアルゴリズムが機能していますか?
PS
私がこれを不思議に思っている理由は、私がいくつかのソートアルゴリズムを研究しているためです。それらのほとんどは、全体的な大きなOを記述するときに、追加と削除がO(1)操作であると想定しているようです。