Existe um algoritmo para o seguinte problema:
Dada uma máquina de Turing que decide uma linguagem L , existe uma máquina de Turing decide tal que ?
L t 2 ( n ) = o ( t 1 ( n ) )
As funções e t 2 são os piores tempos de execução das máquinas Turing M 1 e M 2, respectivamente.
E a complexidade do espaço?
Respostas:
Aqui está um argumento simples para mostrar que eles são indecidíveis, ou seja, não há algoritmos para verificar se um determinado algoritmo é ideal em relação ao tempo de execução ou uso de memória.
Reduzimos o problema de parada na fita em branco para o seu problema de otimização do tempo de execução.
Seja uma determinada máquina de Turing. Seja N a seguinte máquina de Turing:M
: na entrada n 1. Execute M na fita em branco por (no máximo) n etapas. 2. Se MN n
M n
M não parar em etapas, execute um loop de tamanho 2 n e , em seguida, retorne NO.
3. Caso contrário, retorne YES.n 2n
Existem dois casos:
Se não parar na fita em branco, a máquina N funcionará por Θ ( 2 n ) etapas na entrada n . Portanto, seu tempo de execução é Θ (M N Θ ( 2n) n . Nesse caso, N obviamente não é o ideal.Θ ( 2n) N
Se parar na fita em branco, a máquina N funcionará por um número constante de etapas para todas as n grandes o suficiente , portanto o tempo de execução é O ( 1 ) . Nesse caso, N é obviamente ideal.M N n O ( 1 ) N
Em resumo:
Além disso, dado o código para , podemos calcular o código para NM N . Portanto, reduzimos o problema de interrupção na fita em branco para o problema de otimização em tempo de execução. Se pudéssemos decidir se uma determinada máquina de Turing é ideal, poderíamos usar a redução acima para verificar se uma determinada máquina M pára na fita em branco. Como parar na fita em branco é indecidível, o seu problema também é indecidível.N M
Um argumento semelhante pode ser usado para o espaço, ou seja, também é indecidível verificar se uma determinada máquina de Turing é ótima em relação ao espaço que usa.
Mesmo uma afirmação mais forte é verdadeira: não podemos decidir se uma determinada função computável é um limite superior à complexidade do tempo de computação de uma determinada função computável. Da mesma forma para o espaço. Ou seja, mesmo a teoria básica da complexidade não pode ser automatizada por algoritmos (o que pode ser considerado uma boa notícia para os teóricos da complexidade;).
fonte
Como outros mencionaram, a resposta é não.
Mas há um artigo interessante escrito por Blum " Uma teoria independente da máquina da complexidade das funções recursivas ". Ele mostrou que existem algumas funções com a propriedade de que, por mais rápido que um programa seja para calcular essas funções, existe outro programa para calculá-las muito mais rapidamente .
uma propriedade muito agradável!
fonte
Ha! Se a resposta fosse sim, estaríamos vivendo em um mundo diferente.
Imagine que a resposta para sua pergunta foi sim (e, é claro, conhecíamos o algoritmo que responderia à sua pergunta); então, para qualquer algoritmo A da linguagem L , poderíamos dizer (usandoA0 A L ) se A é ideal ou não.A0 A
Infelizmente, isso não é possível e, de fato, acho pessoalmente que provar a otimização (não trivial) é o problema mais interessante (e difícil) da ciência da computação. Até onde eu sei - eu ficaria feliz em ser corrigido - não existe resultado de otimização para qualquer problema polinomial (exceto os resultados triviais de otimização do curso dos algoritmos que levam um tempo proporcional ao tamanho da entrada).
fonte