DAG에서 두 정점 사이의 최단 경로 및 최단 경로 찾기


14

비가 중 DAG (방향성 비순환 그래프) D=(V,A) 와 두 개의 꼭짓점 st 가 주어지면 다항식 시간 에서 s 에서 까지 최단 경로와 최단 경로를 찾을 수 t있습니까? 경로 길이는 모서리 수로 측정됩니다.

다항식 시간으로 가능한 경로 길이 범위를 찾는 데 관심이 있습니다.

추신 :이 질문은 DAG에서 StackOverflow 질문 가장 긴 경로 의 복제입니다 .

답변:


10

가장 짧은 경로 문제의 경우 가중치를 신경 쓰지 않으면 먼저 첫 번째 검색 을 수행하는 것이 확실한 방법입니다. 그렇지 않으면 Dijkstra의 알고리즘 은 음의 가장자리가없는 한 작동합니다.

가장 긴 경로의 경우 모든 모서리 가중치를 무시한 상태에서 항상 Bellman-Ford 를 그래프에서 수행 할 수 있습니다. Bellman-Ford는 마이너스 웨이트 사이클이없는 한 작동하므로 DAG의 모든 웨이트와 함께 작동합니다.


2
Bellman-Ford 동적 프로그래밍 알고리즘입니다.
Raphael

1
@Raphael 네,하지만 모든 에지 가중치를 부정하는 대신 최대 경로를 찾는 직접적인 DP 알고리즘이 있다고 생각합니다.
jmite

1
@jmite : 물론, 왜 : Bellman-Ford를 온라인으로 전환하거나 최대한 활용하도록 변경하십시오.
Raphael

1
그건 그렇고, NP- 완전 문제 Longest Path가 DAG의 P에 쉽게 있음을 직관적으로 확신하지 못합니다. 증거 / 참조 / 설명을 부탁드립니다.
Raphael

2
또한 DAG를

8

n=|V(G)|m=|E(G)|w(ab)(ab)st

b:=t

  1. bmin(b)max(b)b

  2. 다음과 같이 및 를 결정하고 기록하십시오 .min(b)max(b)

    • 인 경우 .b=smin(s):=max(s):=0
    • 그렇지 않으면 정점 무시 입니다. 에지 공집합 위에 최소 및 최대 값을 계산할 때 (인바운드 가장자리가 전혀 또는 전부 무시) 세트 .
      min(b):=minab[w(ab)+min(a)]max(b):=maxab[w(ab)+max(a)]
      min(a)=max(a)=inaccessiblebmin(b):=max(b):=inaccessible

이 알고리즘이 시간에 실행되고 모든 정점 변수를 초기화하는 데 필요한 시간을 무시 한다는 것을 증명할 수 있어야 합니다.O(m)


이 재귀 "풀"방식은 실제로 일반적인 동적 "푸시"방식보다 느릴 수 있으며 재귀를 처리하려면 선형 크기의 스택이 필요합니다. 일반적인 접근 방식은 정점을 위상 순서대로 가져 와서 현재 노드의 각 인접 항목에 대한 중간 최소값과 최대 값을 향상시키는 것입니다. 모든 인바운드 에지가 이미이를 개선하는 데 사용되었으므로 현재 노드는 항상 최소 및 최대의 최종 값을 갖습니다.
Palec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.