มีอัลกอริทึมออนไลน์เพื่อติดตามส่วนประกอบในกราฟที่ไม่ได้เปลี่ยนทิศทางหรือไม่?


12

ปัญหา

ฉันมีกราฟที่ไม่มีทิศทาง (ซึ่งมีหลายขอบ) ซึ่งจะเปลี่ยนแปลงตลอดเวลาโหนดและขอบอาจถูกแทรกและลบ ในการแก้ไขกราฟแต่ละครั้งฉันต้องอัปเดตส่วนประกอบที่เชื่อมต่อของกราฟนี้

คุณสมบัติ

คุณสมบัติเพิ่มเติมคือจะไม่มีการเชื่อมต่อสองส่วนประกอบอีกต่อไป เห็นได้ชัดว่ากราฟสามารถมีรอบเป็นจำนวนเท่าใดก็ได้ (มิฉะนั้นการแก้ปัญหาจะไม่สำคัญ) ถ้า edge ไม่มีโหนดnมันจะไม่นำโหนดนั้นมาใช้ แต่ถ้าn อีก็สามารถเปลี่ยนไปn อีennene

แนวทาง

ฉันมีสองแนวทางที่เป็นไปได้ แต่เท่าที่คุณจะเห็นพวกเขาน่ากลัว:

ช้ารัฐน้อย

ฉันสามารถค้นหา (dfs / bfs) กราฟเริ่มต้นจากองค์ประกอบที่แก้ไขทุกครั้ง สิ่งนี้ช่วยประหยัดพื้นที่ แต่ช้าเนื่องจากเรามี O (n + m) สำหรับการแก้ไขแต่ละครั้ง

Stateful fast (-er) (?) วิธีการ

ฉันสามารถเก็บเส้นทางที่เป็นไปได้ทั้งหมดสำหรับแต่ละโหนดไปยังโหนดที่เป็นไปได้ทั้งหมด แต่ถ้าฉันเห็นอย่างถูกต้องสิ่งนี้จะใช้หน่วยความจำ O (n ^ 4) แต่ฉันไม่แน่ใจว่าการปรับปรุงรันไทม์เป็นอย่างไร (ถ้ามีอย่างใดอย่างหนึ่งเพราะฉันต้องเก็บข้อมูลที่ทันสมัยสำหรับทุกโหนดในองค์ประกอบเดียวกัน)

คำถาม

คุณมีพอยน์เตอร์ใด ๆ ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับปัญหานั้นหรืออัลกอริทึมบางอย่างที่ฉันสามารถสร้างได้อย่างไร

บันทึก

หากมีการปรับปรุงมากมายในรันไทม์ / หน่วยความจำฉันสามารถใช้ชีวิตด้วยโซลูชันที่ไม่เหมาะสมซึ่งบางครั้งบอกว่ามีสององค์ประกอบเป็นหนึ่ง แต่แน่นอนฉันต้องการโซลูชันที่เหมาะสมที่สุด


ถ้าฉันอ่านสองประโยคสุดท้ายของคุณใน "คุณสมบัติ" ถูกต้องดูเหมือนว่าคุณสนใจในปัญหาที่ลดลงเท่านั้น ถ้าเป็นเช่นนั้นอย่าลืมตรวจสอบงานของ Thorup เกี่ยวกับการเชื่อมต่อแบบไดนามิกที่ลดลง (คุณสามารถค้นหาการอ้างอิงผ่านพอยน์เตอร์ของ JeffE ซึ่งเป็นปัญหาแบบไดนามิกอย่างสมบูรณ์)
Maverick Woo

@Maverick Woo: สามารถมีขอบ / โหนดใหม่ได้เสมอ ฉันคิดว่าคุณสมบัติสุดท้ายนั้นไม่แรงมากด้วยเหตุนี้ มันยังคงมีคุณสมบัติเป็นแบบลดลง?
bitmask

โอ๊ะฉันไม่รู้ว่าฉันพลาดประโยคแรกไปได้อย่างไร ... ดู "คำตอบ" ด้านล่าง
นอกรีต Woo

คำตอบ:


17

