Considere o seguinte problema : Estamos dado um número inteiro , e intervalos com . Também recebemos números inteiros . A tarefa é selecionar um número mínimo de intervalos para que para cada , pelo menos intervalos contendo o número inteiro sejam selecionados.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
Não é difícil ver que pode ser resolvido em tempo polinomial (veja abaixo).
Agora considere o seguinte problema ligeiramente modificado : A entrada do problema é a mesma de antes. No entanto, a tarefa agora é selecionar um número mínimo de intervalos para que, para cada , pelo menos d_ {2i-1} intervalos contendo o número inteiro 2i-1 ou pelo menos d_ {2i} intervalos contendo o o número inteiro 2i é selecionado (com “ou” queremos dizer o usual lógico ou).d 2 i - 1 2 i - 1 d 2 i 2 i
Minha pergunta: Q ' pode ser resolvido em tempo polinomial?
Aqui estão duas maneiras de resolver o eficiência:
Um algoritmo simples e ganancioso: varra os intervalos da esquerda para a direita e selecione apenas os intervalos necessários para “satisfazer” os números . Sempre que houver uma escolha entre diferentes intervalos, escolha aquele (s) com o ponto final direito máximo.
Um programa inteiro: para cada intervalo introduza uma variável de decisão com x_i = 1 se o intervalo for selecionado. O objetivo é minimizar x_1 +… + x_k , sujeito às restrições \ sum_ {j: i \ in [l_j, r_j]} x_j \ geq d_i . A matriz de restrição deste programa inteiro possui as propriedades consecutivas e, portanto, o relaxamento linear da programação deste programa tem uma solução ótima inteira.
Obrigado por qualquer dica, e também por referências!
fonte