Masalahnya adalah NP-lengkap dan karenanya tidak mungkin mengakui algoritma waktu polinomial. Di bawah ini adalah bukti dari NP-kelengkapan masalah, yang ditunjukkan oleh pengurangan dari 1-in-3-SAT.
Biarkan menjadi instance dari 1-IN-3-SAT, di mana kita diberi formula 3-CNF-SAT yang diminta untuk menemukan tugas yang memuaskan di mana setiap klausa dipenuhi oleh tepat satu literal. Misalkan adalah himpunan variabel, dan adalah himpunan klausa .ϕV(ϕ)nC(ϕ)m
Kami membuat instance dengan anggaran (jumlah simpul biru yang diizinkan).G=(A,B,E)b=n+m
Untuk setiap variabel , buat dua simpul merah dan
di bersama dengan simpul biru di berdekatan dengan keduanya. Ini memaksa salah satu dari atau untuk dibalik. Kami juga berakhir dengan membalik "simpul variabel", sehingga menggunakan bagian pertama dari anggaran.x∈V(ϕ)vxvx¯¯¯Ab+1Bvxvx¯¯¯n
Catatan: adalah satu-satunya simpul di
.{vx,vx¯¯¯∣x∈V(ϕ)}A
Untuk setiap klausa, katakanlah , kita membuat simpul biru dan tiga simpul merah ekstra , semua di . Biarkan semuanya sepenuhnya berdekatan dengan simpul biru dan sambungkan ke , ke
, dan ke .c=x∨y¯¯¯∨zb+1vx∈c,vy¯¯¯∈c,vz∈cBvx,vy¯¯¯,vzb+1vxvx∈cvyvy¯¯¯∈cvzvz∈c
Sekarang, karena setiap gadget klausa memiliki simpul biru, kita tahu bahwa satu
atau tiga literal dalam klausa tersebut telah dibalik. Misalkan tiga telah dibalik untuk salah satu klausa. Namun kami menggunakan setidaknya anggaran .b+1n+m+2
Misalkan adalah instance ya dengan penugasan 1-in-3 . Balikkan setiap simpul yang berhubungan dengan . Karena setiap klausa dipenuhi oleh tepat satu variabel, untuk setiap klausa sekarang ada satu titik biru, dan untuk setiap variabel, tepat satu dari mereka berwarna biru, maka kita memiliki simpul biru.ϕα:V(ϕ)→{⊤,⊥}αn+m=b
Pål GD menjelaskan bahwa masalahnya adalah NP-hard, jadi langkah selanjutnya adalah mencoba menemukan algoritma yang masuk akal untuk masalah Anda.
Saya akan perhatikan bahwa masalah Anda dapat dikurangi menjadi MINIMUM WEIGHT CODEWORD: diberi kode linier, cari kode kata dengan bobot minimum. Cara lain untuk menyatakan masalah ini adalah: dengan memberikan matriks boolean dan vektor boolean , temukan vektor boolean yang tidak nol sehingga bobot Hamming dari dapat diminimalkan. (Semua aritmatika dilakukan modulo 2.) MINIMUM WEIGHT CODEWORD dikenal sebagai NP-hard, tetapi ada beberapa algoritma untuk itu yang lebih cepat daripada brute-force.M y x Mx⊕y
Inilah hubungannya. Jika ada simpul, maka setiap vektor b-bit bit dapat dianggap sebagai menentukan simpul mana yang akan dibalik oleh operasi flip tertentu. Jadi untuk setiap vertex kita mendapatkan flip-vektor yang . Masukkan ini ke dalam matriks , di mana setiap baris berhubungan dengan vektor flip yang berbeda. Biarkan menjadi vektor b-bit bit yang menentukan warna asli dari simpul (biru = 1, merah = 0). Sekarang tujuannya adalah untuk menemukan vektor boolean yang meminimalkan berat Hammingn n v mv n×n y n x Mv⊕y . Setiap vektor seperti itu segera berhubungan dengan serangkaian operasi flip yang meminimalkan jumlah simpul biru dalam grafik.
Dengan latar belakang ini, Anda mungkin dapat menerapkan algoritma yang dikenal untuk menemukan codeword bobot minimum dalam kode linier untuk masalah Anda. Waktu berjalan masih akan eksponensial, tetapi lebih cepat daripada mencoba semua kemungkinan untuk .x
sumber