ค้นหารอบง่าย ๆ ในกราฟกำกับ


15

ปัญหานี้สำหรับฉันดูน่าสนใจมาก มันกำลังจะหาวัฏจักรธรรมดา (เช่นวัฏจักรที่ไม่ใช่โหนดซ้ำ) ในกราฟกำกับ

วิธีแก้ปัญหาของฉันเป็นเช่นนี้คือกราฟนี้เป็นปัญหากรณี: ป้อนคำอธิบายรูปภาพที่นี่

ฉันรู้ว่ามีวงรอบในกราฟเมื่อคุณสามารถหา "ขอบหลัง" ในการค้นหาครั้งแรกที่ลึก (ประในรูปภาพของฉันใน DFSTree) และในช่วงเวลาหนึ่งฉันสามารถแน่ใจได้ว่าสักสองสามรอบ แต่ไม่ใช่สำหรับ ทุกรอบง่ายๆ เพราะ egdes ที่กำกับนั้นสำคัญมากที่มาจากวัฏจักรคือ (0123)! = (0321)

ฉันกำลังคิดทำ dfs สำหรับแต่ละโหนดด้วยขอบด้านหลัง แต่ฉันไม่แน่ใจและมันไม่ชัดเจน ดังนั้นฉันถามคุณถ้าคุณแนะนำฉัน ขอบคุณ !. ป้อนคำอธิบายรูปภาพที่นี่

นี่คือการนับลูปง่าย ๆ สำหรับปัญหากรณีของฉัน

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


คำตอบ:


13

คำถามนี้ดูเหมือนว่าจะเป็น Google ได้ดีมาก ตัวอย่างเช่นคุณอาจสนใจอัลกอริทึมที่นำเสนอในบทความนี้:

หาวงจรประถมศึกษาทั้งหมดของกราฟกำกับ Donald B. Johnson SIAM J. COMPUT ฉบับ 4, ฉบับที่ 1, มีนาคม 1975

บทคัดย่อ. อัลกอริทึมจะถูกนำเสนอซึ่งจะพบวงจรพื้นฐานทั้งหมดของกราฟกำกับในเวลาที่ถูกล้อมรอบด้วยO((n + e)(c + 1))และพื้นที่ที่ล้อมรอบด้วยO(n + e)ที่มีnจุดยอดeขอบและcวงจรประถมศึกษาในกราฟ อัลกอริธึมนั้นคล้ายกับอัลกอริธึมโดย Tiernan และ Tarjan แต่เร็วกว่าเพราะมันพิจารณาแต่ละขอบอย่างมากสองเท่าระหว่างวงจรใด ๆ หนึ่งและต่อไปในลำดับเอาต์พุต

กระดาษมีอัลกอริธึมที่สมบูรณ์


ตกลง. กระดาษนั้นสมบูรณ์แบบ แต่ฉันจะไปไหนต่อไหนก็ได้กับงานของฉันหรือแค่ดูกระดาษ? ฉันกำลังค้นหาคุณแนะนำให้ฉันรู้จักวิธีแก้ปัญหาฉันลืมสิ่งที่มีในความคิดของฉัน
jonaprieto

2
ปัญหาหลักของคุณคือต้นไม้ dfs ไม่ซ้ำกัน (เช่นสลับ "1" กับ "3" ในแผนภาพของคุณ) คุณจะต้องดู dfs-trees ที่เป็นไปได้ทั้งหมดเพื่อระบุรอบทั้งหมด
badroit

1
ในกรณีที่คุณต้องการการนำ Java มาใช้ของอัลกอริทึมนี้: github.com/1123/johnson
user152468

ลิงก์ @badroit เสียหาย ... :(
Jorge E. Hernández

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