Estou tentando descobrir como o Path Graph acordo com o algoritmo de Eppstein, neste artigo funciona e como posso reconstruir os caminhos mais curtos de para com a construção de pilha correspondente .
Tão longe:
contém todas as arestas que saem de um vértice em um gráfico de que não são parte de um caminho mais curto em . Eles são ordenados pelo heap pelo "desperdício de tempo" chamado ao usar essa borda em vez da que está nos caminhos mais curtos. Aplicando o Dijkstra, encontro os caminhos mais curtos para todos os vértices de .
Eu posso calcular isso tomando o comprimento da aresta + (o valor do vértice da cabeça (onde a aresta direcionada está apontando para) - o valor do vértice da cauda (onde a aresta direcionada está iniciando) .Se for , não está no caminho mais curto, se for , está no caminho mais curto.
Agora que construir um 2-Min-Heap por heapifying o conjunto de arestas o u t ( v ) de acordo com a sua δ ( e ) para qualquer v ∈ V , onde a raiz o u t r o o t ( v ) tem apenas um filho (= subárvore).
A fim de construir I inserção o u t r o o t ( v ) em H T ( n e x t T ( v ) ) com início no vértice do terminal t . Sempre que um vértice é tocado de alguma forma durante a inserção, ele é marcado com um ∗ .
Agora, podemos construir , inserindo o resto de H o u t ( w ) em H T ( v ) . Cada vértice em H L ( v ) contém ou duas crianças de H T ( v ) e 1 a partir de H o u t ( w ) ou 0 a partir do primeiro e 2 a partir do segundo e é um 3-montão.
Com I pode construir um DAG chamado D ( L ) que contém um vértice para cada * vértice -marked de H T ( v ) e para cada vértice não raiz de H o u t ( v ) .
As raízes de em D ( G ) são chamadas h ( v ) e estão conectadas aos vértices aos quais pertencem de acordo com o u t ( v ) por um "mapeamento".
Por enquanto, tudo bem.
O artigo diz que eu posso construir inserindo uma raiz r = r ( s ) e conectando-a a h ( s ) por uma borda inicial com δ ( h ( s ) ) . Os vértices de D ( G ) são os mesmos em P ( G ), mas não são ponderados. As arestas têm comprimentos. Então, para cada aresta direcionada ( u , v ) ∈ D ( G )as arestas correspondentes em são criadas e ponderadas por δ ( v ) - δ ( u ) . Eles são chamados de Heap Edges. Então, para cada vértice v ∈ P ( G ) , que representa uma aresta que não está no caminho mais curto que conecta um par de vértices u e w , "arestas transversais" são criadas de v a h ( w ) em P ( G ) com um comprimento δ ( h ( w . Todo vértice em P ( G ) possui apenas um grau de saída de 4 máx.
caminhos 's a partir de r é suposto ser uma correspondência comprimento de um-para-um entre o s - t -paths em L .
No final, uma nova pilha ordenada 4-Heap é compilada. Cada vértice corresponde a um caminho em P ( G ) enraizado em r . O pai de qualquer vértice tem uma borda a menos. O peso de um vértice é o comprimento do caminho correspondente.
Para encontrar os caminhos mais curtos, uso o BFS em P ( G ) e "traduzo" o resultado da pesquisa em caminhos usando H ( G ) .
Infelizmente, não entendo como posso "ler" e depois "traduzi-lo" através de H ( G ) para receber os k caminhos mais curtos.