0

degree、グラフ上のすべてのノードの近接性と中間度を計算する必要があります。私は現在、cy.ready()イベントの後、各ノードでCytoscape.jsに組み込まれている関数を使用しています。しかし、グラフがかなり大きい(250以上のノード、650以上の接続)ので、計算に時間がかかりすぎます。誰かがより効率的な方法を提案できますか?Cytoscape.jsを使用してすべてのノードで中心性機能を実行

var calculateSNA = function() { 
    // Don't run if already set... 
    if(data.sna) return false 
    console.log('Running SNA') 

    _.map(nodes, function(node) { 
    var target = cy.nodes('#' + node.data.id) 
    node.data.sna = { 
     degreeCentrality: cy.$().dc({ root: target }).degree, 
     closenessCentrality: cy.$().cc({ root: target }), 
     betweennessCentrality: cy.$().bc().betweenness(target) 
    } 
    return node 
    }) 

    // Add SNA data to local storage 
    Data.add({ 
    sna: true 
    }) 
    Node.set(nodes) 

    console.log('SNA complete') 
} 


cy.ready(function(event) { 
    console.log('cy.ready()') 
    calculateSNA() 
}) 

答えて

0

アルゴリズムをN回実行するのではなく、1回実行します。次に、結果を照会するだけです。

let ccn = cy.elements().closenessCentralityNormalized({ /* my options */ }); 

cy.nodes().forEach(n => { 
    n.data({ 
    ccn: ccn.closeness(n) 
    }); 
}); 

他の理由がない限り、正規化バージョンの中心性アルゴリズムを使用してください。たとえば、あるグラフの結果と別のグラフの結果を比較すると、正規化されたバージョンのみが実際に意味を持ちます。

+0

正規化偏位度の計算方法 let ccn = cy.elements()。dcn({'options.directed':true}); $ scope.ndd = cy.nodes()のforEach。(N => { n.data({ CCN:ccn.degree(N) }); }) –

関連する問題