Diberikan satu set set, temukan set terkecil yang mengandung setidaknya satu elemen dari setiap set


15

Mengingat satu set set, saya ingin menemukan satu set M sehingga setiap set S di S mengandung setidaknya satu unsur M . Saya juga ingin M mengandung elemen sesedikit mungkin sambil tetap memenuhi kriteria ini, meskipun mungkin ada lebih dari satu M terkecil dengan properti ini (solusinya belum tentu unik).SMSSMMM

Sebagai contoh konkret, anggap bahwa himpunan adalah himpunan bendera nasional, dan untuk setiap bendera S dalam S , unsur-unsurnya adalah warna yang digunakan dalam bendera negara itu. Amerika Serikat akan memiliki S = { r e d , w h i t e , b l u e } dan Maroko akan memiliki S = { r e d , g r e e n } . KemudianSSSS={red,white,blue}S={red,green}Makan menjadi satu set warna dengan properti yang setiap bendera nasional menggunakan setidaknya salah satu warna di . ( Warna Olimpiade biru, hitam, merah, hijau, kuning, dan putih adalah contoh dari M seperti itu , atau setidaknya pada tahun 1920.)MM

Apakah ada nama umum untuk masalah ini? Apakah ada algoritma "terbaik" yang diterima untuk menemukan set ? (Saya lebih tertarik pada solusi itu sendiri daripada mengoptimalkan proses untuk kompleksitas komputasi.)M


2
Bisakah Anda mencari masalah cover set ?
Juho

@ Juho Tidak cukup. Dalam contoh saya, masalah set cover adalah menemukan serangkaian flag sedemikian rupa sehingga gabungan dari flag-flag tersebut berisi semua warna yang digunakan pada semua flag. Sebaliknya, saya mencari sesuatu yang hanya akan mengeluarkan daftar warna, bukan daftar bendera, dan saya tidak perlu set untuk memuat setiap warna yang mungkin. Saya akan melihat-lihat area ini di Wikipedia, saya pikir Anda sudah menempatkan saya di jalur yang benar. Terima kasih! M
bdesham

Jawaban:


13

Masalahnya adalah masalah Set lengkap NP yang terkenal . Ini terkait erat dengan Set-Cover . Bukti kelengkapan NP dapat ditemukan di klasik buku Garey dan Johnson .

Jika Anda ingin memperkirakannya, Anda mungkin ingin menerjemahkan instance Anda terlebih dahulu ke Set-Cover, dan kemudian menerapkan algoritma perkiraan untuk Set-Cover. Namun, Set-Cover tidak dapat didekati oleh faktor konstan dalam waktu polinomial, kecuali P = NP seperti yang ditunjukkan oleh Lund dan Yannakakis .

Jika Anda tertarik pada solusi yang tepat dan input Anda berperilaku baik, saya akan merekomendasikan menggunakan traktat parameter-tetap . Waktu berjalan di sini tidak hanya dinyatakan dalam panjang input n tetapi juga dalam hal parameter tambahan k . Jika waktu berjalan adalah O(f(k)nO(1)) , kami menyebut algoritma tersebut sebagai FPT-algoritma. Di sini, f(k) adalah fungsi yang meningkat. Jadi, jika k adalah konstan, kita memiliki algoritma polytime. The bab pertama dari buku oleh Flum dan Grohe , jelaskan suatu algoritma-FPT untuk memukul set (lebih tepatnya untuk pk


Terima kasih. Bisakah Anda memberikan referensi tempat membaca tentang implementasi yang sebenarnya? Yaitu bagaimana saya menerjemahkan masalah saya ke masalah set-cover, dan kemudian bagaimana saya menyelesaikannya?
bdesham

1
bdesham, pikirkan setiap elemen sebagai set set miliknya. jalankan set cover pada input elemen-set. juga, baca halaman wiki yang tertaut di sini.
Sasho Nikolov

Apakah Anda tertarik dengan solusi perkiraan, atau Anda ingin memiliki solusi yang tepat?
A.Schulz

I’d like an exact solution. The data sets I’m working with are small enough that I don’t think that should be a problem.
bdesham

1
@Keyser: You are right. However it is common practice to associate the decision problem with the corresponding optimization problem since they are for NP-complete problems closely related.
A.Schulz

2

An idea that could help: if the intersection of all the sets in S in not empty, then you can pick any element s in the intersection and set M={s}. If the intersection is empty, find an element (color) c whose occurrence in sets is maximum and replace all the sets in which it occurs by the singleton {c}. Keep doing this until every element's occurrence count is equal to 1 and then set M to the union of the remaining sets. For example, if S is the power set of some set A then M=A. I might be wrong however.


2

Have a look at Ray Reiter's "A Theory of Diagnosis from First Principles" where he gives an algorithm for computing hitting sets, and this additional note "A correction...".

The algorithm is generally known as "hitting set tree" algorithm, it shouldn't be too hard to find an implementation. You mentioned you weren't too interested in runtime, but optimisations such as early branch termination etc. are quite critical to the implementation, and interesting as well :)


2
Can you summarize the algorithm to make your answer more self-contained? Links can and will break.
Juho

0

Practically speaking, one of the better ways (certainly one of the easiest) to solve instances of Set Cover/Hitting Set is mixed integer programming. This involves communicating the integer programming formulation to the solver of your choice.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.