문제가 것 같습니다 . 알고리즘은 다음과 같습니다.NL
먼저 에서 t 까지 의 경로를 결정적으로 추측합니다 . 잘못 추측하면 거부하십시오 . 이 알고리즘 A를 호출하십시오 .stA
다음과 같은 비 결정적 알고리즘 고려하십시오.이 알고리즘 은 둘 이상의 경로가 있는지 판별합니다. 그래프와 s , t 가 서로 다른 모든 가장자리 쌍 e , f 에 대해 s 에서 t 는 e 를 포함 하지만 f 는 포함 하지 않는 경로를 추측 한 다음 s 에서 t 는 f 는 포함 하지만 e 는 포함 하지 않는 경로를 추측합니다 . 추측이 정확하면을 수락하십시오 . 더 수용이 모든 선택에 대한 발생하지 않으면 전자 와 F , 거부 . 비고 BBs,te,fstefstfeefB 비 결정적 로그 공간에서 구현할 수 있습니다.
이제 집합 은 s 에서 t 까지 의 경로가 두 개 이상인 s - t 그래프 의 집합입니다 . 때문에 N L = C O N L은 , 보체의 B는 도이고 N L , 즉, 우리는를 결정 수 S 및 t는 이 이하L(B)ststNL=coNLBNLst 결정적 LOGSPACE에서보다 두 경로.
마지막 알고리즘은 "Run 입니다. A가 수락 하면 B 의 보수를 실행하십시오.AAB 하고 답을 출력하십시오."
나는 참조를 모른다.
업데이트 : 참조를 정말로 원한다면 이 백서 의 섹션 3의 첫 번째 단락을 확인하십시오 . 그러나 이것은 아마도이 결과를 인용하는 많은 참고 문헌 중 하나 일 것입니다. 언급 한 논문을 인용하기보다는 결과를 "민속"이라고 부르는 것이 더 합리적입니다.
업데이트 2 : 고유 한 간단한 경로가 있는지 확인하려고한다고 가정합니다. 이 경우 알고리즘 는 변경할 필요가 없습니다. 경로가 있으면 간단한 경로가 있습니다. 알고리즘 B에 대해 다음 수정이 작동한다고 생각합니다 .AB
최소한 두 개의 간단한 경로가있는 경우 알고리즘 를 다시 작성하도록 알고리즘 B 를 다시 작성하려고 합니다.B
먼저 문제에 대해 다음 다항식 시간 알고리즘을 고려하십시오. s 에서 t 까지 최단 경로 를 찾으십시오 . 모든 가장자리를 들어 전자 의 P 또 다른이있는 경우, 검사 의 - t의 통과하지 않는 경로 전자 . 그런 경로를 찾으면 수락하십시오 . 다른 경로를 찾지 못하면 거부하십시오 . P 가 가장 짧기 때문에 사이클이 없으며 P의 일부 모서리를 사용하지 않는 다른 경로가 있으면 단순하고 P의 일부 모서리를 사용하지 않는 다른 경로가 있습니다PstePstePPP. 이 알고리즘은 "두 번째 최단 경로"문제에 사용됩니다.
우리는이 알고리즘을 구현할 것이다 . 우리가이 있다면 N L의 가장자리 쿼리에 대한 알고리즘을 전자를 고정 경로에서 P , 우리는 결정적 LOGSPACE에서 위를 구현할 수있는 모든 가장자리를 반복 전자 의 P 것은 , 생각 의 - t의 경로와 함께 방문한 모든 에지 것을 확인 방법으로, 그들 중 어느 것도 e와 같지 않습니다 .NLNLePePste
그래서 우리가 필요로하는 것은 "path oracle" 이라는 속성을 가진 알고리즘입니다 : 주어진 i = 1 , … , n , 모든 계산 경로에서 알고리즘 은 특정 고정 s - t 경로 에서 i 번째 에지를 보고 하거나 거부 합니다. N L = c o N L 을 사용하여 경로 오라클을 얻을 수 있습니다NLi=1,…,nistNL=coNL 전적으로 첫 번째 경로를 분리하기 위해 을 .
다음은 경로 오라클의 스케치입니다.
모든 k = 1 , … , n 을 시도하고 N L = c o N L을 사용하여 s 에서 t 까지 가장 짧은 경로의 길이 인 찾으십시오.kstk=1,…,nNL=coNL .
변수 설정 , x : = 1 , j : = ku:=sx:=1j:=k .
모든 이웃 의 uvu사전 순으로 에 대해,
길이 j - 1 의 에서 t 까지의 경로가 있는지 여부를 판별하십시오 (결과 N L = c o N L 사용 ). 보다 정확하게는 s - t 연결 (길이 j - 1 )에 대한 비 결정적 알고리즘 과 그 보완에 대한 알고리즘을 동시에 실행하십시오. 그들 중 하나가 수락하면 답을 따르십시오 (정확해야합니다. 둘 다 받아 들일 수는 없습니다). 둘 다 거부하면 거부vtj−1NL=coNLstj−1 합니다.
경로가 없으면 다음 이웃으로 진행하십시오. 당신이 모든 이웃을 소진했다면 거부 .
경로가있는 경우 이면 s 에서 t 까지 의 경로에서 i 번째 모서리 로 ( u , v ) 를 출력 하십시오 . 그렇지 않으면 x를 증가 시키고 j를 감소 시키고 u : = v를 설정 하고 v ≠ t 인 경우 for-loop를 다시 시작하십시오.x=i(u,v)istxju:=vv≠t .
t 출력 불량 i 에 도달 한 후 경우 (주어진 i 가 너무 큼)x<itii
주어지면 ,이 알고리즘 은 사 전적으로 가장 짧은 경로 P 의 i 번째 에지 를 s 에서 t 로 출력하거나 거부합니다.iiPst