Pertimbangkan hal berikut masalah : Kami diberi integer , dan k interval [ l i , r i ] dengan 1 ≤ l i ≤ r i ≤ 2 n . Kita juga diberi bilangan bulat 2 n d 1 , … , d 2 n ≥ 0 . Tugasnya adalah memilih jumlah interval minimum [ l i , r i ]sedemikian rupa sehingga untuk setiap , setidaknya interval d i yang berisi bilangan bulat saya dipilih.
Tidak sulit untuk melihat bahwa dapat diselesaikan dalam waktu polinomial (lihat di bawah).
Sekarang pertimbangkan hal berikut sedikit dimodifikasi masalah : Input dari masalah adalah sama seperti sebelumnya. Namun, tugas sekarang adalah untuk memilih jumlah minimum interval sehingga untuk setiap , setidaknya d 2 i - 1 interval yang mengandung bilangan bulat 2 i - 1 atau setidaknya d 2 i interval yang mengandung integer 2 i dipilih (dengan "atau" kami maksudkan logis biasa atau).
Pertanyaan saya: Dapatkah diselesaikan dalam waktu polinomial?
Berikut adalah dua cara untuk menyelesaikan efisien:
Algoritme serakah yang sederhana: Sapu interval dari kiri ke kanan dan pilih interval sesedikit yang diperlukan untuk “memuaskan” angka . Setiap kali ada pilihan antara interval yang berbeda, pilih satu dengan titik akhir kanan maksimal.
Program integer: Untuk setiap interval perkenalkan variabel keputusan x i ∈ { 0 , 1 } dengan x i = 1 jika interval dipilih. Tujuannya adalah untuk meminimalkan x 1 + ... + x k , dengan batasan ∑ j : i ∈ [ l j , r j ] x j ≥ d i. Matriks kendala dari program integer ini memiliki properti berturut-turut dan oleh karena itu relaksasi pemrograman linier dari program ini memiliki solusi optimal integer.
Terima kasih atas petunjuk, dan juga untuk referensi!