문제

Edge 가중치 연결된 연결된 DAG $ g= (v, e, r \ in v \ \ mathbb {z} \} \ \ \ \ \ \ \ z})/ span> ( "레벨"이라고 함) $ l_0={R \ ldots, l_n \ subset v $ $ L_0 \ CUP \ LDOTS \ CUP L_N= v $ $의 노드의 발신 모서리L_I $ $ l_ {i + 1} $ 의 노드에만 연결됩니다.

이 DAG에 더 많은 수준이 추가되면서 더 짧은 경로 세트를 유지할 수있는 온라인 알고리즘이 있습니까?즉, 쿼리 "루트에서 일부 노드에서 일부 노드 $ n $ 은 그래프의 하단 수준에서 답변을 답변 할 수 있습니다.더 많은 수준이 추가됨에 따라

이 질문을 해결하는 연구를 찾을 수 없었습니다.

도움이 되었습니까?

해결책

문제를 정확하게 이해하면 문제가 쉽기 때문에 문제가 발생하지 않았을 것입니다.

뭔가를 놓치지 않는 한, 가장자리 가중치 "계층화 된"DAG $ G= (L_0, \ 컵 \ DOTS 컵 L_K, E) $ (귀하의 질문에 정의 된대로) 다음 두 가지 작업을 지원합니다.

  • init () : 하나의 레이어 $ l_0 $ , 단일 정점 $ r "의 그래프를 만듭니다. \ l_0 $ 및 에지 없음.

  • query () : $ \ min_ {v \ in l_k} d (r, v) $ .

  • add_layer ( $ l_ {k + 1}, e '$ ) : 새로운 세트 $ l_ {k + 1} $ vertices의 $ e '\ tudeetq (l_k \ times l_ {k + 1}) $ $ g $ 의 정점 집합이 $ L_0 \ 컵 \ LDOTS \ CUP L_K \ CUP L_ {k + 1 } $ $ g $ $ e \ 컵 e '$ .

다음을 저장하여 할 수 있습니다. 1) 각 vertex $ V \ l_k $ , 거리 $ d [v] $ 양식 $ $ v $ in $ G $ , 2) 최소 거리 $ d ^ * $ $ S $ 마지막 레벨의 정점으로.

$ d [r]= 0 $ 을 설정하는 init 조작량. 쿼리 작업을 수행하려면 $ d ^ * $ 을 반환합니다.

add_layer ( $ l_ {k + 1}, e '$ )를 구현하면 다음과 같이 진행합니다.

  • 세트 $ d ^ * $ $ + \ infty $ ,
  • $ V \ 1} $ \ \ span> :
    • 세트 $ D [v]=infty $
    • 각 가장자리 $ (u, v) $ $ e '$ :
      • $ d [v] $ $ \ min \ {d [v], d [u] + W (u, v) \} $
    • 업데이트 $ d ^ * $ $ \ min \ {d ^ *, d [v] \} $

이것은 $ | l_ {k + 1}에 비례해야합니다. + | e '| 따라서 점수 적으로 최적입니다. 이 솔루션은 $ G $ 을 저장할 필요가 없습니다.

다른 팁

레벨에서 $ L_I $ 의 모든 노드에 짧은 경로의 길이가 있고,이 $ s \ l_i \ to \ mathbb {z} $ .이제 $ l_i $ 에서 $ l_ {i + 1} $ 이라고 가정합니다.class="수학 용기"> $ e_i $ .그런 다음 노드 $ n $ $ l_ {i + 1} $ 의 최단 경로의 길이 $ \ min \ {W (x, n) + s (x, mid (x, n) \ \ mid (x, n) \ span>에 의해 정의됩니다.실제 경로를 유지하는 것은 쉬운 확장입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top