Anda tidak dapat menyelesaikannya dalam waktu untuk konstanta kecuali Hipotesis Waktu Eksponensial Kuat salah.O(n2−ϵ)ϵ>0
Yaitu, jika kita memiliki algoritma seperti itu, kita bisa menyelesaikan -variable CNF Satisfiability di waktu untuk beberapa . Alasannya adalah bahwa kita bisa membagi variabel dalam dua bagian yang sama dan dari variabel masing-masing. Untuk setiap bagian, kami membuat keluarga dan F_2 masing-masing subset dari klausa dengan cara berikut. Untuk setiap penugasan, kami menambahkan subset yang terdiri dari klausa yang tidak dipenuhi oleh penugasan. Konstruksi ini berjalan dalam poli (n) 2 ^ {n / 2} waktu.O ( ( 2 - ϵ ′ ) n ) ϵ ′ > 0 P 1 P 2 n / 2 F 1 F 2 p o l y ( n ) 2 n / 2nO((2−ϵ′)n)ϵ′>0P1P2n/2F1F2poly(n)2n/2
Untuk menyelesaikan konstruksi, kami mencatat bahwa instance CNF asli memiliki solusi jika ada subset di yang terpisah untuk beberapa subset di .F 2F1F2
Menambahkan beberapa elemen tambahan ke set ground Anda selain yang untuk setiap klausa, tidak terlalu sulit untuk menyematkan masalah keterputusan ini sebagai masalah inklusi set. Anda pada dasarnya mengambil pelengkap dari subset di . Untuk memastikan dua set di tidak dihitung sebagai penyertaan, Anda menambahkan kode dari anti-rantai pada elemen tambahan. Kode anti-rantai lain (pada elemen tambahan lainnya dari set ground) digunakan pada himpunan bagian dari untuk memastikan tidak ada pasangan himpunan bagian dari membentuk penyertaan. Akhirnya, semua set yang terbentuk dari mencakup semua elemen anti-rantai .F 1 F 2 F 2 F 1 F 2F1F1F2F2F1F2
Ini adalah set pertanyaan inklusi pada himpunan pada himpunan ground . Argumen pada dasarnya kembali ke beberapa makalah awal Ryan Williams (tidak ingat yang mana). d = p o l y ( n )2n/2+1d=poly( n )
Jika Anda tertarik untuk menetapkan keluarga dengan , maka solusi lain secara konseptual sangat mirip dengan yang diuraikan dalam jawaban Yuval adalah untuk menghitung transformasi zetan = ω ( 2d/2)
di mana adalah fungsi indikator dari keluarga input . Yaitu, jika dan sebaliknya. Jelas ada set sehingga jika dan hanya jika untuk beberapa .F = { S 1 , S 2 , … , S n } f ( S ) = 1 S ∈ F f ( S ) = 0 S i ≠ S j S i ⊆ S j f ζ ( S ) > 1 S ∈ Ff:2[d]→R F={S1,S2,…,Sn} f(S)=1 S∈F f(S)=0 Si≠Sj Si⊆Sj fζ(S)>1 S∈F
Transformasi zeta dapat dihitung dalam waktu menggunakan algoritma Yates, lihat misalnya TAOCP Knuth, vol. 2, §4.6.4. Algoritme itu sendiri adalah pemrograman dinamis yang cukup mudah, dan mudah untuk memodifikasinya untuk memberikan contoh set yang disertakan jika ada.O(d2d)
sumber
Masalah ini dapat diatasi dengan menggunakan algoritma untuk perkalian matriks cepat, dan saya juga menduga itu secara komputasi setara dengan perkalian matriks (meskipun saya tidak tahu cara untuk membuktikan ini, dan saya tidak berpikir teknik untuk membuktikan ini ada ). Solusi ini akan memiliki waktu berjalan O (n ^ {2.373}) ketika n = d, dan waktu berjalan lainnya untuk hubungan lain antara d dan n.
Inilah cara Anda menyelesaikannya menggunakan perkalian matriks: Anda menulis vektor karakteristik dari himpunan di baris n oleh d matriks A, dan vektor karakteristik dari komplemen himpunan himpunan di kolom iklan dengan n matriks B. Anda lalu kalikan A dengan B. Pasangan set yang berpotongan persis lokasi produk A * B yang sama dengan nol.
Untuk waktu berjalan terbaik yang diketahui untuk masalah ini, lihat kertas Huang dan Pan pada subjek. Jika saya ingat dengan benar, ketika d menjadi cukup besar, waktu berjalan akan menjadi O (nd) yang jelas-optimal. Untuk n = d, Anda akan memiliki waktu berjalan O (n ^ {2.373}). Untuk relasi n dan d lainnya, Anda akan mendapatkan nilai lain. Jika algoritma optimal untuk perkalian matriks persegi panjang ada, Anda akan mendapatkan algoritma dengan waktu berjalan O (n ^ 2 + nd) untuk masalah Anda. Saya kira tidak ada cara yang lebih baik dari ini untuk menyelesaikan masalah Anda, tetapi saya masih jauh dari yakin.
Solusi ini mungkin tidak praktis digunakan, karena konstanta dari algoritma ini terlalu besar. Algoritma Strassen mungkin memberikan peningkatan atas solusi naif untuk nilai wajar n dan d, tapi saya bahkan tidak yakin tentang itu. Namun, masalah yang tampaknya sangat terkait dengan perkalian matriks tampaknya jarang memiliki algoritma kombinatorial yang lebih baik daripada algoritma naif (oleh lebih dari faktor polylogaritmik), jadi jika saya harus menebak, saya akan menebak bahwa tidak ada algoritma yang baik untuk masalah Anda yang secara signifikan lebih baik daripada yang naif, menggunakan teknik saat ini.
sumber
Jika maka kita tahu bahwa himpunan itu bukan antikimia oleh lemma Sperner, dan versi keputusan dari masalah menjadi sepele. Tetapi mungkin menarik untuk mempertimbangkan kasus di manann>(dd/2)≈2dπd/2√ n dekat dengan nilai itu.
Pekerjaan Friedgut ini pada Erdös-Ko-Rado teorema menunjukkan bahwa mengingat karakteristik vektor dari keluarga himpunan bagian dari [ m ] , satu dapat menemukan di waktu O ( m 2 m ) apakah f adalah keluarga berpotongan (setiap dua unsur f memotong). Lebih umum, metodenya memungkinkan kita untuk menghitung Σ = Σ x , y ∈ f S ( x , y ) , dimana S ( x , y )f [m] O(m2m) f f
(Sebagai tambahan, kami berkomentar bahwa metodenya juga berfungsi jika kita diberikan dua keluarga , dan tertarik pada Σ = ∑ x ∈ f , y ∈ g S ( x , y ) . Dalam kedua kasus, kita perlu menghitung p -skewed Fourier-Walsh transformasi dari f , g untuk sewenang-wenang p ∈ ( 0 , 1 / 2 ) , dan kemudian Σ = Σ x T (f, g Σ = ∑x ∈ f, y∈ gS( x , y) hal f, g p ∈ ( 0 , 1 / 2 ) .), di manaT(x)hanya bergantung pada berat Hamming darixΣ = ∑xT( x ) f^( x ) g^( x ) T( x ) x
Bagaimana semua ini berhubungan dengan masalah yang dihadapi? Pertimbangkan keluarga Setiap S i ∪ { x } terpisah dari setiap ¯ S i ∪ { y } . Sejak S ( x ,
Algoritma ini berjalan dalam waktu , mengabaikan faktor polinomial dalam d . Ketika n mendekati 2 d , ini jauh lebih baik daripada ˜ O ( n 2 ) . Secara umum, kami mendapatkan peningkatan selama n = ω ( 2 d / 2 ) .O~(n+2d) d n 2d O~(n2) n=ω(2d/2)
Mengingat kita tahu bahwa ada pasangan yang memuaskan , bagaimana kita menemukannya? Misalkan kita membagi semua set S 1 , ... , S n menjadi dua kelompok G 1 , G 2 secara acak. Dengan probabilitas kira-kira 1 / 2 , set S i dan S j akan menemukan diri mereka dalam kelompok yang sama. Jika kami sangat beruntung, kami dapat menjalankan algoritme kami di G 1 dan G 2Si⊆Sj S1,…,Sn G1,G2 1/2 Si Sj G1 G2 , temukan di mana milik siapa ini, dan jadi separuh jumlah set yang perlu kita pertimbangkan. Jika tidak, kita bisa coba lagi. Ini menunjukkan bahwa dengan perkiraan jumlah panggilan oracle ke versi keputusan, kita benar-benar dapat menemukan pasangan yang memuaskan S i ⊆ S j .O(logn) Si⊆Sj
Kami juga dapat derandomisasi algoritme. Tanpa kehilangan sifat umum, misalkan . Dalam setiap langkah, kita mempartisi sesuai dengan masing-masing bit k . Salah satu dari partisi ini akan selalu menempatkan x dan y di bagian yang sama, kecuali mereka memiliki polaritas yang berlawanan; kita dapat menguji untuk ini secara eksplisit hanya menggunakan operasi O ( n d ) . Ini memberikan algoritma deterministik menggunakan O ( log 2 n ) panggilan oracle ke versi keputusan.n=2k k x y O(nd) O(log2n)
sumber