Estou trabalhando em um sistema de tipos e encontrei um problema que parece semelhante ao menor ancestral comum. Dados dois tipos, preciso encontrar a menor sequência de conversões que resultará no mesmo tipo de destino. Se eu tivesse uma árvore de tipos simples, sei como obter o resultado, mas infelizmente tenho uma estrutura gráfica um pouco mais complexa.
Esse gráfico tem alguns pontos-chave. É unidirecional e nenhum loop é formado. Devido a um número ilimitado de tipos, no entanto, não pode ser produzido estaticamente. A distância de um caminho é geralmente bastante baixa. "Parece" mais uma árvore com várias bordas de atalho.
Inicialmente, olhei para o menor ancestral comum, mas ele é descrito principalmente como um algoritmo de árvore. Ainda não perdi a esperança de poder adaptá-lo. A outra possibilidade seria um algoritmo de localização de caminho mais genérico.
Espero que alguém tenha visto esse problema antes, ou um problema semelhante, e possa me dar algumas referências sobre como abordá-lo ainda mais. Parece familiar o suficiente para presumir que algo deve existir e estou apenas procurando os termos / nomes errados.
Aqui está minha tentativa de descrever isso de maneira mais formal.
Haja um gráfico de modo que cada vértice tenha um conjunto de arestas de saída . Observe que, como o gráfico é dinâmico, possivelmente infinito, não há como construir a forma para o gráfico inteiro.
Um caminho é formado a partir de um vértice, seguindo qualquer uma das arestas disponíveis desse nó. . O comprimento desse caminho é igual ao número de vértices na sequência. Não há ciclo possível. O conjunto de todos os caminhos entre dois nós é expresso como.
Observe que pode ser determinado como vazio em um número finito de etapas. Enumerando todo o o conjunto não é praticamente possível.
O problema é encontrar o caminho mais curto de dois vértices para um terceiro vértice. Ou seja, dado, encontrar de modo que caminhos e existe e é mínimo.
java.lang.Object
)?