มีโครงสร้างข้อมูลหลายอย่างที่สนับสนุนการแทรกขอบการลบขอบและการสอบถามการเชื่อมต่อ (ทั้งสองจุดยอดนี้อยู่ในองค์ประกอบที่เชื่อมต่อเดียวกันหรือไม่) ในเวลาโพลี


มันฟังดูยอดเยี่ยมเมื่อฉันอ่านเอกสารฉันจะยอมรับสิ่งนี้มากที่สุด
bitmask

6

ฉันคิดว่าคุณกำลังมองหาสิ่งที่เรียกว่าอัลกอริทึมกราฟแบบไดนามิกสำหรับการแยกส่วนประกอบที่เชื่อมต่อ อัลกอริทึมโดย Holm, de Lichtenberg และ Thorup [HLT01] ได้ทำการตัดจำหน่ายเวลาโพลิไทกาติกแบบไมโครในการอัพเดทแต่ละครั้ง นานมาแล้วที่ฉันดูปัญหาครั้งล่าสุดดังนั้นอาจมีความคืบหน้าล่

[HLT01] Jacob Holm, Kristian de Lichtenberg และ Mikkel Thorup โพลีลอการิทึม จำกัด อัลกอริธึมแบบไดนามิกเต็มรูปแบบสำหรับการเชื่อมต่อต้นไม้ทอดขั้นต่ำ 2 ขอบและ biconnectivity วารสาร ACM , 48 (4): 723–760, กรกฎาคม 2001 http://doi.acm.org/10.1145/502090.502095


นำโชคร้ายมา คุณเป็นหนี้โค้ก
Jeffε

@JeffE: ฉันไม่รู้เกี่ยวกับเกมนั้น แต่ตามกฎฉันไม่ได้แพ้ในเกม (ฉันแค่อยู่ในสถานะ "นำโชคร้าย") ดังนั้นฉันจึงไม่ต้องติดโค้กถ้าคุณไม่พูดอะไรเพิ่มเติม ... โอ้รอสักครู่
Tsuyoshi Ito

ถ้าเพียง แต่คุณสามารถค้าในจุดชื่อเสียง :)
Suresh Venkat

5

(ตอนนี้ให้ฉันแค่ติดกับแบบสอบถามการเชื่อมต่อซึ่งน่าเสียดายที่อาจไม่เพียงพอสำหรับแอปพลิเคชันของคุณ)

งานก่อนหน้านี้จำนวนมากเกี่ยวกับปัญหาการเชื่อมต่อแบบไดนามิกอยู่ในรูปแบบการอัพเดท edge: คุณถือว่าจำนวนจุดยอดคงที่และคุณสามารถแทรกและ / หรือลบขอบขณะทำการสืบค้นได้ หากคุณสามารถแทรก (ลบ) เท่านั้นนั่นคือส่วนเพิ่ม (ลดลง) หากคุณสามารถทำได้ทั้งสองอย่างนั่นก็เป็นแบบไดนามิก งานของ Thorup ตามที่ JeffE กล่าวไว้ (และตัวฉันเองในความคิดเห็น) ล้วน แต่เป็นการปรับปรุงที่ล้ำสมัย

AFAIK ชุมชน CS ทฤษฎีเป็นเพียงการเริ่มต้นที่จะดูการปรับปรุงจุดสุดยอดสำหรับกราฟทั่วไป มีงานทำลายพื้นโดย Chan, Pătraşcuและ Roditty ใน FOCS 2008 ดูลิงค์นี้สำหรับการแก้ไข (กันยายน 2010) ล่าสุดและการอ้างอิงภายใน


ทำไมคุณถึงคิดว่า Holm et อัล วิธีการใดที่ใช้ไม่ได้กับปัญหาของฉัน ฉันจะยอมรับมัน
bitmask

1
หากกราฟของคุณมีขอบเขตที่ จำกัด คุณสามารถจำลองการอัพเดตจุดสุดยอดโดยใช้การอัปเดตขอบ มิฉะนั้นการอัพเดทจุดสุดยอดครั้งเดียว (เช่นการลบจุดศูนย์กลางของกราฟดาว) สามารถเปลี่ยนการเชื่อมต่อของกราฟได้อย่างมากและในกรณีนี้คุณต้องการผลลัพธ์ของ Chan et al
Maverick Woo

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