Esse problema, que chamarei de CO para ordenação de colunas, é difícil para NP . Aqui está uma redução do problema NP-difícil Vertex Cover (VC) para ele:
Formulários de problemas de decisão de VC e CO
Deixe a instância do VC de entrada ser (V,E,k) . Ele representa a pergunta: "Dado o gráfico (V,E) , é possível escolher um conjunto de no máximo k vértices de V modo que toda aresta em E incida em pelo menos um vértice escolhido?" Construiremos uma instância (A,k′) de CO que representa a pergunta: "Dada a matriz A com elementos em {−1,0,1}, é possível permutar as colunas de A modo que um 1 apareça antes de -1 em pelo menos k′ linhas? "Esses dois problemas são apresentados na forma de problemas de decisão , em que a resposta para cada um é SIM ou NÃO: formalmente falando , é essa forma de problema que é NP-completa (ou não). Não é muito difícil perceber que a forma mais natural de problema de otimização indicada na pergunta do OP é aproximadamente equivalente em termos de complexidade: pesquisa binária no limiar O parâmetro pode ser usado para resolver o problema de otimização usando um solucionador de problemas de decisão, enquanto uma única chamada de um solucionador de problemas de otimização, seguida por uma comparação única, é suficiente para resolver o problema de decisão.
Construindo uma instância de CO a partir de uma instância de VC
Seja n=|V|e m=|E|. Vamos construir uma matriz A com (n+1)m+n linhas e n+1 colunas. As linhas superiores (n+1)m serão formadas por m blocos de n+1 linhas cada, com cada bloco representando uma aresta que precisa ser coberta . O fundo n linhas contêm "sinalizadores" de vértice, o que fará com que uma coluna (correspondente a um vértice) incorra em um custo fixo se for incluída no lado esquerdo da solução de CO (correspondente a um vértice sendo incluído na capa de vértice da Solução VC).
Para cada vértice vi , crie uma coluna na qual:
- entre a parte superior (n+1)m linhas, o j bloco -ésimo de n+1 linhas, todos contêm uma 1 quando a orla ej é incidente em vi , e 0 de outro modo, e
- as n linhas inferiores são todas 0, exceto a i ésima, que é -1.
Crie mais uma coluna "cerca" que consiste em (n+1)m cópias de -1, seguidas por n cópias de +1.
Por fim, defina o limite k′ para a instância de CO construída: (n+1)m+n−k . Em outras palavras, permitimos no máximo k linhas nas quais um -1 aparece antes de um +1. Vamos chamar esse número de linhas violadas de "custo" de uma solução de CO.
Prova
A correspondência entre uma solução para a instância CO e um conjunto de vértices na instância VC original é: Cada coluna à esquerda da cerca corresponde a um vértice que está no conjunto e cada coluna à direita da cerca corresponde a um vértice que não é.
Intuitivamente, os -1s na parte superior da coluna "cerca" forçam a seleção de um subconjunto de colunas a serem colocadas à esquerda, que juntas contêm + 1s em todas essas posições - correspondendo a um subconjunto de vértices que ocorrem em todos os Beira. Cada uma dessas colunas que aparece à esquerda da "cerca" tem -1 em uma linha distinta em algum lugar nas n linhas inferiores , incorrendo em um custo de 1; os + 1s na parte inferior da "cerca" garantem que todas as colunas colocadas à sua direita não ocorram esse custo.
Claramente, uma solução de VC usando no máximo k vértices produz uma solução para a instância de CO construída com custo no máximo k : basta ordenar que as colunas correspondentes aos vértices no vértice cubram arbitrariamente, seguidas pela coluna fence, seguida por todas as colunas restantes em qualquer ordem .
Resta mostrar que uma solução para a instância de CO com custo no máximo k corresponde a uma cobertura de vértice com no máximo k vértices.
Suponha que, ao contrário, exista uma solução para a instância de CO com custo no máximo k que deixe alguma linha nas linhas superiores (n+1)m com -1 antes de +1. Esta linha pertence a um bloco de (n+1) linhas correspondentes a uma aresta específica uv . Cada linha neste bloco na instância original A é idêntica por construção; colunas permutadoras podem alterar essas linhas, mas não afetam o fato de serem idênticas. Assim, cada uma dessas n+1 linhas idênticas tem -1 antes de +1 na solução, implicando um custo de pelo menosn+1 . Mask≤n<n+1 : contradição.
Como cada um dos m blocos de linhas nas linhas superiores (n+1)m tem +1 antes de -1, cada uma das arestas correspondentes é coberta por um vértice correspondente a uma coluna à esquerda da cerca: isto é , esse subconjunto de vértices constitui uma cobertura de vértice. Como nenhuma das linhas superiores (n+1)m tem -1 antes de +1, o único local em que o custo pode acumular-se na solução é nas n linhas inferiores , das colunas colocadas à esquerda da cerca. Cada uma dessas colunas custou exatamente 1, portanto, dado que o custo é no máximo k , deve haver no máximo kcolunas e, portanto, no máximo k vértices na capa.
Finalmente, é claro que a instância CO pode ser construída em tempo polinomial a partir da instância VC, o que significa que, se um algoritmo de tempo polinomial existisse para resolver CO, qualquer instância VC também poderia ser resolvida em tempo polinomial construindo primeiro uma instância CO, conforme descrito acima e depois resolvê-lo. Como VC é NP-difícil, CO também é.