Hãy xem xét vấn đề sau : Chúng tôi được cung cấp một số nguyên và khoảng với . Chúng tôi cũng được cấp số nguyên . Nhiệm vụ là chọn số lượng khoảng tối thiểu sao cho cứ mỗi , ít nhất là các khoảng chứa số nguyên được chọn.k [ l i , r i ] 1 ≤ l i ≤ r i ≤ 2 n 2 n d 1 , Lôi , d 2 n ≥ 0 [ l i , r i ] i = 1 , Trân , 2 n d i i
Không khó để thấy rằng có thể được giải trong thời gian đa thức (xem bên dưới).
Bây giờ hãy xem xét vấn đề được sửa đổi một chút sau : Đầu vào của vấn đề giống như trước đây. Tuy nhiên, nhiệm vụ bây giờ là chọn một số lượng tối thiểu của khoảng như vậy mà cho mỗi , ít nhất khoảng chứa số nguyên hoặc ít nhất khoảng chứa số nguyên được chọn (với, hoặc có nghĩa là logic thông thường hoặc).d 2 i - 1 2 i - 1 d 2 i 2 i
Câu hỏi của tôi: có thể được giải quyết trong thời gian đa thức không?
Dưới đây là hai cách để giải quyết hiệu quả:
Một thuật toán tham lam đơn giản: Quét qua các khoảng từ trái sang phải và chỉ chọn một vài khoảng thời gian cần thiết để thực hiện thỏa mãn các số . Bất cứ khi nào có sự lựa chọn giữa các khoảng thời gian khác nhau, hãy chọn một (s) với điểm cuối bên phải tối đa.
Một chương trình số nguyên: Với mỗi khoảng giới thiệu một biến quyết định với nếu khoảng đó được chọn. Mục tiêu là để giảm thiểu , tuân theo các ràng buộc . Ma trận ràng buộc của chương trình số nguyên này có thuộc tính liên tiếp và do đó thư giãn lập trình tuyến tính của chương trình này có một giải pháp tối ưu số nguyên.
Cảm ơn cho bất kỳ gợi ý, và cũng để tham khảo!