มีอัลกอริทึมที่มีประสิทธิภาพในการรักษาข้อมูลการเชื่อมต่อสำหรับ DAG ต่อหน้า / ลบหรือไม่?


17

ด้วยกราฟ acyclic โดยตรงเป็นไปได้หรือไม่ที่จะสนับสนุนการดำเนินการต่อไปนี้ได้อย่างมีประสิทธิภาพ?G(V,E)

  • : กำหนดถ้ามีเส้นทางใน GจากโหนดไปยังโหนดisConnected(G,a,b)Gab
  • : เพิ่มขอบจาก aถึง bในกราฟ Glink(G,a,b)abG
  • : ลบขอบจาก aถึง bใน Gunlink(G,a,b)abG
  • : เพิ่มจุดสุดยอดไปที่ Gadd(G,a)
  • : ลบจุดสุดยอดออกจาก Gremove(G,a)

หมายเหตุเล็กน้อย:

  • ถ้าเราไม่ได้รับอนุญาตดูเหมือนว่ามันจะเป็นเรื่องง่ายที่จะรักษาข้อมูลการเชื่อมโยงโดยใช้เคล็ดชุดชนิดโครงสร้างข้อมูลunlink
  • เห็นได้ชัดว่าอาจจะดำเนินการโดยใช้ความลึกหรือกว้างแรกค้นหาโดยใช้แทนตัวชี้ตามที่ไร้เดียงสาของกราฟ แต่นี่ไม่มีประสิทธิภาพisConnected

ฉันหวังว่าจะตัดจำหน่ายค่าคงที่หรือเวลาลอการิทึมสำหรับการดำเนินการทั้งสามนี้ เป็นไปได้ไหม


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

1
คุณสามารถอธิบายวิธีแก้ปัญหากรณีที่ง่ายกว่า (โดยไม่ต้องยกเลิกการเชื่อมโยง) โดยใช้โครงสร้างข้อมูลแบบไม่ต่อเนื่องชุด?
jbapple

@Tsuyoshi - ลิงก์ในคำถามนั้นดูน่าสนใจฉันกำลังดูพวกเขาตอนนี้
Justin Kilpatrick

(1) คุณกำลังมองหาอัลกอริทึมกราฟแบบไดนามิกสำหรับการเข้าถึงโดยตรงที่มีข้อ จำกัด ว่ากราฟเป็น DAG ถ้าฉันไม่เข้าใจผิดความสามารถในการเข้าถึงโดยตรงแบบไดนามิกนั้นหนักกว่าคู่ที่ไม่ได้ใช้เส้นทางมาก แต่ที่นี่คุณสมบัติ DAG อาจช่วยได้ (2) removeลบขอบเหตุการณ์หรือไม่ ถ้าเป็นเช่นนั้นการกำหนดให้การดำเนินการเป็นเวลา O (บันทึก n) อาจจะมากเกินไปที่จะหวังว่า….
Tsuyoshi Ito

คำตอบ:


19

ปัญหาที่คุณอธิบายไว้คือความสามารถในการเข้าถึง DAG แบบไดนามิกอย่างสมบูรณ์ (เรียกอีกอย่างว่าการปิด Transitive แบบไดนามิกอย่างสมบูรณ์ใน DAG) มันเรียกว่าไดนามิกอย่างเต็มที่เนื่องจากผู้คนยังศึกษารุ่นที่มีความเป็นไปได้ในการลบเท่านั้น (จากนั้นจะเรียกว่าการเข้าถึงได้แบบลดลง) และตำแหน่งที่แทรกได้เท่านั้น (เรียกว่าการเข้าถึงได้เพิ่มขึ้น)

มีการแลกเปลี่ยนไม่กี่ครั้งระหว่างเวลาอัปเดตและเวลาคิวรี ให้คือจำนวนขอบและnจำนวนจุดยอด สำหรับ DAGs Demetrescu และ Italiano (FOCS'00) ให้โครงสร้างข้อมูลแบบสุ่มซึ่งรองรับการอัปเดต (การแทรกขอบหรือลบ) ในเวลา O ( n 1.58 ) และเวลาสอบถามการเข้าถึงได้ใน O ( n 0.58 ) เวลา (สนับสนุนการแทรก / ลบโหนด) , ใน O (1) เวลา); ผลลัพธ์นี้ขยายโดย Sankowski (FOCS'04) เพื่อทำงานกับกราฟกำกับทั่วไป นอกจากนี้สำหรับ DAG, Roditty (SODA'03) แสดงให้เห็นว่าคุณสามารถรักษาเมทริกซ์การปิดสกรรมกริยาได้ในเวลารวม O ( m n + I · n 2 + D ) โดยที่mnn1.58n0.58mn+I·n2+Dคือจำนวนการแทรก, Dจำนวนการลบและแน่นอนเวลาการสืบค้นคือ O ( 1 )ID1

สำหรับกราฟที่กำกับทั่วไปจะทราบเวลา (อัปเดตแบบสอบถาม) ต่อไปนี้: (O ( ), O (1)) (Demetrescu และ Italiano FOCS'00 (ตัดจำหน่าย), Sankowski FOCS'04 (กรณีที่แย่ที่สุด)), ( O ( m n2 ),O(mn )) (Roditty, Zwick FOCS'02), (O (m+nบันทึกn), O (n)) (Roditty, Zwick STOC'04), (O (n 1.58 ), O (n 0.58 )) และ (O (n 1.495 ), O (n 1.495 )) โดย Sankowski (FOCS'04)O(nm+nlognnn1.58n0.58n1.495n1.495

การได้รับเวลาสอบถามแบบ polylogarithmic โดยไม่เพิ่มเวลาการอัปเดตมากเกินไปเป็นปัญหาเปิดที่สำคัญแม้แต่สำหรับ DAG


1
ขอบคุณสำหรับคำตอบ. แม้ว่าฉันต้องบอกว่าฉันผิดหวังที่ขอบเขตเหล่านั้นแย่เพียงใด :(
Justin Kilpatrick

1
คำถามที่เกี่ยวข้อง: คุณสามารถชี้ให้ฉันไปที่การอ้างอิงใด ๆ เกี่ยวกับปัญหาที่เรียบง่ายการเข้าถึงได้เพิ่มขึ้นและการเข้าถึงที่ลดลงสำหรับ DAG
Justin Kilpatrick

นี้ไม่ได้ตะเข็บดีกว่า DFS ไร้เดียงสาเข้าใกล้หรือ(O(1),O(n^2)) (O(m),O(n+m))
โทมัส Ahle

4

ผมคิดว่าผลลัพธ์ที่ดีที่สุดเพื่อให้ห่างไกลจะกล่าวถึงใน"mantaining แบบไดนามิกสำหรับเมทริกซ์อย่างเต็มที่แบบไดนามิกสกรรมกริยาปิด" บทความนั้นกล่าวถึงอัลกอริทึมแบบสุ่มด้วยเวลาสอบถามข้อมูลและเวลาอัปเดตO ( n 1.58 )O(n0.58)O(n1.58)

(สิ่งนี้ครอบคลุมเฉพาะรุ่นแรกของคำถามของคุณโดยมีlinkและunlinkไม่มีaddและremove)


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