[解決済み] Javascript ES6 コレクションの計算/時間複雑性
質問
ES6仕様のキー付きコレクション(Set、Map、WeakSet、WeakMap)には、どのような時間複雑性(big-O記法)がありますか?
私の予想、そしてほとんどの開発者の予想では、仕様と実装が
広く受け入れられている
性能の良いアルゴリズムを使用することであり、その場合
Set.prototype.has
,
add
と
delete
は平均的な場合、すべてO(1)になる。についても同様に
Map
と
Weak–
と同等です。
実装の時間的複雑さが義務付けられたかどうかは、私にはまったくわかりません。 ECMAScript 2015 言語仕様 - 第 6 版 - 23.2 セットオブジェクト .
私が誤解していなければ (誤解している可能性も大いにありますが)、ECMA の仕様では、実装 (たとえば
Set.prototype.has
など) は線形時間 (
O(n)
) アルゴリズムを使用することです。より高性能なアルゴリズムが仕様で義務付けられていない、あるいは許可されていないのは非常に驚くべきことであり、なぜそうなのかの説明に非常に興味があります。
どのように解決するのですか?
右から という段落があり、その にリンクされています。
<ブロッククオートセットオブジェクトは、平均してコレクション内の要素数に対してサブリニアなアクセス時間を提供する [メカニズム] を用いて実装されなければならない。
にも同じ文章があります。 地図 , 弱いマップ と 弱いセット .
ECMAの仕様では、実装(Set.prototype.hasなど)はリニアタイム(linear time)を使うことが義務付けられているようですね。
O(n)
) アルゴリズムを使用することを義務付けているようです。
いいえ。
<ブロッククオート
この中で使われているデータ構造
Set
オブジェクトの仕様は、セットオブジェクトの要求される観察可能なセマンティクスを記述することのみを目的としています。実行可能な実装モデルであることは意図していません。
観測可能なセマンティクスは、ほとんどが予測可能な反復順序に関連するものです(これは、まだ 効率的かつ高速に実装できる ). 実装では、ハッシュ テーブルまたは一定のアクセスを持つ同様のものを使用することが仕様で期待されていますが、(対数のアクセス複雑度を持つ) 木も同様に許可されています。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] ECMAScriptとは?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?