ความซับซ้อนของปัญหาเส้นทางนี้เป็นที่รู้จักหรือไม่?


9

เช่น:ไม่มีทิศทางกราฟมีสองจุดโดดเด่นและจำนวนเต็ม0Gstk0

คำถาม:มีเส้นทางในหรือไม่ดังนั้นเส้นทางตัดกับรูปสามเหลี่ยมส่วนใหญ่หรือไม่? (สำหรับปัญหานี้มีการกล่าวถึงพา ธ เพื่อตัดรูปสามเหลี่ยมถ้าเส้นทางนั้นมีอย่างน้อยหนึ่งขอบจากรูปสามเหลี่ยม)stGk


3
มันผิดหรือเปล่า? เรากำหนดน้ำหนักให้กับแต่ละขอบแล้วหาเส้นทางที่สั้นที่สุด น้ำหนักของแต่ละขอบคือจำนวนสามเหลี่ยมซึ่งรวมถึงขอบนั้น น้ำหนักของเส้นทางนี้ไม่เท่ากับจำนวนสามเหลี่ยมที่พบ แต่มันเป็นเส้นทางเซนต์ที่มีสามเหลี่ยมน้อยที่สุด (ปัญหาที่เป็นไปได้คือเราอาจนับหนึ่งสามเหลี่ยมขึ้นไปสองครั้งเพราะเราไปที่ขอบสองข้างของสามเหลี่ยมนั้น แต่เหตุผลที่เราเลือกพวกมันคือพวกมันมีขนาดเล็กกว่าที่จะผ่านขอบอื่น ๆ ของสามเหลี่ยมและเรามีเส้นทางที่เรียบง่าย ขอบของสามเหลี่ยมสองอันอยู่ติดกัน)
Saeed

3
@Seed ฉันไม่เข้าใจ: อะไรคือเหตุผลที่ overcounting ไม่ทำให้คุณเลือกเส้นทางที่ไม่ดี? อัลกอริทึมของคุณเป็นแบบประมาณ 2 ครั้ง บางทีการแก้ไขคือการเพิ่มขอบสำหรับทุกเส้นทางด้วยน้ำหนักเท่ากับจำนวนสามเหลี่ยมที่มีทั้งและ(u,w)uvw(u,v)(v,w)
Sasho Nikolov

2
ใช่เราอาจไปจาก u ถึง v แล้วเราเลือก x (โหนดอื่นที่ไม่ใช่ในสามเหลี่ยม uvw) จากนั้นเราไปที่ w ซึ่งผิด (ความผิดพลาดของฉันคือฉันพลาดระหว่างจุดยอดซึ่งไม่ได้อยู่ในสามเหลี่ยม uvw) แต่ด้วยการแก้ไขของคุณมันถูกต้องเพราะสำหรับทุกเส้นทางที่มี triangles ในกราฟต้นฉบับจะมีเส้นทางของน้ำหนักในกราฟเสริม นอกจากนี้น้ำหนักของเส้นทางในกราฟใหม่อย่างน้อยก็เท่ากับจำนวนสามเหลี่ยมในเส้นทางที่สอดคล้องกันในกราฟต้นฉบับ αα
Saeed

1
ฉันให้ความคิดเพิ่มเติมเล็กน้อยเกี่ยวกับเรื่องนี้แม้ว่าจะแก้ไขไม่ได้ ขออภัย Andras ถ้าฉันนำความหวังที่ผิด เพื่อดูว่าทำไมการแก้ไขผิดพิจารณาจุดยอดในเส้นทางและเรามีรูปสามเหลี่ยมและและสมมติว่าขอบและเป็นสามเหลี่ยมมากเกินไป . ถ้าเราใช้ขอบใหม่ที่ประดิษฐ์ขึ้นมาซึ่งเชื่อมต่อเราจะนับสามเหลี่ยมสองครั้ง PS: เหตุผลของฉันอีกครั้งผิดเพราะฉันคิดว่าเราแค่แทนที่และด้วย new (multi) edgeu>v>w>xPu,v,wv,w,xvxuwu>wv,w,xu>vv>wu>w. หากเราเพิ่มขอบเทียมเหล่านั้นสำหรับทุกเส้นทางมันจะทำงานได้เล็กน้อย ดูเหมือนว่าเป็น NPC
Saeed

1
ความคิดของฉันไม่ทำงาน - ฉันต้องบำรุงรักษาหลายชุดและฉันคิดว่าจะมีมากเกินไป
reinierpost

คำตอบ:


1

สมมติว่าไม่มีขอบตนเองในGG

สำหรับแต่ละขอบระหว่างโหนดและในให้และหากไม่มีขอบ คำนวณเมทริกซ์ซึ่งให้จำนวนเส้นทางสองฮอประหว่างแต่ละคู่ของ โหนดและv_jจากนั้นเพื่อหาขอบระหว่างและในคำนวณมิฉะนั้นให้ตั้งซึ่งจะให้จำนวนสามเหลี่ยมของ edge เป็นส่วนหนึ่งของ (หรือไม่มีที่สิ้นสุดหากไม่มี edge) การคูณเมทริกซ์จำเป็นต้องใช้ในการคำนวณvivjGE[i,j]=1E[i,j]=0n×nC[i,j]=k=1nE[i,k]E[k,j]vivjvivjGD[i,j]=E[i,j]C[i,j]D[i,j]=Cค่าใช้จ่าย (สามารถคำนวณได้เร็วขึ้นขึ้นอยู่กับ sparsity ของ )O(n3)G

ตอนนี้คำนวณเมทริกซ์ , เช่นนั้น])) คือเส้นทางที่สั้นที่สุดในความยาวมากถึงสองส่วนเพื่อรองรับเส้นทางที่ไปตามขอบทั้งสองของสามเหลี่ยมn×nAA[i,j]=min(D[i,j],mink(D[i,k]+D[k,j]E[i,j]))AD

ตอนนี้เพียงคำนวณเส้นทางที่สั้นที่สุดระหว่างและในบนกราฟใหม่ที่คือเมทริกซ์ adjacency (ถ่วงน้ำหนัก) โดยใช้ Dijkstra (เนื่องจากน้ำหนักขอบทั้งหมดเป็นบวก) และพิจารณาว่า , โดยที่เป็นการปิดเหนือ semiring เขตร้อน (ซึ่งให้เมทริกซ์ระยะทาง)vivjGAA[i,j]kA

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.