1. ホーム
  2. javascript

Javascriptにおけるunshift()とpush()の時間的複雑性

2023-09-18 07:43:27

質問

の違いは何ですか? unshift()push() というメソッドがありますが、時間的な複雑さの違いは何なのでしょうか?

私は push() メソッドは配列の末尾に項目を追加するだけなので O(1) ですが unshift() メソッドでは、他の既存の要素をすべて前方に移動させなければならないので、O(log n) または O(n) になるのではないでしょうか?

どのように解決するのですか?

私の知る限り、JavaScriptの言語仕様はこれらの関数の時間的複雑さを義務付けていません。

確かに配列のようなデータ構造(O(1)ランダムアクセス)をO(1)で実装することは可能です。 pushunshift の演算を行うことができます。 C++の std::deque はその一例です。 C++のdequesを使ってJavascriptの配列を内部で表現するJavascriptの実装では、したがってO(1) pushunshift の操作を行うことができます。

しかし、このような時間制限を保証する必要がある場合、次のように自分でロールバックする必要があります。

http://code.stephenmorley.org/javascript/queues/