Enquanto escrevia um programa Petri Net, fui confrontado com uma escolha sobre estruturas de dados para representar o gráfico. As listas de adjacência (ou seja, listas que enumeram os arcos para dentro e fora de lugares ou transições individuais) são fáceis de implementar, mas enquanto eu estudava a teoria das redes de petri, fui levado com a beleza da abordagem de equação de estado baseada em matriz - que presumivelmente exigiria que eu usasse matrizes esparsas.
O que me levou a pensar: existem implementações de matrizes esparsas que fornecem uma enumeração rápida em linhas e colunas? Caso contrário, existem alternativas que me permitam construir e percorrer eficientemente um gráfico bipartido em uma linguagem funcional como o Erlang?
FWIW - Por 'eficientemente', neste caso, quero dizer rápido em enumerar os arcos incidentes em uma determinada transição ou local. Eu ficaria mais feliz em trocar espaço por tempo se houver compromissos a serem feitos. Como o gráfico não será modificado após a construção, ele não precisará ser particularmente eficiente para inserções ou atualizações.
TIA