Masalah sebenarnya yang saya hadapi adalah sebagai berikut.
INSTAN : Saya telah menetapkan dan dan matrix untuk semua dan .
PERTANYAAN : Saya harus mencari subset dari ukuran sekecil mungkin dan partisi set dalam menetapkan yang persatuannya sama dengan sehingga untuk semua , saya memiliki untuk semua i \ dalam K_j .
Contoh:
Diberikan dan matriks
Dalam contoh ini, harus sama dengan dan dan .
Saya memperhatikan dua fakta:
- Jika ada beberapa sehingga untuk semua maka dan ; dan
- Jika ada beberapa sehingga maka .
Pertanyaan saya : Apakah mungkin untuk menyelesaikan masalah optimisasi ini dalam waktu polinomial (setidaknya dengan algoritma aproksimasi)?
Hal pertama yang saya coba lakukan adalah mengubahnya menjadi masalah yang diketahui dan kemudian menerapkan algoritma yang dikenal untuk itu. Saya berpikir untuk mengubahnya menjadi penutup atau nampan pengepakan tetapi saya gagal dan juga saya tidak berpikir bahwa ini menarik.
Masalah yang saya coba rumuskan.
Saya memiliki set dan dan matriks untuk semua dan . Juga, saya memiliki disjoints menetapkan untuk setiap , (saya menambahkan sebagai input karena saya tidak bisa memformulasikannya sebaliknya.)
Akhirnya, saya mendapatkan ini:
Terima kasih.
sumber
Jawaban:
Bahkan versi keputusan dari masalah ini, yang kami coba tentukan hanya jika ada solusi yang layak, adalah NP-hard dengan reduksi dari Exact Cover . (Versi optimisasi, di mana kami mencari solusi yang layak yang meminimalkan , jelas setidaknya sama sulitnya dengan ini.)|S|
Matriks baris tunggal, kolom tunggal yang berisi nilai 0,5 adalah contoh input yang tidak ada solusi yang layak. Ini yang lain:
Membuat gadget "Pilih paling banyak satu"
Pertama, perhatikan bahwa jika nilai maksimum dalam beberapa baris adalah , dan baris ini berisi (setidaknya) dua salinan , katakan di dan , , lalu tidak dapat mengandung dan , karena jika itu terjadi maka salah satu dari dua kasus berikut harus muncul, yang masing-masing mengarah ke kontradiksi:ai x>0 x aij aij′ j′≠j S j j′
Dengan demikian kita dapat memilih beberapa nilai maksimum yang aman lebih tinggi dari jumlah semua nilai-nilai non-maksimum berturut-turut, dan penggunaan salinan nilai maksimum ini untuk menegakkan yang paling salah satu kolom termasuk dalam .S
Kita dapat mengubah batasan "pilih paling banyak satu" ini menjadi batasan "pilih tepat satu" dengan menggunakan nilai positif apa pun yang kurang dari 1 sebagai nilai "tidak maksimal". Itu karena setiap baris milik beberapa bagian dari partisi baris, dan jika maka RHS dari ketidaksetaraan menjadi negatif untuk baris , jadi tidak ada cara untuk memuaskannya: dengan demikian setidaknya satu harus dipaksa ke sedemikian rupa sehingga .i Kj aij<1 i j S aij≥1
Jadi, untuk memastikan bahwa salah satu kolom di beberapa set dipaksa ke , buat baris sebagai berikut:T⊆N S ai
Dengan demikian pengurangan dari Exact Cover mudah: ada baris untuk setiap elemen, kolom untuk setiap set, dengan setiap kali set menyertakan elemen dan jika tidak. Kedua arah ("Input EC instance adalah instance-YA instance yang dibangun dari masalah OP adalah instance-YA", dan "instance Bangun masalah OP adalah instance-YA input instance EC adalah instance-YA") jelas.aij=n+1 j i aij=0.5 ⟹ ⟹
sumber