J'essaie de comprendre quel type de structure de données utiliser pour modéliser une utilisation réseau hypothétique et idéalisée.
Dans mon scénario, un certain nombre d'utilisateurs hostiles tentent tous de former des réseaux d'ordinateurs où toutes les connexions potentielles sont connues. Cependant, les ordinateurs dont un utilisateur a besoin pour se connecter peuvent ne pas être les mêmes que ceux dont un autre utilisateur a besoin pour se connecter; l'utilisateur 1 peut avoir besoin de connecter les ordinateurs A, B et D tandis que l'utilisateur 2 peut avoir besoin de connecter les ordinateurs B, C et E.
Image générée avec l'aide de NCTM Graph Creator
Je pense que le noyau de cela va être un graphe cyclique non dirigé, avec des nœuds représentant des ordinateurs et des bords représentant des câbles Ethernet. Cependant, en raison de la nature du scénario, il existe quelques fonctionnalités rares qui excluent les listes d'adjacence et les matrices d'adjacence (au moins, sans modifications non triviales):
- les bords peuvent devenir à usage restreint; c'est-à-dire que si un utilisateur acquiert une connexion réseau donnée, aucun autre utilisateur ne peut utiliser cette connexion
- dans l'exemple, l'utilisateur vert ne peut pas se connecter à l'ordinateur A, mais l'utilisateur rouge a connecté B à E bien qu'il n'ait pas de lien direct entre eux
- dans certains cas, une paire de nœuds donnée sera connectée par plus d'un bord
- dans l'exemple, il y a deux câbles indépendants allant de D à E, donc les utilisateurs verts et bleus ont pu tous les deux connecter directement ces machines; cependant, le rouge ne peut plus établir une telle connexion
- si deux ordinateurs sont connectés par plus d'un câble, chaque utilisateur ne peut posséder plus d'un de ces câbles
Je devrai effectuer plusieurs opérations sur ce graphique, telles que:
- déterminer si une paire d'ordinateurs particulière est connectée pour un utilisateur donné
- identifier le chemin optimal pour qu'un utilisateur donné se connecte aux ordinateurs cibles
- identifier la connexion informatique à latence la plus élevée pour un utilisateur donné (c'est-à-dire le chemin le plus long sans branchement)
Ma première pensée a été de créer simplement une collection de tous les bords, mais c'est terrible pour la recherche. La meilleure chose que je puisse penser maintenant est de modifier une liste de contiguïté afin que chaque élément de la liste contienne non seulement la longueur du bord mais aussi son coût et son propriétaire actuel. Est-ce une approche sensée? En supposant que l'espace n'est pas une préoccupation, serait-il raisonnable de créer plusieurs copies du graphique (une pour chaque utilisateur) plutôt qu'un seul graphique?