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 번 실행하는 대신 한 번 실행하십시오. 당신이 그렇지 않으면 할 수있는 좋은 이유가없는 중심성 알고리즘의

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

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

사용 정규화 된 버전 : 그럼 그냥 결과를 쿼리합니다. 예를 들어 한 그래프의 결과를 다른 그래프의 결과와 비교하면 정규화 된 버전 만이 실제로 의미가 있습니다.

+0

정규화 된 절대 중심을 계산하는 방법 ccn = cy.elements(). dcn ({ 'options.directed': true}); $ scope.ndd cy.nodes =() 대해 forEach. (N => { n.data ({ CCN : ccn.degree (N)} ) }) –