その中で最も効率的なグラフデータ構造のPython?[定休日]
-
08-06-2019 - |
質問
僕ができるソフトイーサ社としては初めての大型(10^7ノード)グラフィストリビュータ。のデータに対応する各ノード/端が低ください"と言っていたら、少数の文字列です。その中で最も効率的な利用 メモリ速度, できるはるか?
A dictのdictsはより柔軟、かつ簡単に実装し直感的に予想するリストのリストになります。リストオプションも必要あるいはデータの構造をdictsえるようなものを並べ替え:
graph[I][J]["Property"]="value"
んのでしょうか。
あり、すべてのビットをより明確にしたいとおもいる。この特定のケースでは味でのランダムアクセスの検索を行うのかについて
荷重のデータをメモリな大きな問題です。これを行います。は、時間のかかる部分のノードがその内容を抽出することも可能で情報を計測する指標ん。
思考の各ノードのテキストフォーマットの特性はすべてのノードで同じだと思われるキャリーの架?いったい誰かいて直接経験の類似例なります。そのグラフは、最も一般的に抽象化にCS.
解決
う強く提唱す NetworkX.このバトルは戦争馬のツールでも研究とタイプする必要があるときに、解析ネットワークに基づくデータです。って操作グラフ100番手双糸の端に問題なく、ノートに記録していました。その豊富な機能と非常に使いやすいです。自分自身を見つけるでしょう心よりのお手元ではなく、内容を裏付けの実装です。
例 Erdős-Rényi ランダムグラフ生成と解析
"""
Create an G{n,m} random graph with n nodes and m edges
and report some properties.
This graph is sometimes called the Erd##[m~Qs-Rényi graph
but is different from G{n,p} or binomial_graph which is also
sometimes called the Erd##[m~Qs-Rényi graph.
"""
__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
__credits__ = """"""
# Copyright (C) 2004-2006 by
# Aric Hagberg
# Dan Schult
# Pieter Swart
# Distributed under the terms of the GNU Lesser General Public License
# http://www.gnu.org/copyleft/lesser.html
from networkx import *
import sys
n=10 # 10 nodes
m=20 # 20 edges
G=gnm_random_graph(n,m)
# some properties
print "node degree clustering"
for v in nodes(G):
print v,degree(G,v),clustering(G,v)
# print the adjacency list to terminal
write_adjlist(G,sys.stdout)
可視化にも素直なものです:
より可視化: http://jonschull.blogspot.com/2008/08/graph-visualization.html
他のヒント
この問題はかなり古いと思いることが有益であると思いますも自分のpythonモジュールのためのグラフの操作という グラフツール.で非常に効率的に、データ構造とアルゴリズムが実施したC++テンプレートのmetaprogramingの向上のグラフは図書館があります。そのため、その性能(メモリ使用量およびランタイム)に匹敵する純粋なC++図書館、桁より典型的なpythonコードを犠牲にせずに使用することができます使っても自分自身が常に仕事を非常に大きい。
既述のように、NetworkXも、他のオプション igraph.両モジュールはしてもいかない場合は、すべての解析ツールだが、両方のライブラリに日常的に利用されている巨大なネットワーク
辞書も含まれている可能性があオーバーヘッドによって実際に実装されます。ハッシュテーブルは通常るものが含まれている素数のノードをかもしれまでのみ利用カップルのノード。
審査によりごとえば、"プロパティ"うすきのクラスアプローチのレベル不動産?または、名前の特性を大きく変化からノードとノード?
僕が何を"効率的"な手段によってたくさんのことのように:
- 速度アップデート(挿入、更新、削除)
- 速度のランダムアクセス検索
- 速逐次検索
- メモリ使用
と思うの探検に出かけることができるデータ構造とスピーディンは一般的に消費するメモリーのように遅い。これだけではない場合もデータ構造であるという。
辞書ですが、使いやすく、使いなが比較的均一で高速アクセス、その使用によりメモリにより、提案するリストが表示されます。リストには多多より多く含まれている架を挿入する時のデータがとても早いことが気に入っていない限り、preallocate Xノードは、再利用ます。
私の提案は、一般には、うだけの利用方法と思われるのも当然で、その"ストレステスト"のシステムに加え、多くのデータも合うかどうかを確認することが課題になっている。
おも検討を加え抽象の層をシステムのような変更をプログラミングインターフェースの場合その後変更が必要な内部データ構造です。
私の理解ではランダムアクセスは一定の時間にもPythonのdicts、リストの違いは、できるだけでなくランダムアクセスの整数を指標とのリストが表示されます。いと仮定する必要のあるルックアップノードによるラベル、たいて辞のdicts.
しかし、性能面では、荷重がメモリにはならない場合がありますの問題は、そのまま利用くだ後入れ替えるディスクには、キの性能をもPythonの高効率dicts.ようにしていメモリ使用量が減ることです。また、RAMは驚くほど安いの右;このようなことがいえるでしょう多くありませんしない理由として少なくとも4GB.
ただアドバイスをメモリ使用量が減り、一部の情報の種類についての情報だけで追跡のための各ノードです。
の作成クラスに基づく構造になればより架空の辞に基づく構造、pythonにおける授業を実際に利用しdictsいを実施しています。
間違いなNetworkXのデータ構造今までのためのグラフで表示します。で電力会社のようにヘルパー機能,データ構造とアルゴリズム,ランダム配列、発電機のデコレータ,Cuthill-Mckee注文コンテキスト管理者
NetworkXくに位置するこのwowrsのためのグラフⅱ、multigraphs.できグラフと複数の方法:隣接リストで複数行隣接リスト EdgeリストGEXF,互.で漬けGraphML、JSON、SparseGraph6。
でimplimentationの様々なradimadeアルゴリズムについて:近似主双対内ン、境界、中心性,クリーク、クラスタリング、着色、部品、接続サイクル問のグラフでは、 距離対策を支配し、オイラー,同型、リンクを分析、予測、マッチング、最小全域木豊かなクラブ、最短経路のフォーカストラバーサル,ツリーです。