2016-10-27 10 views
6

私は非常に疎な非常に大きなネットワークのデータを持っています。私は、2つのノードが接続されているかどうかにかかわらず、格納する最もメモリ効率的な方法と、最も簡単にアクセスする方法が何であるか疑問に思っていました。Juliaで非常に疎なネットワークマトリックスを定義する最も効率的な方法は何ですか?

明らかにN個のノードでは、N * N行列を維持することは、格納する空間の面で効率的ではありません。だから私は多分以下のように隣接リストを維持する考え:

Array(Vector{Int64}, N_tmp) 

N_tmp < = N、多くのノードがすべての接続を持っていないかもしれないと。

メモリやアクセスの面で優れた方法やパッケージがあるかどうか教えてください。

+1

juliaにbuild-in'sparse() '関数があります。あなたは[それ](http://docs.julialang.org/en/release-0.5/stdlib/arrays/#sparse-vectors-and-matrices)を試しましたか? – zwlayer

+0

私はそれを認識していますが、私は他のデータ構造ではうまくいくと考えています。 –

答えて

8

LightGraphs.jlでは、隣接リスト(基本的にベクトルのベクトル)を使用して各ノードの近隣ノードを格納します。これにより、大規模なスパースグラフのメモリ使用率が非常に良くなり、商品ハードウェア上の何億ものノードにスケールアップすることができ、ほとんどのグラフ操作のネイティブの疎行列データ構造に勝る高速アクセスを提供します。

LightGraphsがお客様のニーズを直接満たすかどうかを検討する場合があります。

追加情報を編集:私たちは隣人のソートされたリストを保存します。これにより、エッジ作成時のパフォーマンスが向上しますが、後続の検索を高速化できます。

関連する問題