0

我需要計算degree,圖中每個節點的接近度和中間度中心性。我正在使用cy.ready()事件之後的每個節點上內置到Cytoscape.js中的函數。但是,由於圖形相當大(250+節點,650+連接),計算時間太長。任何人都可以提出更有效的方法嗎?使用Cytoscape.js在所有節點上執行Centrality函數

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次。然後,只需查詢結果:

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

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

使用標準化版本的中心性算法,除非您有充分的理由否則。例如,如果將一個圖中的結果與另一個圖中的結果進行比較,則只有標準化版本纔有意義。

+0

如何計算標準化的indegree中心性請指導 let ccn = cy.elements()。dcn({'options.directed':true}); $ scope.ndd = cy.nodes()的forEach。(N => { n.data({ CCN:ccn.degree(N) });} ) –