Peço desculpas antecipadamente por dar muitos detalhes, mas estou prestes a contradizer as pessoas.
SobreK(x)≤K′(x)+c
O fato de geralmente vir de um intérprete da linguagem de descrição # 2 para a linguagem de descrição # 1 e não de uma tradução dos programas de # 2 para os programas de # 1.K1(x)≤K2(x)+c
Por exemplo, e você obtém essa desigualdade da seguinte maneira:KC(x)≤KPython(x)+cpy2c
void py_run(char * s) {
// code of your Python interpreter
}
int main(void) {
py_run("Put here your Python program of size Kpython(x)");
}
Então sua constante será algo como que é o número de bits desse código e bits é o tamanho que o interpretador Python oficial escrito em C. É claro que você só precisa interpretar o que é possível na linguagem de descrição do Python para que você possa fazer melhor que 69 MB :-)cpy2c528+490240688528490240688
O importante é que você possa escrever seu programa Python linearmente no seu código C. Por exemplo, um idioma em que você precisa colocar "BANANA" entre todos os caracteres não é um programa de descrição muito bom e a propriedade é falsa. (Mas se o idioma da descrição autorizar você a gravar dados em um arquivo separado ou em um bloco, esse problema desaparecerá)
Por que seu é defeituosoK1(x)=q
O problema com sua definição de é que você pode precisar de mais de bits para descrever uma máquina de Turing com estados , porque é necessário codificar transições.K1qq
Portanto, não e provavelmente não são equivalentes, mas isso é principalmente culpa 's. Penso que podemos provar que para todo existe um tal que . É claro que qualquer é suficiente para refutar o fato de que não é uma função válida, pois isso significa que podemos codificar mais todas as possíveis seqüências de comprimento em bits .K1K2K1a>0caK1(x)≤a|x|+caa<1K12nnan+ca
Mas o tamanho é incrivelmente limitado quando se constrói máquinas de Turing. A idéia é que, em um bloco de estados , existem maneiras de encontrar transições para cada estado e isso é melhor do que as formas comuns você pode preencher bits. Então você pode armazenar em cada bloco bits de informação. (não porque você precisa entrar e sair do bloco de uma forma ou de outra)bb2b2bblog2b2log2b
Então sim ... Com blocos de tamanho você provavelmente poderia provar . Mas eu já escrevi muito sobre por que o número de estados não é uma função de complexidade válida de Kolmogorov. Se você quer que eu elabore, eu irei.21/aK1(x)≤a|x|+ca
Agora sobreK2
A linguagem descritiva ingênua corresponde aproximadamente a (ou seja, para cada próximo estado e detalhes sobre gravação e terminação).K2(x)=q⋅2⋅(log2q+2)log2q
Como você parece, estou convencido de que uma maneira melhor / trapaceira seria autorizar a codificação de "dados" na máquina de Turing, talvez adicionando uma tag binária na linguagem de descrição que diz se um estado é um estado de dados ( que apenas escreve um pouco e passa para o próximo estado) ou se faz outra coisa. Dessa forma, você pode armazenar um pouco do seu em um pouco da sua linguagem descritiva.x
No entanto, se você mantiver o mesmo poderá usar a mesma técnica que usei na parte anterior para economizar alguns bits, mas pareço estar preso no (para qualquer ) .. talvez menor que, mesmo, mas obter parece difícil. (E espero que deva ser , nem mesmo .)K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x|O(|x|)