问题描述
我需要计算 gettle ,图表上每个节点的紧密和间隔中心性.目前,我正在使用cy.ready()事件之后的每个节点上的cytoscape.js内置的函数.但是,由于图形非常大(250个以上的节点,650多个连接),因此花费太长了.谁能建议一种更有效的方法?
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() })
推荐答案
运行一次算法,而不是运行n次.然后查询结果:
let ccn = cy.elements().closenessCentralityNormalized({ /* my options */ }); cy.nodes().forEach( n => { n.data({ ccn: ccn.closeness( n ) }); } );
除非有充分的理由去做,否则使用正常版的中心算法.如果将一个图中的结果与另一个图中的结果进行比较,则只有归一化版本真正意味着任何内容.
.