Atualmente, estou trabalhando na minha tese de mestrado, e trata-se de agrupar em gráficos. Estou trabalhando com uma ideia usando formigas para resolver o problema. Atualmente, estou trabalhando na implementação e estou me perguntando exatamente quão bem pode representar as bordas do gráfico.
Cada borda é aumentada com certas informações, como seu valor de feromônio e o número de vezes que uma formiga a visitou. Vou trabalhar com gráficos não direcionados, que podem acabar sendo muito grandes (mais de um milhão de vértices) e fiquei pensando qual é a maneira mais eficiente de armazenar as bordas e procurá-las? Eu estava pensando em aderir a uma convenção e armazenar pontos de extremidade de acordo com o que possui um ID de vértice mais baixo para e o mais alto para ( e são os pontos de extremidade da borda na estrutura de dados). Mas eu estou querendo saber como eu realizaria uma pesquisa neste caso?
Existe um mapeamento que criei da matriz de adjacência para a matriz de arestas, mas isso funciona apenas se o gráfico subjacente for um gráfico completo. Por isso, vim aqui para obter algumas sugestões de como proceder, pois preciso que minha pesquisa seja eficiente e, ao mesmo tempo, não quero aumentar o espaço de armazenamento das bordas, pois os gráficos serão enormes.
Respostas:
Se seu gráfico for escasso, você deve armazená-lo usando "listas" adjacentes, embora provavelmente deseje algo mais eficiente que uma lista (ou talvez não, dependendo do uso). É mais simples se você armazenar cada extremidade nos dois pontos de extremidade. Isso pode ser implementado de várias maneiras, por exemplo, você pode armazenar todos os dados em uma grande matriz e armazenar apenas ponteiros nas "listas" adjacentes.
fonte