2017-01-12 3 views
-2

ネットワークノードの集合の近さと中間度を計算する方法を探しています。PHPネットワーク内のノードの集中度を計算する

入力としてIは、開始ノード、エンドノード及びエッジ情報を持つJSONオブジェクトを持っている:

[{ 
    "publication": 4, 
    "origin": 10, 
    "destination": 11 
}, 

...., 

{ 
    "publication": 5, 
    "origin": 10, 
    "destination": 12 
}, { 
    "publication": 8, 
    "origin": 12, 
    "destination": 13 
}] 

隣接行列を使用して、非常に大きなデータセットのinefficentにつれ、私が探しています中心性を計算する別の方法です。私は無向グラフ/無重みグラフを持っているので、Dijkstraのアルゴリズムはオプションになりますか?そして、このjsonを入力として使用するにはどうすれば実装できますか?マルチエッジが今$graph["sourceN"]["targetN"] でその数を示していること

$edgeList = json_decode($thatJSONDataYouHaveInTheQuestion,true); 
$graph = []; 
foreach ($edgeList as $edgeData) { 
    $graph[$edgeData["origin"]][$edgeData["destination"]] = isset($graph[$edgeData["origin"]][$edgeData["destination"]])?$graph[$edgeData["origin"]][$edgeData["destination"]]+1:1; 
    //$graph[$edgeData["destination"]][$edgeData["origin"]] = isset($graph[$edgeData["destination"]][$edgeData["origin"]])?$graph[$edgeData["destination"]][$edgeData["origin"]]+1:1 //Uncomment for undirected graphs 
} 

注あなたは非常に、非常に単純なグラフ構造を持っている:あなたは次の操作を行うことができます始めるため

+0

によって与えられますか。 – Rafael

+0

あなたのデータもマトリックスにはありません... – Rafael

+1

ダイクストラのアルゴリズムを使用することができます。また、Dijkstraのアルゴリズムは、適切なデータ構造を使ってこの詳細を抽象化している限り、隣接関係リストや隣接行列を使用しているかどうか気にしません。ペナルティを受けるだけです(スペースペナルティを避けるためのトレードオフです – apokryfos

答えて

1

function containsEdge($graph, $source, $target) { 
    return isset($graph[$source]) && isset($graph[$source][$target]) && $graph[$source][$target] > 0; 
} 

また、基本的にDijkstraのアルゴリズムをPHPで実装するために必要な作業はすべて行います。

ダイクストラのアルゴリズムは、これは重み付けされる方法、*加重*グラフのですか?ノードは、例えばarray_keys($graph)によって与えられるまたはノードへのすべての隣接する縁部をarray_keys($graph["node"])

+0

これは、if-condition – Phil

+1

@Philが更新された(issetチェック付きで) "未定義オフセット"エラーを引き起こします。 – apokryfos

関連する問題