พิจารณากราฟกำกับที่หนึ่งสามารถเพิ่มขอบแบบไดนามิกและทำแบบสอบถามเฉพาะบางอย่าง
ตัวอย่าง: ฟอเรสต์ disjoint-set
พิจารณาชุดคำถามต่อไปนี้:
arrow(u, v)
equiv(u, v)
find(u)
คนแรกที่จะเพิ่มลูกศรจากกราฟที่สองตัดสินใจถ้ามึง↔ *วีคนสุดท้ายพบตัวแทนที่ยอมรับของชั้นสมมูลของ↔ * , เช่นR ( U )ดังกล่าวว่ายู↔ *วีหมายถึงR ( V ) = R ( U )
มีความเป็นอัลกอริทึมที่รู้จักกันดีโดยใช้โครงสร้างข้อมูลป่าเคล็ดชุดดำเนินการคำสั่งเหล่านี้ในกึ่งคงตัดจำหน่ายซับซ้อนคือ(n)) หมายเหตุว่าในกรณีนี้จะดำเนินการใช้equiv
find
ตัวแปรที่ซับซ้อนมากขึ้น
ตอนนี้ฉันสนใจปัญหาที่ซับซ้อนยิ่งขึ้นซึ่งทิศทางสำคัญ:
arrow(u, v)
confl(u, v)
find(u)
คนแรกที่จะเพิ่มลูกศรวินาทีตัดสินใจถ้ามีโหนดสามารถเข้าถึงได้จากทั้งและคือ←วี อันสุดท้ายควรส่งคืนออบเจคต์เช่นที่หมายถึงโดยที่ควรคำนวณได้ง่าย (เพื่อที่จะพูดคำนวณ) เป้าหมายคือการหาโครงสร้างข้อมูลที่ดีเพื่อให้การดำเนินการเหล่านี้รวดเร็วconfl
รอบ
กราฟสามารถมีรอบ
ฉันไม่ทราบว่ามีวิธีในการคำนวณส่วนประกอบที่เชื่อมต่ออย่างมีประสิทธิภาพและเพิ่มขึ้นหรือไม่เพื่อพิจารณา DAG สำหรับปัญหาหลักเท่านั้น
แน่นอนฉันจะขอบคุณวิธีแก้ปัญหาสำหรับ DAG ด้วย มันจะสอดคล้องกับการคำนวณที่เพิ่มขึ้นของบรรพบุรุษร่วมกันน้อยที่สุด
วิธีการไร้เดียงสา
โครงสร้างข้อมูลฟอเรสต์ที่แยกจากกันนั้นไม่เป็นประโยชน์ที่นี่เนื่องจากมันไม่สนใจทิศทางของขอบ โปรดทราบว่าไม่สามารถเป็นโหนดเดียวในกรณีที่กราฟไม่ไหลมารวมกัน
หนึ่งสามารถกำหนดและการกำหนดเป็นเมื่อs_2 แต่วิธีคำนวณนี้เพิ่มขึ้น?
อาจเป็นไปได้ว่าการคำนวณชุดใหญ่นั้นไม่มีประโยชน์เลยชุดเล็กควรน่าสนใจยิ่งขึ้นเช่นเดียวกับในอัลกอริทึมค้นหายูเนี่ยน