Inilah masalahnya. Diberikan , di mana setiap . Apakah ada subset dengan ukuran paling banyak sehingga untuk semua ? Saya mencoba mengurangi masalah ini menjadi SAT. Gagasan saya tentang solusi adalah memiliki variabel untuk masing-masing 1 hingga . Untuk setiap , buat klausa jika . Kemudian dan semua klausa ini bersama. Tapi ini jelas bukan solusi yang lengkap karena tidak mewakili kendala bahwapaling banyak harus memiliki elemen. Saya tahu bahwa saya harus membuat lebih banyak variabel, tapi saya tidak yakin bagaimana caranya. Jadi saya punya dua pertanyaan:
- Apakah ide saya tentang solusi berada di jalur yang benar?
- Bagaimana seharusnya variabel baru dibuat sehingga mereka dapat digunakan untuk mewakili kardinalitas kendala?
complexity-theory
reductions
np-hard
Aden Dong
sumber
sumber
Jawaban:
Sepertinya Anda mencoba menghitung transversal hypergraph dengan ukuran . Artinya, { T 1 , ... , T m } adalah Anda hipergraf, dan S adalah Anda transversal. Terjemahan standar adalah untuk mengekspresikan klausa seperti yang Anda miliki, dan kemudian menerjemahkan batasan panjang menjadi kendala kardinalitas.k {T1,…,Tm} S
Jadi gunakan encoding yang ada, yaitu, dan kemudian menambahkan klausul encoding Σ 1 ≤ i ≤ n x i ≤ k .⋀1≤j≤m⋁i∈Tjxi ∑1≤i≤nxi≤k
adalah kendala kardinalitas. Ada berbagai terjemahan kendala kardinalitas yang berbeda ke dalam SAT.∑1≤i≤nxi≤k
Terjemahan kendala kardinalitas yang paling sederhana namun agak besar hanyalah . Dengan cara ini setiap disjungsi mewakili kendala ¬ ⋀ i ∈ X x i - untuk semua himpunan bagian X dari { 1 , … , n }⋀X⊆{1,…,n},|X|=k+1⋁i∈X¬xi ¬⋀i∈Xxi X {1,…,n} ukuran k + 1. Yaitu, kami memastikan bahwa tidak ada cara lebih dari variabel k dapat diatur. Perhatikan bahwa ini bukan ukuran polinomial dalam k
Beberapa tautan ke makalah tentang terjemahan kendala kardinalitas yang lebih hemat ruang yang berukuran polinomial dalamk :
Jika Anda benar-benar tertarik untuk memecahkan masalah seperti itu, mungkin lebih baik memformulasikannya sebagai masalah pseudo-boolean (lihat artikel wiki tentang masalah pseudo-boolean ) dan menggunakan pemecah pseudo-boolean (lihat kompetisi pseudo-boolean ). Dengan cara itu kendala kardinalitas hanyalah kendala pseudo-boolean dan merupakan bagian dari bahasa - semoga pemecah pseudo-boolean kemudian menanganinya secara langsung dan karenanya lebih efisien.
sumber
Saya berasumsi Anda sedang mencari pengurangan eksplisit, tetapi jika tidak, Anda selalu bisa kembali ke Teorema Cook-Levin .
sumber