Saya pikir masalah ini NP-hard. Saya mencoba membuat sketsa pengurangan dari MinSAT. Dalam masalah MinSAT kami diberi CNF dan tujuan kami adalah untuk meminimalkan jumlah klausa yang puas. Masalah ini NP-hard, lihat misalnya, http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode=sjdmec
Membagi simpul menjadi dua kelompok - beberapa akan mewakili literal, yang lain klausa, jadi mana v adalah jumlah variabel dari CNF (biasanya dilambangkan dengan n ) dan c adalah jumlah klausa. Arahkan sebuah tepi dari masing-masing literal-vertex ke simpul-klausa tempat itu terjadi. Tentukan S untuk literal-vertex yang mewakili x i sebagai(di manaadalah parameter arbitrer), sehinggadanataudan{ i , i + v + k } k f ( x i ) = i f ( ˉ x i ) = i + v + k f ( ˉ x i ) = i f ( x i ) = i + v + k S = { v +n=2v+cvncSxi{i,i+v+k}kf(xi)=if(x¯i)=i+v+kf(x¯i)=if(xi)=i+v+k. Untuk setiap klausa-simpul, misalkan , jadi dari klausa-simpul adalah `` kecil ''.S={v+1,…,v+k,2v+k+1,…,n}k
Sekarang CNF memiliki tugas di mana setidaknya klausa salah jika dan hanya jika masalah Anda dapat diselesaikan untuk contoh di atas. Masalah MinSAT adalah persis untuk menguji apakah rumus CNF memiliki tugas yang membuat setidaknya klausa salah, jadi ini menunjukkan bahwa masalah Anda NP-hard.kφk
Untuk membantu Anda memahami pengurangan ini, inilah intuisi: label kecil ( ) sesuai dengan nilai kebenaran False, dan label besar ( ) sesuai ke True. Batasan untuk simpul-literal memastikan bahwa setiap benar atau salah dan bahwa memiliki nilai kebenaran yang berlawanan. Tepi memastikan bahwa jika ada literal Benar, maka semua klausa-simpul yang mengandungnya juga ditetapkan Benar. (Sebaliknya, jika semua literal dalam klausa ditetapkan False, maka struktur grafik ini memungkinkan verteks klausa untuk ditetapkan False atau True.) Akhirnya, pilihan memastikan bahwa dari klausa-simpul ditetapkan False dan1,2,…,v+kv+k+1,…,2v+kxixi¯¯¯¯¯kkc−kdari mereka ditugaskan Benar. Jadi, jika ada semacam topologi yang valid dari grafik ini, maka ada tugas untuk variabel yang membuat setidaknya dari klausa dari false (semua klausa-simpul yang ditugaskan False, plus kemungkinan beberapa dari yang ditugaskan Benar). Sebaliknya, jika ada tugas untuk variabel yang membuat setidaknya dari klausa dari salah, maka ada semacam topologi yang valid dari grafik ini (kita mengisi label untuk simpul-literal dengan cara yang jelas; dan untuk setiap klausakφkφφitu benar, kami memberikan label klausa-vertex yang sesuai dengan True; simpul-klausa lainnya dapat menerima label yang sesuai dengan nilai kebenaran arbitrer).
Perhatikan bahwa jika Anda mengendurkan masalah dengan membiarkan menjadi arbitrer (tidak harus bijektif), maka itu menjadi polinomial. Algoritme berproses dengan cara yang sama dengan pengurutan topologis: Anda memberi nomor pada simpul satu per satu, mempertahankan set U dari simpul yang tidak bernomor yang tetangganya telah diberi nomor. Jika memungkinkan, Anda memilih simpul x ∈ U dan beri angka dengan elemen terkecil S ( x ) lebih besar dari jumlah tetangganya. Tidak sulit untuk melihat bahwa instance ( G , S ) memiliki solusi jika algoritma sebelumnya berjalan pada ( G ,f U x∈U S(x) (G,S) berakhir dengan semua simpul diberi nomor.(G,S)
sumber
Pengamatan sepele adalah bahwa jika untuk semua x , maka masalah ini dapat dipecahkan dalam waktu polinomial, dengan mereduksi menjadi 2SAT.|S(x)|≤2 x
Begini caranya. Memperkenalkan variabel untuk setiap simpul x dan setiap i sedemikian rupa sehingga saya ∈ S ( x ) . Untuk setiap pasangan x , y dari simpul, jika ada jalur dari x ke y , kita mendapatkan beberapa kendala: jika i ∈ S ( x ) , j ∈ S ( y ) , dan i > j , maka kita mendapatkan batasan ¬ v x , sayavx,i x i i∈S(x) x,y x y i∈S(x) j∈S(y) i>j . Bijektivitas memberi kita satu set kendala: untuk setiap pasangan x , y dari simpul dengan x ≠ y , jika i ∈ S ( x ) dan i ∈ S ( y ) , kita tambahkan ¬ v x , i ∨ ¬ v y , i . Akhirnya, persyaratan bahwa setiap simpul harus diberi label memberi kita satu set kendala lagi: untuk setiap x , jika S (¬vx,i∨¬vy,j x,y x≠y i∈S(x) i∈S(y) ¬vx,i∨¬vy,i x , kita mendapatkan batasan v x , i ∨ v x , j . (Perhatikan bahwa hanya set kendala terakhir yang mengeksploitasi janji bahwa | S ( x ) | ≤ 2 untuk setiap x .)S(x)={i,j} vx,i∨vx,j |S(x)|≤2 x
Saya menyadari pengamatan ini tidak akan membantu Anda dalam situasi khusus Anda. Maaf tentang itu
sumber