Eu tenho alguns dados de caminho mais curto para um gráfico. Posso reconstruir o próprio gráfico a partir desses dados?
Mais precisamente, eu tenho uma matriz booleana (0/1) para cada vértice v no gráfico (V, E) . Matriz elemento [s, d] é igual a 1 sse v está no caminho mais curto do vértice fonte s de destino vértice d . Todas as arestas do gráfico têm o mesmo comprimento.
Por exemplo, para o gráfico
(V1) -- (V2) -- (V3)
as três matrizes seriam:
V1:
1 1 1
1 0 0
1 0 0
V2:
0 1 1
1 1 1
1 1 0
V3:
0 0 1
0 0 1
1 1 1
Minhas perguntas:
1) existe um algoritmo para reconstruir o conjunto de arestas E dessas matrizes?
2) a solução é sempre única? (isso é mais uma curiosidade pessoal do que um requisito real)
3) o algoritmo pode ser generalizado para comprimentos de borda não uniformes?
algorithms
kfx
fonte
fonte
v1
ev2
, exatamente esses dois vértices estarão no caminho mais curto entrev1
ev2
. Assim, para qualquer outro vérticev
,[v1, v] == 0 == [v, v1]
na matriz dev2
e[v2, v] == 0 == [v, v2]
na matriz dev1
.Respostas:
você pode extrair a matriz de adjacência das matrizes de caminho usando a propriedade a seguir.
Há uma aresta entre 2 vértices
s
ed
se e somente se o caminho mais curto entre eles contiver apenass
ed
.Para comprimentos não uniformes, você obterá a solução única se a desigualdade do triângulo persistir . Caso contrário, um gráfico com
d(p1,p2)=1
d(p2,p3)=2
ed(p1,p3)=4
mostrará o caminho mais curto entrep1
ep3
como através, emp2
vez da conexão direta. O que significa que a aresta [p1, p3] nunca fará parte de nenhum caminho mais curto.fonte