2016-09-02 5 views
1

で動的にデータ構造をグラフにノードとエッジを追加します。は、以下のように、私は通常MATLABでグラフを作成Matlabの

これは、あらかじめ作成したグラフを比喩的に作成して、そのグラフを表す隣接行列を作成する必要がある場合に非常にうまくいきます。しかし、今私は別の種類の問題があります。グラフを動的にゼロから作成する必要があります。私はノードの束、例えば500ノードを持っています。今、私はこれらの500ノードをループする必要があり、特定の条件が満たされれば、私はいくつかのノード、つまりグラフの構造に200を置くでしょう。それから私は200ノードのこのプールのノードの異なるペアを介してループを実行し、特定の条件が満たされれば、私はエッジを追加します。

私はMatlabで作業しています.1つの方法では、サイズ500x500の隣接行列を初期化することしかできませんでした。そして、基準を通過するもののエッジを追加するだけです。これは望ましくない。私は自分のグラフ構造に500点を含めたくありません。

基本的に、私はMatlabでこれを行いたいと思います。研究論文の疑似コードでは、

Add vertex v0 to graph G. 

私はこれをどのように実装できますか?その後、

そして、そこエッジがグラフ(v0,v1)で既にあり、あなたが言われた場合、後の擬似コードは

Add edge (v0,v1) to graph G. 

そして最後に指示します:

Delete edge (v0,v1) % Not asking you to delete the nodes. 
Add node v. 
Add edges (v0,v) and (v,v1) 

私は効率的にこれらの手順を実行したいです。グラフを動的に作成できるようにしたい。私は巨大な隣接行列を作成し、その中に辺を指定したくありません。私は必要に応じてグラフを段階的に作成したいと思っています。これがMatlabで行えるのであれば教えてください。そうでなければ私はPythonにもオープンしています。

+1

pythonの場合、networkxがあります。 Matlabには、効率的な更新をサポートするグラフライブラリが必要です。しかし、最も効率的な内部データ構造は、常に使用統計に依存します。 (私はこれをしないと非常に良い理由があることを除いて、既に既存のライブラリに固執しています;これを効率的な方法で疎行列で手動で行うことは簡単ではありません;スパース型データ構造のなかには、 – sascha

答えて

0

MATLABのnew-ish クラスを調べてみましたか?これはR2015bで導入され、これらのステップを効率的に実行するための方法があります。具体的には、addnodeaddedgermedgeなどです。オブジェクトから隣接行列を抽出することもできます。adjacency

http://www.mathworks.com/help/matlab/graph-and-network-algorithms.html

関連する問題