ดูเหมือนว่าปัญหาของคุณอยู่ใน L นี่คืออัลกอริทึมNL
ครั้งแรก nondeterministically เดาเส้นทางจากไปที หากคุณคิดว่าไม่ถูกต้องปฏิเสธ สอบถามขั้นตอนวิธีนี้stA
พิจารณาอัลกอริทึม nondeterministic ต่อไปนี้ซึ่งกำหนดว่ามีอย่างน้อยสองเส้นทาง ได้รับกราฟและs , เสื้อสำหรับทุกคู่ที่แตกต่างกันของขอบE , F , เดาเส้นทางจากsไปทีที่มีอีแต่ไม่fแล้วเดาเส้นทางจากsไปทีที่มีฉแต่ไม่จ หากคาดเดาถูกต้องยอมรับ ถ้าไม่มีการยอมรับเกิดขึ้นสำหรับทุกทางเลือกของอีและf , ปฏิเสธ หมายเหตุขBs,te,fstefstfeefB สามารถนำไปใช้งานได้ใน logspace nondeterministic
ตอนนี้ชุดเป็นชุดของs - เสื้อกราฟที่มีอย่างน้อยสองเส้นทางจากsไปที เนื่องจากN L = c o N LการรวมกันของBยังอยู่ในN Lเช่นเราสามารถกำหนดได้ว่าsและtมีเส้นทางน้อยกว่าสองเส้นทางหรือไม่ใน logspace nondeterministicL(B)ststNL=coNLBNLst
อัลกอริธึมสุดท้ายคือ: "Run ถ้าAยอมรับแล้วให้เรียกใช้ส่วนเติมเต็มของBและเอาท์พุทคำตอบของมันออกมา"AAB
ฉันไม่รู้การอ้างอิง
UPDATE:หากคุณต้องการข้อมูลอ้างอิงให้อ่านวรรคแรกของส่วนที่ 3 ของบทความนี้ แต่นี่อาจเป็นเพียงหนึ่งในการอ้างอิงจำนวนมากที่อ้างถึงผลลัพธ์นี้ มันจะเหมาะสมกว่าที่จะเรียกผลที่ได้ว่า "คติชนวิทยา" แทนที่จะอ้างถึงกระดาษที่พูดถึงมัน
ปรับปรุง 2:สมมติว่าคุณต้องการตรวจสอบว่ามีเส้นทางที่เรียบง่ายที่ไม่ซ้ำกัน ในกรณีนั้นอัลกอริทึมไม่จำเป็นต้องเปลี่ยนแปลง: หากมีเส้นทางเลยมีเส้นทางที่ง่าย ผมเชื่อว่าการปรับเปลี่ยนต่อไปนี้จะทำงานให้อัลกอริทึมBAB
เราต้องการเขียนอัลกอริทึมเพื่อให้ยอมรับถ้ามีเส้นทางอย่างน้อยสองเส้นทางB
ก่อนอื่นให้พิจารณาอัลกอริธึมเวลาพหุนามต่อไปนี้สำหรับปัญหา หาเส้นทางที่สั้นที่สุดจากsไปที สำหรับ edge eทุกตัวในPตรวจสอบว่ามีอีกอันหรือไม่PsteP -เสื้อเส้นทางที่ไม่ได้ไปผ่านอีเมล หากคุณพบว่าเส้นทางดังกล่าวนั้นยอมรับ หากคุณไม่เคยหาเส้นทางอื่นแล้วปฏิเสธ เนื่องจาก Pสั้นที่สุดจึงไม่มีวัฏจักรและถ้ามีอีกพา ธ ที่ไม่ได้ใช้ Pบางอันก็มีอีกเส้นทางที่เรียบง่ายและไม่ใช้ขอบ PstePPP. (อัลกอริทึมนี้ใช้สำหรับปัญหา "เส้นทางที่สั้นที่สุดที่สอง")
เราจะดำเนินการตามขั้นตอนวิธีนี้ใน L หากเรามีอัลกอริทึมN Lสำหรับการค้นหาขอบeในเส้นทางคงที่NLNLeเราสามารถใช้ข้างต้นใน logspace nondeterministic: วนรอบขอบ eทั้งหมดใน P , เดาเส้นทาง s - tและตรวจสอบว่าทุกขอบที่เข้าชมตาม วิธีที่ไม่มีของพวกเขาจะเท่ากับอีPePste
ดังนั้นสิ่งที่เราต้องการคือ "path oracle" อัลกอริทึมพร้อมคุณสมบัติ: กำหนดให้i = 1 , … , n , ในทุกเส้นทางการคำนวณอัลกอริทึมจะรายงานiNLi=1,…,niขอบบนเส้นทาง - tคงที่หรือปฏิเสธ เราสามารถหา oracle ของเส้นทางโดยใช้N L = c o N Lเพื่อแยกเส้นทางแรกของ lexicographicallystNL=coNL
นี่คือภาพร่างของ oracle เส้นทาง
ค้นหาความยาวของเส้นทางที่สั้นที่สุดจากsไปทีโดยพยายามทุกk = 1 , ... , nและการใช้N L = C o N Lkstk=1,…,nNL=coNL
ตัวแปรชุด , x : = 1 , J : = ku:=sx:=1j:=k
สำหรับประเทศเพื่อนบ้านทั้งหมด of uตามลำดับคำศัพท์vu
กำหนดว่ามีเส้นทางจากถึงtของความยาวj - 1 หรือไม่ (ใช้ผลลัพธ์N L = c o N L ) แม่นยำยิ่งขึ้นเรียกใช้อัลกอริทึมแบบ nondeterministic สำหรับการเชื่อมต่อs - t (ความยาวj - 1 ) และอัลกอริทึมสำหรับการประกอบพร้อมกัน เมื่อหนึ่งในนั้นยอมรับไปพร้อมกับคำตอบ (ต้องถูกต้อง; ทั้งสองไม่สามารถยอมรับได้) หากทั้งสองปฏิเสธแล้วปฏิเสธvtj−1NL=coNLstj−1
หากไม่มีเส้นทางให้ไปยังเพื่อนบ้านคนถัดไป หากคุณได้หมดเพื่อนบ้านทั้งหมดแล้วปฏิเสธ
หากมีเส้นทางแล้วถ้าเอาท์พุท( U , V )เป็นฉันขอบ TH บนเส้นทางจากsไปที มิฉะนั้นการเพิ่มขึ้นxพร่องJตั้งU : = Vและเริ่มต้นสำหรับวงอีกครั้งถ้าวี≠ทีx=i(u,v)istxju:=vv≠t
ถ้าหลังจากที่ไปถึงเสื้อผลผลิตไม่ดีฉัน (ที่ให้ฉันมีขนาดใหญ่เกินไป)x<itii
กำหนดให้อัลกอริทึมนี้แสดงผลลัพธ์ขอบiบนพา ธ ที่สั้นที่สุด lexicographically PจากsถึงtหรือปฏิเสธiiPst