พิจารณากราฟเราต้องการทราบว่ามีสองเส้นทางที่แตกต่างจากถึงที่มีความยาวเท่ากันหรือไม่ จะทำอย่างไร? ง่าย: โค้ดสองเส้นทางในหนึ่งเดียว กำหนดกราฟมีจุด\} คุณทำขั้นตอนในโดยทำสองขั้นตอนอิสระใน ' บิตเพิ่มเติมจะบอกคุณว่าสองพา ธ ได้แยกจากกันหรือไม่A B G ′ V × V × { 0 , 1 } G ′ GGABG′V×V×{0,1}G′G
เป็นทางการมีขอบใน iff ,ในและ(เจเจ)G ′ฉัน→ ฉัน′ j → j ′ G e ′ = e ∨ ((i,j,e)→(i′,j′,e′)G′i→i′j→j′Ge′=e∨(i,i′)≠(j,j′)
ขั้นตอนวิธีการตรวจสอบหากมีเส้นทางเพื่อในซึ่งเป็นหรือสิ่งที่ต้องการ2)( B , B , 1 ) G ′ O ( V 4(A,A,0)(B,B,1)G′O ( ( V + E ) 2 )O(V4)O((V+E)2)
หากคุณยอมรับว่าอัลกอริทึมนี้ถูกต้องดังนั้นเส้นทางในมีความยาวไม่เกินดังนั้น "การชนกันของเส้นทาง" ที่อาจเกิดขึ้นจะต้องเกิดขึ้นล่าสุดในระยะเวลานั้น คุณสามารถรับอัลกอริทึมจากการสังเกตนี้โดยที่คือความซับซ้อนในการคูณเมทริกซ์ (ถามว่าคุณต้องการสปอยเลอร์ ... ) 2 n 2G′2n2ωO(VωlogV)ω
ฉันรู้สึกว่ามีอัลกอริทึมซึ่งใช้โครงสร้างของปัญหามากขึ้นO(V+E)