Dado o interesse por essa pergunta, achei que seria útil apontar mais explicitamente a razão pela qual não devemos nos surpreender com a resposta e tentar dar alguma orientação para aprimoramentos da pergunta. Isso coleta e expande alguns comentários. Peço desculpas se isso é "óbvio"!
Considere o conjunto de cadeias de caracteres de complexidade Kolmogorov :
Existem no máximo dessas strings, pois existem descrições de comprimento . Mas observe que esse conjunto é indecidível para geral (caso contrário, poderíamos calcular apenas iterando de para e verificando a associação em ). Além disso, a função
cresce incrivelmente rápido. É uma variante da função de castor ocupado: qual é a saída mais longa de uma máquina de Turing de comprimento descritivoJ K (n
JK(n)={w:K(w)=n}.
2n2nnnK(w)n=1|w|JK(n)gK(n)=maxw∈JK(n)|w|
n? Se isso aumentasse mais lentamente do que alguma função computável, poderíamos decidir o problema da parada: dado um TM , construa que simula e imprime em cada etapa. Se o comprimento da descrição de for , então: parará no máximo etapas; ou não para.
MM′M1M′nMgK(n)M
Agora, para a pergunta de Andrew, temos que , onde é o idioma original. Portanto, a única maneira de evitar contendo entradas muito grandes em seria se contivesse apenas seqüências de caracteres muito compactáveis. (Observe que, caso contrário, podemos ignorar completamente a distinção entre análise de pior e de caso médio aqui, porque calculamos a média de mais de strings, mas o tamanho da maior string está crescendo mais rápido do que qualquer função computável de . )IK(n)=S∩JK(n)SIK(n)nS2nn
Eu sinto que é provavelmente impossível construir qualquer não trivial (isto é, infinito) que contenha apenas cadeias não compactáveis, mas que seja decidível. Mas eu não sei. No entanto, espero que isso dê intuição a respeito de por que não devemos esperar que a maioria dos idiomas tenha crescendo mais lentamente que uma função computável.SfKn
Para recuar um pouco, a questão é comparar o desempenho nas entradas de comprimento com o desempenho nas entradas que podem ser compactadas no comprimento . Mas temos noções de compressão que são muito mais tratáveis (e menos poderosas) que a Complexidade Kolmogorov. Uma maneira simples é fornecer um circuito de tamanho , que na entrada o número binário produz o ésimo bit de . Observe que aqui a ampliação do tamanho da entrada é no máximo exponencial (um circuito do tamanho tem no máximo entradas possíveis).nnnbbwn2n
Assim, podemos reformular a pergunta, deixando
E defina analogamente. A razão da esperança aqui é que a maioria das cordas requer um circuito quase tão grande quanto a própria corda, e nenhuma corda é mais do que exponencialmente maior que o circuito necessário. Talvez neste caso nós poderíamos encontrar línguas onde e são semelhantes assintoticamente.
IC(n)={w∈S:the smallest circuit implicitly specifying w has size n}.
fCnfnfCn
Uma questão bem relacionada é a complexidade de linguagens implícitas como
IMPLICIT_SAT é NEXP-complete, e geralmente a versão implícita dos problemas de NP-complete é NEXP-complete. Decidir IMPLICIT_SAT é pelo menos tão fácil quanto usar o circuito para escrever todos os e executar um algoritmo para SAT em . Portanto, se para SAT, isso parece quase uma evidência de que IMPLICIT_SAT no caso médio é quase tão rapidamente decidível quanto SAT no pior caso. Mas não sei como comparar diretamente sua noção com linguagens implícitas porque a noção de "menor circuito para
IMPLICIT_SAT={circuits C:C implicitly specifies w,w∈SAT}.
wwfCn=Θ(fn)w"não entra em jogo para idiomas implícitos.
Espero que isso seja útil / interessante!
Não tenho certeza de um livro que mencione problemas implícitos, mas aqui estão algumas notas de aula: http://people.seas.harvard.edu/~salil/cs221/spring10/lec8.pdf