วิธีที่เร็วที่สุดในการตรวจสอบการรวมชุดคืออะไร?


24

ได้รับย่อยของ\}nS1,,Sn{1,,d}

ตรวจสอบว่ามีชุดกับS_j (ถ้าเป็นเช่นนั้นค้นหาตัวอย่างถ้าไม่เพียงแค่พูดว่า "ไม่")Si,SjSiSj

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

คำตอบ:


27

คุณไม่สามารถแก้ไขได้ในเวลาO(n2ϵ)สำหรับค่าคงที่ϵ>0ยกเว้นว่าสมมุติฐานเวลาเอ็กซ์โพเนนเชียลที่คาดเดายากเป็นเท็จ

นั่นคือถ้าเรามีขั้นตอนวิธีการดังกล่าวเราสามารถแก้n -variable CNF Satisfiability ในO((2ϵ)n)เวลาสำหรับบางϵ>0 0 เหตุผลก็คือเราสามารถแบ่งตัวแปรในสองส่วนเท่ากันP1และP2ของตัวแปรn/2แต่ละอัน สำหรับแต่ละส่วนเราสร้างตระกูลF1และF2ตามลำดับของส่วนย่อยของข้อด้วยวิธีดังต่อไปนี้ สำหรับการมอบหมายแต่ละครั้งเราจะเพิ่มเซ็ตย่อยที่ประกอบด้วยส่วนคำสั่งที่ไม่พอใจ การก่อสร้างนี้วิ่งในpoly(n)2n/2เวลา

ที่จะเสร็จสิ้นการก่อสร้างเราทราบว่าอินสแตนซ์ CNF เดิมมีทางออก IFF มีเป็นส่วนหนึ่งในF1ซึ่งเป็นเคล็ดย่อยบางอย่างในF_2F2

การเพิ่มองค์ประกอบพิเศษบางอย่างให้กับพื้นดินของคุณนอกเหนือจากองค์ประกอบสำหรับแต่ละประโยคมันไม่ยากเกินไปที่จะฝังปัญหาความไม่ลงรอยกันนี้เป็นคำถามของการรวมชุด คุณโดยทั่วไปใช้เวลาเติมเต็มส่วนย่อยในส่วนF_1F1เพื่อให้แน่ใจว่าทั้งสองชุดในF1จะไม่ถูกนับเป็นการรวมคุณเพิ่มรหัสจาก anti-chain ในองค์ประกอบเพิ่มเติม anti-chain code อื่น (ในองค์ประกอบพิเศษอื่น ๆ ของชุดกราวด์) ถูกใช้ในชุดย่อยของF2เพื่อให้แน่ใจว่าไม่มีคู่เซตย่อยจากF2การรวม ในที่สุดชุดทั้งหมดที่เกิดขึ้นจากF1รวมองค์ประกอบทั้งหมดของรหัส anti-chain ของF2

นี่เป็นคำถามที่รวมไว้ในชุดย่อยบนชุดกราวด์การโต้เถียงกลับไปที่กระดาษต้นของ Ryan Williams (จำไม่ได้ว่าอันไหน) d = p o l y ( n )2n/2+1d=poly(n)


ขอบคุณมากสำหรับคำตอบอย่างรวดเร็ว เรายังมีถ้าเราใช้ Sparsification Lemma ก่อนใช่ไหม? d=O(n)
Karl

9

หากคุณสนใจครอบครัวเซ็ตที่มีดังนั้นวิธีแก้ปัญหาอื่นที่คล้ายคลึงกับแนวคิดที่อยู่ในคำตอบของ Yuval ก็คือการคำนวณการแปลงซีต้าn=ω(2d/2)

fζ(T)=STf(S),

ที่เป็นฟังก์ชั่นตัวบ่งชี้ของครอบครัวการป้อนข้อมูล\} นั่นคือถ้าและอย่างอื่น เห็นได้ชัดว่ามีชุดดังกล่าวว่าถ้าหากสำหรับบาง{F}F = { S 1 , S 2 , , S n } f ( S ) = 1 S F f ( S ) = 0 S iS jf:2[d]RF={S1,S2,,Sn}f(S)=1SFf(S)=0SiSjSiSjS Ffζ(S)>1SF

