Dado um 3CNF com cláusulas nas variáveis x 1 , … , x n . Suponha que x i e ¯ x i apareçam na fórmula no máximo k i vezes, respectivamente.ϕ1 1, … , Φkx1 1, … , XnxEuxEu¯¯¯¯¯kEu
Projetamos um DAG colorido cujos vértices consistem em três partes:G
- Vértices de "atribuição" e ˉ v i ( j ) , 1 ≤ i ≤ n , 1 ≤ j ≤ k i . Cor v i ( j ) com a "cor" x i ( j ) e ˉ v i ( j ) com ¯ x i ( j ) .vEu( J )v¯Eu( J )1 ≤ i ≤ n1≤j≤kivi(j)xi(j)v¯i(j)xi¯¯¯¯¯( J )
- Vértices da "cláusula" , 1 ≤ i ′ ≤ k , j ′ = 1 , 2 , 3 . Cor w i ′ ( j ′ ) com a cor x i ( j ) (ou ¯ x i ( j ) ) se ¯ x i (ou x i , resp.) For j ′wi′(j′)1≤i′≤kj′=1,2,3wi′(j′)xi(j)xi¯¯¯¯¯(j)xi¯¯¯¯¯xij′-ésimo literal da cláusula , e é a j cláusula -ésimo contendo este literal.ϕi′j
- "Cortar" os vértices . Pinte-os com cores diferentes, diferentes de cima.s=s0,s1,…,sn,sn+1,…sn+k=t
As arestas incluem:
- , v i ( j ) v i ( j + 1 ) , v i ( k i ) s i ;si−1vi(1)vi(j)vi(j+1)vi(ki)si
- , ˉ v i ( j ) ˉ v i ( j + 1 ) , ˉ v i ( k i ) s i ;si−1v¯i(1)v¯i(j)v¯i(j+1)v¯i(ki)si
- e , w i ' ( j ' ) s n + i ' .sn+i′−1wi′(j′)wi′(j′)sn+i′
Por exemplo, a partir do 3CNF
a seguinte gráfico é construído (As direcções de bordo são, da esquerda para a direita).
(x1∨x2∨x3¯¯¯¯¯)∧(x1∨x2¯¯¯¯¯∨x3)
Agora não é difícil ver que o 3CNF original está satisfeita se e somente se existe um - t caminho com diferentes cores de vértice em G .stG
(A propósito, é um subproduto que a existência de - t path com diferentes cores de vértices no DAG colorido é NP-difícil . Não encontrei muitas literaturas sobre esse problema na perspectiva computacional. Se você sabe, por favor Comente!)stNP-hard
Então, qual é a relação entre o problema de e OP? Intuitivamente, o que vamos fazer é projetar uma matriz h , para que cada cor seja mapeada para uma linha (que é uma pessoa) e as bordas sejam mapeadas para colunas consecutivas (intervalos de tempo). Portanto, um agendamento máximo, que basicamente passa da esquerda para a direita na matriz, corresponde a um caminho s - t .Ghst
Os nossos matriz ter 2 n + 1 + Σ i 2 k i + k colunas, com índices a partir de 0 . No seguinte constrcution X um Y são dois valores satisfazem um « X « Y . As razões X / 1 , Y / X podem ser grandes potências de k e n . Seja K i = 2 i + 2 ∑ i jh2n+1+∑i2ki+k0XY1≪X≪YX/1,Y/Xkn.Ki=2i+2∑ij=1ki
- Para cada , 0 ≤ i ≤ n , deixe h ( s i , K i ) = h ( s i , K i - k i - 1 ) = h ( s i , K i + k i + 1 + 1 ) = Y (se a coordenada existir, o mesmo abaixo).si0≤i≤nh(si,Ki)=h(si,Ki−ki−1)=h(si,Ki+ki+1+1)=Y
- Para cada , seja h ( x i ( j ) , K i - 1 + j ) = X ; Para cada ¯ x i ( j ) , deixá- h ( ¯ x i ( j ) , K i - 1 + k I + 1 + j ) = X .xi(j)h(xi(j),Ki−1+j)=Xxi¯¯¯¯¯(j)h(xi¯¯¯¯¯(j),Ki−1+ki+1+j)=X
- Para cada , 1 ≤ i ′ ≤ k e um x literal na cláusula ϕ i ' , seja h ( x , K n + i ' ) = 1 .ϕi′1≤i′≤kxϕi′h(x,Kn+i′)=1
- Todas as outras entradas são 0.
Por exemplo, para o gráfico de exemplo acima, a matriz correspondente é
Agora afirmamos: o 3CNF original é satisfatório se e somente se o valor máximo for .(2n+1)Y+∑ikiX+k
Considere a programação atingindo o valor máximo. Como existem exatamente colunas em h contendo Y , todas elas devem ser cobertas. Para a coluna K i + k i + 1, que tem duas opções de Y , suponha que o planejamento a atribua a s i . Como a coluna K i deve ser atribuída a s i , pela consecutividade, temos que perder as colunas K i + 1 para K i + k(2n+1)hYKi+ki+1YsiKisiKi+1 . O mesmo acontece se o planejamento atribuir a coluna K i + k i + 1 a s i + 1 .Ki+kiKi+ki+1si+1
Portanto, para obter o valor , devemos selecionar todos os demais X disponíveis na matriz, o que corresponde a uma atribuição nas variáveis. Portanto, o valor restante de k é possível se e somente se a atribuição atender a todas as cláusulas.∑ikiXXk
Como conclusão, decidir o valor máximo de uma programação legal é . Talvez seja por isso que todas as nossas tentativas anteriores de encontrar um algoritmo falharam.NP-hard
Esta solução tem problemas e será excluída em breve; veja o comentário de templatetypedef.
Você pode resolver isso em tempo polinomial usando fluxo de custo mínimo . A seguir, todas as arestas têm capacidade unitária.
Um fluxo de custo mínimo nessa rede terá um custo total igual ao negativo do melhor lucro possível. (Este custo será negativa, mas isto não é um problema.) Existe uma solução integral óptima em que cada pessoa tem uma única aresta deixando s i com um fluxo de 1 e uma aresta única chegada no t i com um fluxo de 1 , e todas as outras arestas incidentes em s i ou t eu tenho 0 fluxo. Deixe estas flow-1 bordas para pessoa i ser s i v j e v k t i : então k ≥ ji si ti si ti i sivj vkti k≥j , já que os únicos caminhos entre os vértices são aqueles que aumentam o índice. Se k = j , a pessoa i não recebe nenhum horário; caso contrário, a pessoa i recebe o bloco de intervalos de tempo j + 1 , … , k .v k=j i i j+1,…,k
Intuitivamente, cada pessoa "recebe" 1 unidade de fluxo de e escolhe um horário de início (limite) e um tempo final (limite); essas arestas inicial e final são as únicas arestas com custo diferente de zero na rede e podemos representar o valor de um bloco j + 1 , … , k como a diferença de duas somas de prefixo. As capacidades da unidade nas bordas entre os v- vtices atuam para impedir que 2 pessoas usem o mesmo intervalo de tempo.s j+1,…,k v
Curiosamente, essa formulação funcionará mesmo que os valores possam ser negativos.h(i,j)
fonte