Hãy xem xét một đồ thị , chúng tôi muốn biết nếu có hai đường dẫn khác nhau từ đến có cùng độ dài. Phải làm sao Đơn giản: mã hai đường dẫn trong một. Xác định đồ thị với các đỉnh . Bạn thực hiện một bước trong bằng cách làm cho hai bước độc lập trong . Bit bổ sung cho bạn biết liệu hai đường dẫn đã tách ra khỏi nhau chưa.A B G ′ V × V × { 0 , 1 } G ′ GGMộtBG'V× V× { 0 , 1 }G'G
Chính thức, có một cạnh trong iff , trong và .G ′ i → i ′ j → j ′ G e ′ = e ∨ ( i , i ′ ) ≠ ( j , j ′ )( i , j , e ) → ( tôi', j', e')G'i → tôi'j → j'Ge'= E ∨ ( i , i') ≠ ( j , j')
Thuật toán kiểm tra nếu có một đường dẫn đến trong , đó là , hoặc một cái gì đó như .( B , B , 1 ) G ′ O ( V 4 ) O ( ( V + E ) 2 )( A , A , 0 )( B , B , 1 )G'Ô ( V4)O ( ( V+ E)2)
Nếu bạn đồng ý thuật toán này là chính xác thì, do đó, đường dẫn trong có độ dài tối đa là , do đó, "va chạm đường dẫn" tiềm năng phải xảy ra muộn nhất ở độ dài đó. Bạn có thể nhận được thuật toán từ quan sát này, trong đó là độ phức tạp nhân ma trận (hỏi xem bạn có cần một spoiler ...) không. 2 n 2 O ( V ω log V ) ωG'2 n2Ô ( Vωđăng nhậpV)ω
Tôi cảm thấy mạnh mẽ có một thuật toán , sử dụng nhiều cấu trúc của vấn đề.Ô ( V+ E)