การคำนวณการแปลงซีตาสามารถคำนวณได้ในเวลาโดยใช้อัลกอริทึมของ Yates ดูตัวอย่างของ TAOCP ของ Knuth, vol 2, §4.6.4 อัลกอริทึมนั้นเป็นโปรแกรมแบบไดนามิกที่ค่อนข้างตรงไปตรงมาและง่ายต่อการปรับเปลี่ยนเพื่อให้ตัวอย่างของชุดรวมหากมีอยู่O(d2d)


มันง่ายกว่าคำตอบของฉัน!
Yuval Filmus

8

ปัญหานี้สามารถแก้ไขได้โดยใช้อัลกอริธึมสำหรับการคูณเมทริกซ์ที่รวดเร็วและฉันก็สงสัยว่ามันจะเทียบเท่ากับการคูณเมทริกซ์ (แม้ว่าฉันจะไม่รู้วิธีใด ๆ ที่จะพิสูจน์เรื่องนี้ได้และฉันก็ไม่คิดว่า ) การแก้ปัญหานี้จะมีเวลาทำงานของ O (n ^ {2.373}) เมื่อ n = d และเวลาทำงานอื่น ๆ สำหรับความสัมพันธ์อื่น ๆ ระหว่าง d และ n

นี่คือวิธีที่คุณแก้ปัญหาโดยใช้การคูณเมทริกซ์: คุณเขียนเวกเตอร์ลักษณะของเซตในแถวของ n คูณ d เมทริกซ์ A และเวกเตอร์ลักษณะของการเติมเต็มชุดในคอลัมน์โฆษณาโดยเมทริกซ์บีคุณ จากนั้นคูณ A ด้วย B คู่ของชุดที่ตัดกันนั้นเป็นตำแหน่งของผลิตภัณฑ์ A * B ที่เท่ากับศูนย์

สำหรับเวลาที่ใช้งานได้ดีที่สุดสำหรับปัญหานี้ให้ดูที่กระดาษของ Huang และ Pan ในเรื่อง ถ้าฉันจำได้อย่างถูกต้องเมื่อ d มีขนาดใหญ่พอเวลาทำงานจะกลายเป็น O (nd) ที่เหมาะสมที่สุด สำหรับ n = d คุณจะมีเวลาทำงาน O (n ^ {2.373}) สำหรับความสัมพันธ์อื่นของ n และ d คุณจะได้รับค่าอื่น ๆ หากอัลกอริทึมที่ดีที่สุดสำหรับการคูณเมทริกซ์สี่เหลี่ยมนั้นมีอยู่คุณจะได้อัลกอริทึมที่มีเวลาทำงาน O (n ^ 2 + nd) สำหรับปัญหาของคุณ ฉันสงสัยว่าไม่มีวิธีที่ดีไปกว่านี้ในการแก้ปัญหาของคุณ แต่ฉันก็ยังห่างไกลจากความมั่นใจ

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


6

ถ้าจากนั้นเราก็รู้ว่าเซตไม่ใช่ antichain โดยบทแทรกของ Sperner และอื่น ๆ เวอร์ชันการตัดสินใจของปัญหากลายเป็นเรื่องเล็กน้อย แต่มันอาจน่าสนใจที่จะพิจารณากรณีที่ใกล้เคียงกับค่านั้น nn>(dd/2)2dπd/2n

ทำงาน Friedgut บนแอร์ดิช-Ko-Rado ทฤษฎีบทที่แสดงให้เห็นว่าได้รับเวกเตอร์ลักษณะครอบครัวย่อยของหนึ่งสามารถหาได้ในเวลาไม่ว่าจะเป็นเป็นครอบครัวตัด (ทุกสององค์ประกอบของตัด). โดยทั่วไปวิธีการของเขาทำให้เราสามารถคำนวณ ที่เป็นฟังก์ชันที่รู้จัก (เฉพาะ) ซึ่งไม่ใช่ - ศูนย์เฉพาะถ้าเป็น disjoint ขึ้นอยู่กับ histogram ของที่เป็นตัวบ่งชี้สำหรับx[ m ] O ( m 2 m ) f f Σ = x , y f S ( x , y ) , S ( x , y ) 0 x , y S ( x , y ) { ( x i , y i ) : i [ d ] } x if[m]O(m2m)ff

