web-dev-qa-db-ja.com

JavaScriptデータ構造ライブラリ

優先度キュー、任意のキーのマップ、試行、グラフなどの基本的なデータ構造の実装と、それらを操作するいくつかのアルゴリズムを提供するJavaScriptライブラリの推奨をお願いします。

私は主に興味があります:

  • カバーされる機能のセット、
  • ソリューションの柔軟性-これは主にグラフに適用されます。たとえば、提供されているグラフ実装を使用する必要がありますか、
  • 言語の機能的特徴の使用-繰り返しになりますが、柔軟性が増します。
  • 実装のパフォーマンス

JavaScriptを使用して次のデータ構造を実装することが可能であることを認識していることを指摘しておきます。

  • キー値が文字列または数値の場合、マップ
  • セット(マップ実装を使用)、
  • キューは、以下で指摘されているように、一部のブラウザーでは非効率的ですが、

現時点で私が最も関心を持っているのは、優先キュー(通常のキューと混同しないようにする)、入力グラフの形式に関してそれほど煩わしくないグラフ実装です。たとえば、固定名を持ついくつかの具象プロパティにアクセスするのではなく、コールバックを使用してグラフの構造をトラバースできます。

58
julkiewicz

私はクロージャー・ライブラリーを使用することをお勧めします(特にクロージャー・コンパイラーで)。

ここに、データ構造 goog.structs のライブラリがあります。ライブラリには以下が含まれます:

goog.structs.AvlTree
goog.structs.CircularBuffer
goog.structs.Heap
goog.structs.InversionMap
goog.structs.LinkedMap
goog.structs.Map
goog.structs.PriorityQueue
goog.structs.Set

例として、ユニットテストを使用できます: goog.structs.PriorityQueueTest

配列で作業する必要がある場合は、配列lib: goog.array もあります。

コメントに記載されているように、ソースは github.com/google/closure に移動し、ドキュメントの新しい場所は google.github.io/closure-library です。

33
Paweł Szczur

試すことができます Buckets は、以下を含む非常に完全なJavaScriptデータ構造ライブラリです。

  • リンクリスト
  • 辞書
  • マルチ辞書
  • 二分探索木
  • スタック
  • キュー
  • セットする
  • バッグ
  • バイナリヒープ
  • 優先キュー
17
Daniel

任意のキーを使用してマップを支援できます。my jshashtable がこれを実行し、その上に構築されたハッシュセットの実装もあります。

3
Tim Down

おそらく、欲しいもののほとんどは何らかの方法でJavaScriptに組み込まれているか、組み込み機能と組み合わせるのが簡単です(ネイティブJavascriptデータ構造は非常に柔軟です)。あなたは JSClass が好きかもしれません。

言語の機能的な特徴については、 nderscore.js がどこにあるかです。

3
probabilityzero

効率的なキュー

これらがさらに見つかった場合は、 jswiki に追加してください。ありがとう。 :)

3

特にグラフのような構造の場合、graphlibは非常に便利です。

https://github.com/cpettitt/graphlib/wiki/API-Reference

これは非常に単純明快で、私が試した他の実装よりも高速で、基本的な機能、一般的なグラフアルゴリズム、JSONデータエクスポートをすべて備えています。

1
AndreLung

あなたのjavascriptはアプリケーションですか、それともウェブページですか?アプリケーションの場合は、データ構造を Redis に外部委託しないのはなぜですか? nodejsのクライアント があります

Redisは、オープンソースの高度なKey-Valueストアです。キーには文字列、ハッシュ、リスト、セット、ソート済みセットを含めることができるため、データ構造サーバーと呼ばれることがよくあります。

1
Colonel Panic

このスレッドへの訪問者の将来の参照のために、優先キュー、トライ、基本グラフ処理およびその他の実装を提供するカスタムJavaScriptライブラリへのリンクを追加します。チェックアウト dsjslib

1
factotum

data.js

あなたが望むほど機能が豊富だとは思わないが、グラフ、ハッシュ、コレクションが含まれている。

私はこれを拡張できる軽量のスタートを切るでしょう。

それが提供するものに関しては、よく書かれ、効率的で、文書化されています。

0
Raynos