สมมติว่าฉันมีกราฟหร็อมแหร็มไม่ จำกัด ทิศทางและจำเป็นต้องสามารถเรียกใช้แบบสอบถามต่อไปนี้ได้อย่างมีประสิทธิภาพ:
- - ส่งคืนหากมีเส้นทางระหว่างถึงมิฉะนั้น
- - ส่งคืนชุดของโหนดที่สามารถเข้าถึงได้จาก
สิ่งนี้ทำได้ง่ายโดยการคำนวณส่วนประกอบที่เชื่อมต่อของกราฟไว้ล่วงหน้า คำสั่งทั้งสองสามารถทำงานในเวลา
ถ้าฉันยังต้องสามารถเพิ่มขอบโดยพลการ - - จากนั้นฉันสามารถเก็บส่วนประกอบไว้ในโครงสร้างข้อมูลที่ไม่จัดวางได้ เมื่อใดก็ตามที่มีการเพิ่มขอบถ้ามันเชื่อมต่อสองโหนดในองค์ประกอบที่แตกต่างกันฉันจะรวมองค์ประกอบเหล่านั้น สิ่งนี้จะเพิ่มค่าใช้จ่ายให้กับและราคาเป็นและ (ซึ่งอาจเป็น )
ถ้าฉันต้องการลบขอบโดยพลการโครงสร้างข้อมูลที่ดีที่สุดในการจัดการกับสถานการณ์นี้คืออะไร เป็นที่รู้จักกันหรือไม่ เพื่อสรุปควรสนับสนุนการดำเนินงานต่อไปนี้อย่างมีประสิทธิภาพ:
- - ผลตอบแทนถ้ามีเส้นทางระหว่างและมิฉะนั้นF
- - ผลตอบแทนที่ชุดของโหนดที่สามารถเข้าถึงได้จากN
- - เพิ่มขอบระหว่างสองโหนด โปรดทราบว่า ,หรือทั้งคู่อาจไม่เคยมีมาก่อน
- - ลบขอบที่มีอยู่ระหว่างสองโหนด
(ฉันสนใจสิ่งนี้จากมุมมองของการพัฒนาเกม - ปัญหานี้ดูเหมือนว่าจะเกิดขึ้นในบางสถานการณ์บางทีผู้เล่นสามารถสร้างสายไฟฟ้าและเราจำเป็นต้องรู้ว่าเครื่องกำเนิดไฟฟ้าเชื่อมต่อกับอาคารหรือไม่ผู้เล่นสามารถล็อคได้ และปลดล็อคประตูและเราจำเป็นต้องรู้ว่าศัตรูสามารถเข้าถึงผู้เล่นได้หรือไม่ แต่มันเป็นปัญหาที่เกิดขึ้นโดยทั่วไป