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