Σ=x,yfS(x,y),
S(x,y)0x,yS(x,y){(xi,yi):i[d]}xiix

(ในฐานะที่เป็นกันเราแสดงความคิดเห็นว่าวิธีการของเขายังทำงานถ้าเราจะได้รับทั้งสองครอบครัวและมีความสนใจใน . ใน ทั้งสองกรณีเราจำเป็นต้องคำนวณการแปลงฟูริเยร์ - วอลช์ skewed ของสำหรับพลแล้วโดยที่ขึ้นอยู่กับน้ำหนัก Hamming ของ .)Σ = Σ x F , Y กรัม S ( x , Y ) พีเอฟ, จีพี( 0 , 1 / 2 ) Σ = Σ x T ( x ) F ( x ) กรัม ( x ) T ( x ) xf,gΣ=xf,ygS(x,y)pf,gp(0,1/2)Σ=xT(x)f^(x)g^(x)T(x)x

ทั้งหมดนี้เกี่ยวข้องกับปัญหาที่เกิดขึ้นอย่างไร? พิจารณาครอบครัว ทุกมี disjoint จากทุก\} ตั้งแต่จะได้รับอย่างชัดเจนเราสามารถคำนวณผลงานของคู่เหล่านี้ไป\มีคู่ที่แยกจากกันมากขึ้นอีกไหม? หากมี disjoint จากแล้วและอื่นS_j ดังนั้นจึงเป็นแอนติเจน iff S i{ x } ¯ S i{ y } S ( x , y ) Σ S i{ x } ¯ S

F={Si{x}:i[n]}{Si¯{y}:i[n]}.
Si{x}Si¯{y}S(x,y)ΣSi{x}SiSj¯{y}SiSj¯=SiSjS1,,Sn
Σ=i=1nS(Si{x},Si¯{y}).

อัลกอริทึมนี้วิ่งในเวลาปัจจัยพหุนามในละเลยdเมื่ออยู่ใกล้กับนี้เป็นอย่างดีกว่า2) โดยทั่วไปเราได้รับการปรับปรุงตราบเท่าที่2})O~(n+2d)dn2dO~(n2)n=ω(2d/2)

เนื่องจากเราทราบว่ามีคู่ที่น่าพอใจมีอยู่เราจะหาได้อย่างไร สมมติว่าเราแบ่งชุดออกเป็นสองกลุ่มโดยการสุ่ม ด้วยความน่าจะเป็นประมาณเซตและจะพบว่าตัวเองอยู่ในกลุ่มเดียวกัน หากเราโชคดีเราสามารถใช้อัลกอริทึมของเราในและค้นหาว่าสิ่งใดเป็นของเหล่านี้และลดจำนวนชุดที่เราต้องพิจารณาลงครึ่งหนึ่ง ถ้าไม่เราสามารถลองอีกครั้ง นี้แสดงให้เห็นว่ามีจำนวนที่คาดหวังของโทร oracle กับรุ่นตัดสินใจเราจริงสามารถหาคู่ที่น่าพอใจS_jSiSjS1,,SnG1,G21/2SiSjG1G2O(logn)SiSj

นอกจากนี้เรายังสามารถสุ่มอัลกอริทึม โดยไม่สูญเสียของทั่วไปเช่นสมมติว่า k ในแต่ละขั้นตอนเราแบ่งพาร์ติชันตามแต่ละบิตหนึ่งในพาร์ติชันเหล่านี้จะใส่และในส่วนเดียวกันเสมอยกเว้นว่าพวกเขามีขั้วตรงข้าม เราสามารถทดสอบสิ่งนี้ได้อย่างชัดเจนโดยใช้การดำเนินการเท่านั้น นี่เป็นอัลกอริธึมที่กำหนดไว้ล่วงหน้าโดยใช้ oracle เรียกไปยังเวอร์ชันการตัดสินใจn=2kkxyO(nd)O(log2n)


น่าสนใจ ฉันควรอ่านอะไรถ้าฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้?
Janne H. Korhonen

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