ปัญหา
ฉันมีกราฟที่ไม่มีทิศทาง (ซึ่งมีหลายขอบ) ซึ่งจะเปลี่ยนแปลงตลอดเวลาโหนดและขอบอาจถูกแทรกและลบ ในการแก้ไขกราฟแต่ละครั้งฉันต้องอัปเดตส่วนประกอบที่เชื่อมต่อของกราฟนี้
คุณสมบัติ
คุณสมบัติเพิ่มเติมคือจะไม่มีการเชื่อมต่อสองส่วนประกอบอีกต่อไป เห็นได้ชัดว่ากราฟสามารถมีรอบเป็นจำนวนเท่าใดก็ได้ (มิฉะนั้นการแก้ปัญหาจะไม่สำคัญ) ถ้า edge ไม่มีโหนดnมันจะไม่นำโหนดนั้นมาใช้ แต่ถ้าn ∈ อีก็สามารถเปลี่ยนไปn ∉อี
แนวทาง
ฉันมีสองแนวทางที่เป็นไปได้ แต่เท่าที่คุณจะเห็นพวกเขาน่ากลัว:
ช้ารัฐน้อย
ฉันสามารถค้นหา (dfs / bfs) กราฟเริ่มต้นจากองค์ประกอบที่แก้ไขทุกครั้ง สิ่งนี้ช่วยประหยัดพื้นที่ แต่ช้าเนื่องจากเรามี O (n + m) สำหรับการแก้ไขแต่ละครั้ง
Stateful fast (-er) (?) วิธีการ
ฉันสามารถเก็บเส้นทางที่เป็นไปได้ทั้งหมดสำหรับแต่ละโหนดไปยังโหนดที่เป็นไปได้ทั้งหมด แต่ถ้าฉันเห็นอย่างถูกต้องสิ่งนี้จะใช้หน่วยความจำ O (n ^ 4) แต่ฉันไม่แน่ใจว่าการปรับปรุงรันไทม์เป็นอย่างไร (ถ้ามีอย่างใดอย่างหนึ่งเพราะฉันต้องเก็บข้อมูลที่ทันสมัยสำหรับทุกโหนดในองค์ประกอบเดียวกัน)
คำถาม
คุณมีพอยน์เตอร์ใด ๆ ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับปัญหานั้นหรืออัลกอริทึมบางอย่างที่ฉันสามารถสร้างได้อย่างไร
บันทึก
หากมีการปรับปรุงมากมายในรันไทม์ / หน่วยความจำฉันสามารถใช้ชีวิตด้วยโซลูชันที่ไม่เหมาะสมซึ่งบางครั้งบอกว่ามีสององค์ประกอบเป็นหนึ่ง แต่แน่นอนฉันต้องการโซลูชันที่เหมาะสมที่สุด