A programação linear (LP) está em P e a programação inteira (IP) é NP-hard. Mas como os computadores só podem manipular números com precisão finita, na prática um computador está usando números inteiros para programação linear. Por esse motivo, LP e IP não deveriam estar na mesma classe de complexidade?
complexity-theory
polynomial-time
Sasha, o Noob
fonte
fonte
Respostas:
Não posso comentar, pois exige 50 repetições, mas existem alguns conceitos errôneos, especialmente o comentário de Raphael "Em geral, um domínio contínuo significa que não há força bruta (e nenhuma heurística inteligente para acelerar isso)".
Isso é absolutamente falso. O ponto chave é de fato convexidade. Excepto algumas qualificações de restrição técnica, minimizar uma função convexa (ou maximizar uma função côncava) sobre um conjunto convexo é essencialmente trivial, no sentido de convergência de tempo polinomial.
Em termos gerais, pode-se dizer que há uma correspondência entre a convexidade de um problema na otimização "matemática" e a viabilidade de algoritmos gananciosos na otimização da "ciência da computação". Isso ocorre no sentido de que ambos habilitam métodos de pesquisa local. Você nunca precisará voltar atrás em um algoritmo ganancioso e nunca terá que se arrepender de uma direção de descida em um problema de otimização convexa. Melhorias locais na função objetivo sempre o levarão mais perto do ideal global.
Não é assim no caso não convexo. Aqui, pode haver um mínimo global, mas vários mínimos locais para os quais um algoritmo de descida local sempre será atraído, da mesma forma que algoritmos gananciosos quando aplicados a problemas de NP. Às vezes, eles encontram o verdadeiro ideal, na maioria das vezes não.
fonte
A resposta curta: porque você pode usar Inteiros para simular Booleans para SAT , mas quando você não se restringe a isso, não é possível simular SAT. Você obterá uma resposta viável, mas ela não terá mais significado em termos de qualquer instância do SAT que você estivesse tentando simular.
fonte
A razão pela qual a programação linear é "eficiente" é que o espaço da solução pode ser representado por um único poliedro convexo. Se alguém está tentando encontrar o vértice "mais alto" nesse poliedro (pode-se aplicar uma transformação linear a qualquer problema de programação linear para fazer com que "altura" corresponda à quantidade a ser maximizada), então, a partir de qualquer vértice, pode-se percorrer as arestas para o ponto mais alto, sem nunca ter que ir "ladeira abaixo". O que torna a programação inteira "difícil" é que não há um espaço de solução contínuo, mas há muitos espaços de solução disjuntos e nenhuma maneira de trabalhar de maneira incremental em direção à solução ideal.
fonte
As outras respostas estão corretas, mas acho-as um pouco técnicas. Suponha que você tenha varrido (eliminado) uma matriz e esteja procurando por uma solução e a matriz tenha a seguinte aparência:
fonte