Considera il seguente problema n k [ l i , r i ] 1 ≤ l i ≤ R i ≤ 2 n 2 n d 1 , ... , d 2 n ≥ 0 [ l i , r i ] i = 1 , ... , 2 n d i i : Ci viene dato un numero intero e intervalli con . Ci vengono anche dati numeri interi . Il compito è selezionare un numero minimo di intervalli tale che per ogni , almeno intervalli contenenti l'intero siano selezionati.
Non è difficile vedere che può essere risolto in tempo polinomiale (vedi sotto).
Consideriamo ora il seguente problema leggermente modificato : L'input del problema è lo stesso di prima. Tuttavia, il compito ora è selezionare un numero minimo di intervalli tale che per ogni , almeno intervalli contenenti l'intero numero o almeno intervalli contenenti il vengono selezionati i numeri interi (con “o” intendiamo il solito logico o).d 2 i - 1 2 i - 1 d 2 i 2 i
La mia domanda: può essere risolto in tempo polinomiale?
Ecco due modi per risolvere efficiente:
Un semplice algoritmo avido: scorrere gli intervalli da sinistra a destra e selezionare solo gli intervalli necessari per "soddisfare" i numeri . Ogni volta che è possibile scegliere tra intervalli diversi, scegliere quello / i con endpoint destro massimo.
Un programma intero: per ogni intervallo introdurre una variabile di decisione con se l'intervallo è selezionato. L'obiettivo è ridurre al minimo , soggetti ai vincoli . La matrice di vincoli di questo programma intero ha le proprietà consecutive e quindi il rilassamento di programmazione lineare di questo programma ha una soluzione intera ottimale.x i ∈ { 0 , 1 } x i = 1 x 1 + … + x k ∑ j : i ∈ [ l j , r j ] x j ≥ d i
Grazie per eventuali suggerimenti, e anche per i riferimenti!