Dado é um número inteiro positivo , e os números com para cada . Qual é a complexidade de decidir se existem números inteiros modo que para todos os e para todos os ?
O que pode ser observado é que um algoritmo ganancioso, em que assumimos que e escolhemos acordo com essa ordem, não necessariamente funciona. Por exemplo, podemos ter . Colocando não funciona (que não deixa espaço para ), mas o que funciona é colocar e . O problema é talvez NP-difícil?
algorithms
np-hard
pi66
fonte
fonte
Respostas:
Conforme mostrado na resposta anterior, esse problema pode ser modelado como um problema de agendamento com datas de lançamento e vencimento. No entanto, a heurística de Schrage funciona apenas para o casopj= 1 (todos os tempos de processamento são 1 1 ) ou quando as datas de lançamento e vencimento concordarem (ou seja, há um pedido que r1 1≤ ⋯ ≤rn e d1 1≤ ⋯ ≤dn )
Para o casopj= p algoritmos polinomiais foram encontrados por Simons (1978) , Carlier (1981) e Garey et al. (1981) , correndo no tempoO (n2registron ) , O (n2registron ) e O ( n logn ) , respectivamente.
O algoritmo de Garey et al. agenda tarefas de unidade de tempo, mas permite liberação arbitrária e datas de vencimento. O problema acima pode ser reduzido a essa configuração dividindo todas as datas e tempos de processamento porp . A idéia principal do algoritmo é encontrar um conjunto de regiões proibidas em que nenhuma tarefa tem permissão para iniciar. Eles mostram que a heurística de Schrage, ao respeitar as regiões proibidas, encontra um cronograma possível de produção mínima. Ao construir as regiões proibidas, seu algoritmo também pode detectar inviabilidade.
Para ver como o algoritmo funciona, primeiro observe um problema mais simples: agenden tarefas em tempo de unidade entre uma data de lançamento r e um prazo d respeitando regiões proibidas F=⋃Eu(umaEu,bEu) , onde cada região (umaEu,bEu) é um intervalo aberto. (Observe que não estamos preocupados com a liberação e as datas de vencimento de tarefas individuais.)
Esse problema pode ser resolvido por Backscheduling : defina um horário de início da sentinelasn + 1= d , e para i = n , n - 1 , … , 1 definir hora de início sEu até a última hora, o mais tardar si + 1- 1 isso não é proibido.
EscrevaB ( r , d, n , F) para uma aplicação de Backscheduling para as entradas acima e defina o valor de retorno como s1 1 , a data de início mais recente possível para agendar o n tarefas. Agora seB ( r , d, n , F) < r não há cronograma viável para o n tarefas. Além disso, ser ≤ B ( r , d, n , F) < r + 1 nenhuma outra tarefa pode começar em ( B ( r , d, n , F) - 1 , r ) pois, caso contrário, não há novamente um cronograma viável para o n tarefas e, portanto, ( B ( r , d, n , F) - 1 , r ) pode ser declarada uma região proibida.
Acontece que essa lógica é suficiente para encontrar todas as regiões proibidas necessárias para fazer o trabalho heurístico de Schrage. Suponha que as tarefas sejam ordenadas de forma quer1 1≤r2≤ ⋯ ≤rn e escreva n ( r , d) para o número de tarefas liberadas e vencidas no intervalo fechado [ r , d] .
Uma implementação direta, como acima, levaria tempoO (n4) . Garey et al. mostre (além da exatidão) que, atualizando os tempos obtidos pelo Backscheduling, juntando regiões proibidas sobrepostas e fazendo consultas "proibidas"O ( 1 ) tempo pode ser reduzido a O (n2) e usando estruturas de dados ainda melhores para O ( n logn ) .
fonte
Seu problema é conhecido como agendamento não preventivo de máquina única, com prazos e prazos de liberação, com tarefas de duração idêntica, e pode ser resolvido com eficiência usando a heurística gananciosa de Schrage.
Vamos primeiro descrever o problema de maneira mais formal. Nos é dada uma sequência de intervalos de tempo[rEu,dEu] e uma sequência de comprimentos de trabalho pEu . Queremos agendar cada trabalho dentro do seu intervalo, para que não haja dois trabalhos cruzados.
No nosso casorEu=umaEu , dEu=bEu+ 2 e pEu= 2 . O horário de início de cada trabalhocEu satisfaz assim umaEu≤cEu≤bEu , e dois trabalhos entram em conflito se (cEu,cEu+ 2 ) cruza (cj,cj+ 2 ) , que é o mesmo que |cEu-cj| <2 . (Sem perda de generalidade, todos os trabalhos são agendados em horários inteiros.)
A heurística de Schrage é uma heurística comum que é ótima em alguns casos, embora não necessariamente essa. No entanto, existem outros algoritmos na literatura que resolvem esse problema com eficiência.
fonte
Seja A o menor dosumaEu . Depois, há duas opções para a primeiracEu escolher que obviamente não pode ser melhorado: Primeiro, encontre o i tal que umaEu= A e bEu é o menor possível, então deixe cEu=umaEu . Dois, escolha j de modo queumaj= A + 1 , bj<bEu e bj o menor possível, então deixe cj=bj (isso pode não ser possível). Em seguida, remova esse item da lista de intervalos, atualize todosumaEu ser maior em dois do que o cEu que foi escolhido e verifique se não bEu é muito pequeno. A primeira pesquisa profunda e o backtracking encontrarão uma solução.
Há uma boa chance de que isso seja rápido, pois a primeira escolha não é ruim como heurística.
Se houver exatamente k intervalos comumaEu< A para alguns A, e encontramos valores de k cEu< = A - 2 então estes cEu são ideais e o retorno para esses itens k não pode ajudar e nunca será necessário. Por outro lado, se houver muitos valoresbEu muito próximos, que podem ser usados para provar que não há solução.
Finalmente, o problema pode ser abordado a partir do menorumaEu ou igualmente bem das maiores bEu .
fonte