Estudei algo sobre a Complexidade Kolmogorov , li alguns artigos e livros de Vitanyi e Li e usei o conceito de Distância de compressão normalizada para verificar a estilometria dos autores (identifique como cada autor escreve alguns textos e agrupa documentos por sua semelhança).
Nesse caso, os compressores de dados foram usados para aproximar a complexidade de Kolmogorov, uma vez que o compressor de dados poderia ser usado como uma máquina de Turing.
Além da compressão de dados e das linguagens de programação (nas quais você escreveria algum tipo de compressor), o que mais poderia ser usado para aproximar a complexidade de Kolmogorov? Existem outras abordagens que poderiam ser usadas?
Respostas:
Eu acho que uma possível resposta à sua pergunta é esta: Tome um gerador de números pseudo-aleatórios . Tente escolher um gerador que tem alguns poderosos ataques contra ele: um ataque gerador de números aleatórios para é (para os nossos propósitos), um algoritmo que, quando dado um imput corda , determina uma semente A ( s ) , tal que G ( A ( s ) ) = s . Em seguida, aproxime o KC de s :G A sG G UMA s A ( s ) G ( A ( s ) ) = s s
Onde é o comprimento do programa que calcula G ( s ) (geralmente bastante curto, como nos geradores lineares).| G | G ( s )
Observe que, na prática, os ataques de gerador de números aleatórios não são os descritos: eles podem falhar ou produzir resultados incompletos. Nesse caso, você pode adaptar o algoritmo para que ele retorne quando o resultado do ataque é insatisfatório. A mesma observação vale para algoritmos de compactação.| s |
A ressalva dessa abordagem, em oposição aos algoritmos de compactação, é que, em geral, os algoritmos de compactação são muito mais adequados para computar o KC, pois são adaptados para trabalhar em qualquer cadeia de caracteres, enquanto um ataque só pode funcionar se estiver na imagem de G ( muito improvável ).s G
fonte
É por isso que a complexidade de Kolmogorov é tão interessante, não porque é o algoritmo de compressão final (que se importa com a compressão de qualquer maneira), mas porque é o algoritmo de aprendizado final . Compactação e aprendizado são basicamente a mesma coisa: encontrar padrões nos seus dados. O quadro estatístico construído sobre essa idéia é chamado Comprimento Mínimo da Descrição e foi diretamente inspirado pela complexidade de Kolmogorov.
Veja também esta pergunta no cStheory StackExchange.
fonte
a codificação gramatical é uma versão menos usada de um algoritmo de compressão e pode ser tomada como uma estimativa "aproximada" da complexidade de Kolmogorov. a codificação gramatical não é tão comumente usada como um algoritmo de compactação quanto outras abordagens mais comuns, talvez principalmente porque não melhora muito a compactação, por exemplo, Lempel-Ziv em corpus baseados em texto, mas pode funcionar bem em outros tipos de dados. a idéia é "compactar" uma string usando regras gramaticais. uma derivação gramatical pode resultar em um DAG (versus uma árvore menos complexa), portanto, é possível haver uma complexidade representacional substancial.
outra opção é encontrar circuitos menores / mínimos que representam uma string, mas isso é conhecido por ter uma complexidade de computação muito alta e pode ter sucesso apenas em strings pequenas.
existem também outros métodos de algoritmo de compressão além das abordagens do tipo "execução de comprimento codificado" de Lempel-Ziv, por exemplo, álgebra vetorial e SVD podem ser usados como algoritmo de compressão. também transformadas de Fourier são freqüentemente usadas para compactar imagens, por exemplo, no padrão JPG.
fonte