Recentemente, ao conversar com um físico, afirmei que, em minha experiência, quando um problema que parece ingenuamente levar um tempo exponencial acaba não sendo trivialmente em P ou BPP, uma "razão abrangente" pela qual a redução ocorre geralmente pode ser identificada --- e quase sempre, esse motivo pertence a uma lista de uma dúzia ou menos de "suspeitos comuns" (por exemplo: programação dinâmica, álgebra linear ...). No entanto, isso me levou a pensar: podemos realmente escrever uma lista decente de tais razões? Aqui está uma primeira tentativa incompleta de uma:
(0) Caracterização matemática. O problema tem uma caracterização "puramente matemática" não óbvia que, uma vez conhecida, torna imediato que você possa fazer uma pesquisa exaustiva sobre uma lista de possibilidades pol (n). Exemplo: planaridade de grafos, para a qual um algoritmo O (n 6 ) segue o teorema de Kuratowski.
(Como "planar" aponta abaixo, este foi um mau exemplo: mesmo depois de conhecer uma caracterização combinatória da planaridade, fornecer um algoritmo de tempo polinomial ainda é bastante trivial. Então, deixe-me substituir um exemplo melhor aqui: que tal , digamos, "dada uma entrada n escrita em binário, calcule quantas cores são necessárias para colorir um mapa arbitrário embutido em uma superfície com n furos." Não é óbvio a priori que isso seja computável (ou mesmo finito!). Mas existe uma fórmula conhecida que fornece a resposta e, uma vez que você conhece a fórmula, é trivial calcular em tempo polinomial. Enquanto isso, "reduz a menores excluídos / teoria de Robertson-Seymour" provavelmente deve ser adicionado como um motivo abrangente separado pelo qual algo pode ser em P.)
Enfim, esse não é especificamente o tipo de situação que mais me interessa.
(1) programação dinâmica. O problema pode ser dividido de uma maneira que permita uma solução recursiva sem explosão exponencial - geralmente porque as restrições a serem satisfeitas são organizadas em uma ordem linear ou outra simples. "Puramente combinatória"; nenhuma estrutura algébrica é necessária. Indiscutivelmente, a acessibilidade dos gráficos (e, portanto, o 2SAT) são casos especiais.
(2) Matroids. O problema tem uma estrutura matróide, permitindo que um algoritmo ganancioso funcione. Exemplos: correspondência, árvore de abrangência mínima.
(3) Álgebra linear. O problema pode ser reduzido para resolver um sistema linear, calcular um determinante, calcular autovalores, etc. É possível argumentar que a maioria dos problemas que envolvem "cancelamentos milagrosos", incluindo aqueles solucionáveis pelo formalismo da caixa de fósforos da Valiant, também caem sob o guarda-chuva algébrico linear.
(4) Convexidade. O problema pode ser expresso como algum tipo de otimização convexa. Programação semi-definida, programação linear e jogos de soma zero são casos especiais comuns (cada vez mais).
(5) Teste de identidade polinomial. O problema pode ser reduzido à verificação de uma identidade polinomial, de modo que o Teorema Fundamental da Álgebra leve a um algoritmo aleatório eficiente - e, em alguns casos, como primalidade, até um algoritmo comprovadamente determinístico.
(6) Cadeia de Markov Monte Carlo. O problema pode ser reduzido à amostragem do resultado de uma caminhada de mistura rápida. (Exemplo: contando aproximadamente combinações perfeitas.)
(7) Algoritmo euclidiano. GCD, frações continuadas ...
Diversos / Não é óbvio exatamente como classificar: Casamento estável, fatoração polinomial, problema de associação para grupos de permutação, vários outros problemas na teoria dos números e na teoria dos grupos, problemas de rede de baixa dimensão ...
Minha pergunta é: quais são as coisas mais importantes que deixei de fora?
Esclarecer:
Sei que nenhuma lista pode estar completa: seja qual for o número finito de razões que você dê, alguém será capaz de encontrar um problema exótico que esteja em P, mas não por nenhuma dessas razões. Em parte por esse motivo, estou mais interessado em idéias que colocam muitos problemas diferentes, aparentemente não relacionados, em P ou BPP, do que em idéias que funcionam apenas para um problema.
Também percebo que é subjetivo como dividir as coisas. Por exemplo, os matróides deveriam ser apenas um caso especial de programação dinâmica? A resolubilidade pela pesquisa aprofundada é importante o suficiente para ser sua própria razão, separada da programação dinâmica? Além disso, muitas vezes o mesmo problema pode estar em P por várias razões, dependendo de como você olha para ele: por exemplo, encontrar um valor próprio principal está em P por causa da álgebra linear, mas também porque é um problema de otimização convexo.
Em resumo, não espero um "teorema de classificação" - apenas uma lista que reflita utilmente o que sabemos atualmente sobre algoritmos eficientes. E é por isso que o que mais me interessa são as técnicas para colocar coisas em P ou BPP que tenham ampla aplicabilidade, mas que não se encaixam na lista acima - ou outras idéias para melhorar minha primeira tentativa bruta de melhorar meu interesse pelo mundo. físico.