เราจะคำนวณเซตการรวมกลุ่มของครอบครัวเซตได้เร็วแค่ไหน?


20

ได้รับชุดครอบครัวของส่วนย่อยของจักรวาลUให้และเราต้องการคำตอบคือs_2FUS1,S2FS1S2

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

ฉันต้องการสร้างโพสท่าที่สมบูรณ์หรือในที่สุดก็เป็นตารางที่จัดเก็บการบอกเท็จที่แท้จริงว่าเซตใดเป็นเซตย่อยของแต่ละคน|F|2

ให้,และ, สมมติว่าm=SF|S|u=|U|n=|F|u,nm

เราสามารถสร้างเมทริกซ์การบรรจุ (กราฟสองฝ่าย) ในเวลาและจากนั้นสามารถสร้างตารางของการเปรียบเทียบทั้งหมดในเวลาโดยสำหรับแต่ละชุด , ห่วงผ่านทุกองค์ประกอบของชุดอื่น ๆ ทั้งหมดและทำเครื่องหมายชุดที่จะไม่เซตของถ้าพวกเขาองค์ประกอบไม่ได้อยู่ในSรวมเวลาn×uO(un)n2O(nm)SFSSO(nm)

เราสามารถทำอะไรได้เร็วขึ้น? โดยเฉพาะเวลาเป็นไปได้หรือไม่?O((n+u)2)

ฉันพบบทความที่เกี่ยวข้อง:

อัลกอริทึมย่อยแบบสองส่วนอย่างง่ายสำหรับการคำนวณลำดับย่อยบางส่วน (1995) ซึ่งให้อัลกอริทึมO(m2/log(m))

ลำดับย่อยบางส่วน: คอมพิวเตอร์และ Combinatoricsปรับปรุงด้านบนเล็กน้อย แต่ก็อ้างว่ากระดาษข้างต้นแก้ปัญหาในเวลาโดยที่คือจำนวนชุดสูงสุดที่ใช้องค์ประกอบร่วมกัน แต่ฉันไม่เข้าใจผลลัพธ์นี้O(md)d

ในบทความระหว่างและO(nm)O(nα)ผู้เขียนแสดงวิธีการในกราฟหาส่วนประกอบที่เชื่อมต่อหลังจากลบพื้นที่ใกล้เคียงปิดของจุดสุดยอดโดยใช้การคูณเมทริกซ์ นี้สามารถใช้ในการคำนวณ poset ชุดรวมโดยการหาส่วนประกอบทั้งหมดที่มี singletons กับรันไทม์ของ{2.79})O((n+u)2.79)

การอภิปรายในฟอรัมนี้เกี่ยวข้องกับ: วิธีใดที่เร็วที่สุดในการตรวจสอบการรวมชุด ซึ่งหมายถึงลดผูกพันของepsilon})O(n2ϵ)


เพียงข้อเสนอแนะ: คุณช่วยลดความซับซ้อนของคำถามโดยการตั้งค่าหรือไม่? หรือพารามิเตอร์ทั้งสองมีความสำคัญในใบสมัครของคุณ? u=n
โคลิน McQuillan

ในแอปพลิเคชันของฉันฉันมีที่แปลว่ามีขนาดเล็กลง < <u<<n<<2u<<
Martin Vatshelle

คำตอบ:


2

หากการสุ่มอยู่ในขอบเขตความคิดคร่าวๆอย่างหนึ่งก็คือการสร้างฟังก์ชั่น "การสุ่มลายมือชื่อโมโนโทนิก" และใช้มันเพื่อประมาณความสัมพันธ์ของเซตย่อย (ตัวกรอง la Bloom) น่าเสียดายที่ฉันไม่ทราบวิธีที่จะทำให้สิ่งนี้เป็นอัลกอริทึมที่ใช้งานได้จริง แต่นี่คือการประมาณการบางอย่างที่ไม่ได้พิสูจน์ความคิดที่เป็นไปไม่ได้ทันที นี้ไกลจากโซลูชันที่มีประโยชน์ แต่ฉันจะเขียนมันออกมาในกรณีที่ช่วยได้

สมมติว่าความเรียบง่ายที่เซตทั้งหมดมีขนาดใกล้เคียงกันพูดและที่(U) เราสามารถสันนิษฐานได้ว่ามิฉะนั้นเราจะทำ กำหนด หมายเหตุว่า .s = o ( U ) 1 « s คิว|S|=s±O(1)s=o(u)1sP»1

q=[s/2]p=[(uq)(sq)]
p1

นี่เป็นส่วนที่ใช้การไม่ได้ สุ่มเลือกเซตย่อยพร้อมการแทนที่แต่ละขนาดและกำหนดฟังก์ชันโดย iffสำหรับบางฉันด้วย fixed และเปลี่ยนแปลงแบบสุ่มเรามี เนื่องจากเป็นเสียงโมโนหมายถึงpA1,,ApUqf:2U{0,1}f(S)=1AiSiSAi,f

Pr(f(S)=0)=Pr(i.AiS)=Pr(A1S)p=(1(sq)/(uq))p=eΘ(1)
f(S)STf(S)f(T)(T) ถ้าแก้ไขบางตัว ความน่าจะเป็นที่ตรวจพบคือ TStTSfTS
Pr(f(S)=0<1=f(T))=Pr(f(S)=0)Pr(f(T)=1|f(S)=0)=eΘ(1)Pr(i.AiT,AiTS0|f(S)=0)=eΘ(1)Pr(i.tAiT|f(S)=0)eΘ(1)Pr(i.tAiT)eΘ(1)pPr(tA1T)eΘ(1)p(sq1)/(uq)eΘ(1)pqsq(sq)/(uq)=eΘ(1)
บางขั้นตอนเหล่านั้นค่อนข้างผอมบาง แต่ฉันไม่มีเวลาที่จะปรับปรุงพวกเขาในคืนนี้ ไม่ว่าในกรณีใดก็ตามถ้าอย่างน้อยก็ไม่สามารถสร้างฟังก์ชั่นลายเซ็นต์ที่มีความเป็นไปได้ที่จะแยกเซ็ตย่อยออกจาก nonsubsets จำนวนลอการิทึมของฟังก์ชั่นดังกล่าวจะแยกแยะคู่ทั้งหมดได้อย่างถูกต้อง หากสร้างฟังก์ชันลายเซ็นและคำนวณสามารถลดลงเป็นเวลาผลลัพธ์จะเป็นอัลกอริทึมโดยรวมff(S)O~(n+u)O~(n2+u2)

แม้ว่าการคำนวณข้างต้นนั้นถูกต้อง แต่ฉันก็ยังไม่รู้ว่าจะสร้างฟังก์ชั่นลายมือชื่อโมโนโทนิกได้อย่างไรด้วยคุณสมบัติที่ต้องการอย่างรวดเร็ว อาจเป็นไปได้ว่าเทคนิคนี้จะไม่ขยายขนาดที่แตกต่างกันอย่างมีนัยสำคัญ

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