Je travaille actuellement sur ma thèse de master, et c'est sur le clustering sur les graphes. Je travaille avec une idée utilisant des fourmis pour résoudre le problème. Je travaille actuellement sur l'implémentation et je me demande exactement comment bien représenter les bords du graphique.
Chaque bord est augmenté de certaines informations telles que sa valeur de phéromone et le nombre de fois qu'une fourmi a visité ce bord. Je vais travailler avec des graphes non orientés, qui peuvent finir par être assez énormes (plus d'un million de sommets) et je me demandais quel est le moyen le plus efficace pour moi de stocker les bords et de les rechercher? Je pensais à m'en tenir à une convention et à stocker les points de terminaison en fonction de celui qui a un id de sommet inférieur pour et le plus élevé pour ( et sont les points d'extrémité du bord dans la structure de données). Mais je me demande comment pourrais-je effectuer une recherche dans ce cas?
Il y a un mappage que j'ai trouvé de la matrice d'adjacence au tableau de bord, mais cela ne fonctionne que si le graphique sous-jacent est un graphique complet. Je suis donc venu ici pour quelques suggestions sur la façon de procéder car j'ai besoin que ma recherche soit efficace alors que je ne veux pas faire exploser l'espace de stockage pour les bords car les graphiques seront énormes.
Réponses:
Si votre graphique est clairsemé, vous devez le stocker en utilisant des "listes" de contiguïté, bien que vous souhaitiez probablement quelque chose de plus efficace qu'une liste (ou peut-être pas, selon l'utilisation). C'est plus simple si vous stockez chaque bord aux deux extrémités. Cela peut être implémenté de plusieurs façons, par exemple, vous pouvez stocker toutes les données dans un grand tableau et stocker uniquement des pointeurs dans les "listes" d'adjacence.
la source