Como encontrar a descrição mínima para uma matriz?


7

A seguinte matriz ocupa 10.000 slots na memória:

a = [0,1,2,3,4,5,6,7,8,9,10,...,10000]

Mas pode-se facilmente representar a mesma matriz que:

a = {len:10000, get: λ idx -> idx}

O que é muito mais compacto. Da mesma forma, existem várias matrizes que podem ser representadas compactamente:

a = {a:1000, get: λ idx -> idx * 2}
Is a description for [0,2,4,6,8,10,...,2000]

a = {a:1000, get λ idx -> idx ^ 2}
Is a description for [0,1,2,4,9,...1000000]

And so on...

Desde que tantas matrizes possam ser representadas de maneiras muito mais curtas do que armazenar cada elemento na memória, pergunto:

  1. Existe um nome para esse fenômeno?
  2. Existe uma maneira de encontrar a representação mínima para uma matriz específica?
  3. Considerando que isso provavelmente depende da linguagem da descrição (neste caso, usei uma linguagem de programação imaginária com funções, objetos e operadores matemáticos). Existe uma linguagem específica ideal para encontrar esse tipo de descrição mínima para objetos?

Respostas:


9

O fenômeno que você está descrevendo é a complexidade de Kolmogorov . Essencialmente, se você corrigir uma linguagem de programação (ou, mais formalmente, uma codificação de máquinas de Turing), a complexidade de Kolmogorov  de uma string  será a duração do programa mais curto que gera  quando iniciado sem entrada. Acontece que, dentro da razão, não importa qual linguagem de programação você usa, pois o uso de uma linguagem diferente faz no máximo uma diferença aditiva constante para K(s)ssK(s). Se você deseja definir a complexidade de Kolmogorov com relação a algum idioma whacko, posso apenas usar esse idioma para escrever um intérprete para um idioma sensato, para que a complexidade de Kolmogorov de uma string em relação ao seu idioma não possa ser pior que a complexidade do meu idioma. mais a sobrecarga fixa e constante do intérprete.

Como todas as propriedades interessantes das máquinas de Turing , a complexidade Kolmogorov de uma string é indecidível. No entanto, isso não deixa de ser um conceito útil e tem havido uma grande quantidade de pesquisas sobre o assunto.


4

Se você observar isso de um ponto de vista prático, poderá chamá-lo de compactação de dados. Isso é basicamente o que os algoritmos de compactação de dados fazem: eles definem um idioma e, em seguida, tentam representar o conjunto de dados fornecido nesse idioma. Mas mesmo para uma linguagem muito simples, é muito difícil encontrar a representação ideal nessa linguagem. Tomemos, por exemplo , Deflate , apesar de ser muito simples, ainda há pesquisas ativas sobre como aplicá-lo da maneira ideal.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.