Recentemente, um aluno me pediu para verificar uma prova de dureza NP para eles. Eles realizaram uma redução ao longo das linhas de:
Reduzo esse problema que é conhecido como NP-completo para o meu problema (com uma redução de múltiplos de um tempo múltiplo), de modo que é NP-difícil.
Minha resposta foi basicamente:
Como possui instâncias com valores de , não é trivialmente computável em Turing, portanto você pode pular a redução.
Embora formalmente verdade, não acho que essa abordagem seja perspicaz: certamente gostaríamos de capturar a "complexidade inerente" de um problema de decisão (ou otimização) com valor real, ignorando as limitações que enfrentamos ao lidar com problemas reais. números; investigar esses problemas é para outro dia.
Obviamente, nem sempre é tão fácil quanto dizer: "a versão discreta do Subset Sum é NP-completa, portanto a versão contínua também é 'NP-hard'". Nesse caso, a redução é fácil, mas há casos famosos da versão contínua sendo mais fácil, por exemplo, programação linear versus número inteiro.
Ocorreu-me que o modelo de RAM naturalmente se estende a números reais; deixe cada registro armazenar um número real e estender as operações básicas de acordo. O modelo de custo uniforme ainda faz sentido - tanto quanto no caso discreto, de qualquer maneira - enquanto o modelo logarítmico não.
Portanto, minha pergunta se resume a: existem noções estabelecidas de complexidade de problemas com valor real? Como eles se relacionam com as classes discretas "padrão"?
As pesquisas do Google produzem alguns resultados, por exemplo, isso , mas não tenho como dizer o que é estabelecido e / ou útil e o que não é.