Existem muitas maneiras de definir a Complexidade Kolmogorov e , geralmente, todas essas definições são equivalentes a uma constante aditiva. Isto é, se e são Kolmogorov funções de complexidade (definida através de diferentes línguas ou modelos), então existe uma constante tal que, para cada corda , . Acredito que isso ocorre porque para cada função de complexidade Kolmogorov e para cada ela sustenta que , por alguma constante .
Estou interessado nas seguintes definições de , baseadas em máquinas de Turing
- número de estados : Defina como o número mínimo modo que uma TM com estados produza na sequência vazia.
São e equivalente? Qual é a relação entre eles e qual deles apreende melhor o conceito de complexidade de Kolmogorov, se não forem equivalentes.
O que mais me incomoda é a taxa aumentar com , que parece não ser super-linear (ou pelo menos linear com a constante tal que , em vez de ). Considere a TM mais simples que gera - aquela que apenas codifica como parte de sua função de estados e transições. é imediato ver que . No entanto, a codificação da mesma máquina é muito maior, e o limite trivial que recebo é K_2 (x) \ le | x | \ log | x | .
Respostas:
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
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 :-)cpy2c 528+490240688 528 490240688
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.K1 q q
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 .K1 K2 K1 a>0 ca K1(x)≤a|x|+ca a<1 K1 2n n an+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)b b2b 2b b log2b 2log2b
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/a K1(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 .)K2 K2(x)≤a|x|log|x|+c a>0 log|x| O(|x|) |x| O(|x|)
fonte