0

Je dois calculer degree, la proximité et la centralité entre chaque nœud sur un graphique. J'utilise actuellement les fonctions intégrées dans Cytoscape.js sur chaque noeud après l'événement cy.ready(). Cependant, comme les graphiques sont assez volumineux (250+ nœuds, 650+ connexions), cela prend trop de temps à calculer. Quelqu'un peut-il suggérer une méthode plus efficace?Effectuer des fonctions de centralité sur tous les nœuds à l'aide de 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() 
}) 

Répondre

0

Exécutez l'algorithme une fois plutôt que de l'exécuter N fois. Ensuite, il suffit d'interroger le résultat:

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

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

Utilisez les versions normalisées des algorithmes de centralité à moins que vous avez une bonne raison de faire autrement. Seules les versions normalisées signifient vraiment quelque chose si vous comparez les résultats dans un graphique pour obtenir un autre graphique, par exemple.

+0

Comment calculer la centralité normalisée normalisée Veuillez guider laissez ccn = cy.elements(). Dcn ({'options.directed': true}); $ scope.ndd = cy.nodes() forEach. (N => { n.data ({ ccn: ccn.degree (n) });} ) –