그래프 고려하십시오. 우리는 길이가 같은 A 에서 B 까지 서로 다른 두 경로가 있는지 알고 싶습니다 . 무엇을해야합니까? 단순 : 두 경로를 하나로 코딩하십시오. 꼭짓점 V × V × { 0 , 1 }로 그래프 G ' 를 정의합니다 . 당신은 한 단계 만들 G ' 에 두 개의 독립적 인 단계를함으로써 G를 . 추가 비트는 두 경로가 이미 서로 분리되어 있는지 알려줍니다.지에이비지'V× V× { 0 , 1 }지'지
공식적으로, 가장자리가 의 G ' IFF I → I ' , J → J ' 에서 G 및 E ' = E ∨ ( I , I '는 ) ≠ ( j , j ' ) .( i , j , e ) → ( i', j', 전자')지'나는 → 나는'j → j'지이자형'= e ∨ ( i , i') ≠ ( j , j')
알고리즘 검사 경로가있는 경우 에 ( B , B , 1 ) 에서의 G ' 이고, O ( V 4 ) 등, 또는 어떤 O ( ( V + E ) 2 ) .( A , A , 0 )( B , B , 1 )지'O (V4)O ( (V+ E)2)
이 알고리즘이 정확하다는 데 동의하면 결과적으로 의 경로 는 최대 2 n 2 의 길이 이므로 잠재적 인 "경로 충돌"은 해당 길이에서 최신으로 발생해야합니다. 이 관측 값에서 O ( V ω log V ) 알고리즘을 얻을 수 있습니다 . 여기서 ω 는 행렬 곱셈 복잡성입니다 (스포일러가 필요한 경우 묻습니다 ...).지'2n2O ( Vω로그V)ω
나는 문제의 구조를 더 많이 사용 하는 알고리즘 이 있다고 생각 합니다.O ( V+ E)