Estou tentando descobrir que tipo de estrutura de dados usar para modelar um uso hipotético e idealizado da rede.
No meu cenário, vários usuários hostis uns aos outros estão tentando formar redes de computadores onde todas as conexões em potencial são conhecidas. Os computadores que um usuário precisa conectar podem não ser os mesmos que outro usuário precisa conectar; o usuário 1 pode precisar conectar os computadores A, B e D, enquanto o usuário 2 pode precisar conectar os computadores B, C e E.
Imagem gerada com a ajuda do NCTM Graph Creator
Eu acho que o núcleo disso será um gráfico cíclico não direcionado, com nós representando computadores e bordas representando cabos Ethernet. No entanto, devido à natureza do cenário, existem alguns recursos incomuns que descartam listas de adjacências e matrizes de adjacência (pelo menos, sem modificações não triviais):
- as bordas podem se tornar de uso restrito; ou seja, se um usuário adquirir uma determinada conexão de rede, nenhum outro usuário poderá usar essa conexão
- no exemplo, o usuário verde não pode se conectar ao computador A, mas o usuário vermelho conectou B a E apesar de não ter um link direto entre eles
- em alguns casos, um determinado par de nós será conectado por mais de uma borda
- no exemplo, existem dois cabos independentes que funcionam de D a E, de modo que os usuários verde e azul puderam conectar essas máquinas diretamente; no entanto, o vermelho não pode mais fazer essa conexão
- se dois computadores estiverem conectados por mais de um cabo, cada usuário poderá possuir não mais que um desses cabos
Vou precisar fazer várias operações neste gráfico, como:
- determinar se algum par específico de computadores está conectado para um determinado usuário
- identificação do caminho ideal para um determinado usuário conectar computadores de destino
- identificação da conexão do computador com maior latência para um determinado usuário (ou seja, caminho mais longo sem ramificação)
Meu primeiro pensamento foi simplesmente criar uma coleção de todas as arestas, mas isso é terrível para pesquisar. A melhor coisa que posso pensar agora é modificar uma lista de adjacências para que cada item da lista contenha não apenas o comprimento da borda, mas também o custo e o proprietário atual. Essa é uma abordagem sensata? Assumindo que o espaço não é uma preocupação, seria razoável criar várias cópias do gráfico (uma para cada usuário) em vez de um único gráfico?