¿Existe un máximo conocido de cuánto se puede comprimir una cadena de 0 y 1?

38

Hace mucho tiempo leí un artículo de periódico en el que un profesor de algún tipo dijo que en el futuro podremos comprimir datos a solo dos bits (o algo así).

Por supuesto, esto no es correcto (y podría ser que mi memoria de lo que él dijo exactamente no es correcta). Es comprensible que no sea práctico comprimir una cadena de 0 y 1 a solo dos bits porque (incluso si fuera técnicamente posible), demasiados tipos diferentes de cadenas terminarían comprimiéndose a los mismos dos bits (ya que solo tenemos '01 'y' 10 'para elegir).

De todos modos, esto me hizo pensar en la viabilidad de comprimir una cadena de longitud arbitraria de 0 y 1 de acuerdo con algún esquema. Para este tipo de cadena, ¿existe una relación conocida entre la longitud de la cadena (la relación entre 0 y 1 probablemente no importa) y la compresión máxima?

En otras palabras, ¿hay alguna manera de determinar cuál es la longitud mínima (la más pequeña posible) a la que se puede comprimir una cadena de 0 y 1?

(Aquí estoy interesado en la compresión matemática máxima, no en lo que actualmente es técnicamente posible).

x457812
fuente
77
También tendríamos '00' y '11' para elegir. Pero el argumento es el mismo, si los usa, solo hay cuatro cadenas diferentes que puede comprimir.
RemcoGerlich
3
mathoverflow.net/q/160099/34859 : vea aquí que en el video del principio del casillero siempre habrá un número infinito de cadenas que no se pueden comprimir ... Independientemente del algoritmo utilizado (consulte la sección titulada 'Antecedentes' en la pregunta
ARi
44
La compresión depende del conocimiento que tenga sobre la estructura de los datos. Hubo este artículo sobre la compresión de movimientos de ajedrez que muestra cómo agregar conocimiento ayuda a aumentar la compresión.
espectros
1
¿Puede aclararlo? La compresión puede ser "con pérdida" o "sin pérdida" (o algún "híbrido" que puede usar ambos). ¿Está hablando de la compresión máxima utilizando solo métodos de compresión "sin pérdida", o está incluyendo (permitiendo) el uso de métodos de compresión "con pérdida"? En otras palabras, creo que hay 3 posibilidades: en busca de "compresión máxima", donde (1) los datos debe ser siempre capaz de ser descomprimidos exactamente como era antes de la compresión, (2) los datos debe ser capaz de ser descomprimido, pero se permite alguna "pérdida" (3) no es un requisito que los datos puedan descomprimirse.
Kevin Fegan
Hola @KevinFegan, en este caso tendría que ser la opción 1: "los datos siempre deben poder descomprimirse exactamente como antes de la compresión"
x457812

Respuestas:

45

La complejidad de Kolmogorov es un enfoque para formalizar esto matemáticamente. Desafortunadamente, calcular la complejidad de Kolmogorov de una cadena es un problema indiscutible. Ver también: Aproximación de la complejidad de Kolmogorov .

Es posible obtener mejores resultados si analiza la fuente de la cadena en lugar de la cadena en sí . En otras palabras, a menudo la fuente puede modelarse como un proceso probabilístico, que elige aleatoriamente una cadena de alguna manera, de acuerdo con alguna distribución. La entropía de esa distribución le indica la mejor compresión matemáticamente posible (hasta una pequeña constante aditiva).


Sobre la imposibilidad de una compresión perfecta, también puede interesarle lo siguiente.

DW
fuente
pero, la compresión es una de las técnicas para estimar la entropía. ¿Pueden la compresión y la entropía ser dos facetas de la misma cosa?
Paul Uszak
1
@PaulUszak, sí, están muy relacionados: véase, por ejemplo, el teorema de Shannon . Pero, tenga en cuenta: los comentarios deben usarse solo para sugerir mejoras / aclaraciones a la publicación, no para hacer preguntas de seguimiento. Para hacer una nueva pregunta, use el enlace "Preguntar" en la parte superior derecha de la página.
DW
35

Nlog2N

Además, en muchos casos no nos importa la reconstrucción exacta . Esto se llama compresión con pérdida , y es cómo se comprimen la música y los videos. En este caso, el límite inferior indicado anteriormente no se cumple, pero puede encontrar otros límites inferiores.

Yuval Filmus
fuente
1
Nlog2norte
27

Aquí hay un esquema simple que puede comprimir cadenas de bits arbitrarias sin pérdidas, con el resultado más pequeño siendo solo un bit:

SI la cadena es una coincidencia idéntica para la grabación de la novena sinfonía, cuarto movimiento de Beethoven, en formato AAC que se almacena en el disco duro de mi computadora, entonces la salida es un solo bit '0'.

SI la cadena es otra cosa, la salida es un solo bit '1', seguido de una copia idéntica de la cadena original.

Este esquema reduce una entrada posible a exactamente un bit y aumenta la longitud de todas las demás entradas. Hay un principio general: si un algoritmo de compresión puede asignar cualquier cadena de entrada a una cadena comprimida, y hay un algoritmo de descompresión coincidente que asigna cualquier cadena comprimida a la cadena original, y el algoritmo de compresión asigna cualquier entrada a una cadena más corta, entonces debe asignar algunas cadenas de entrada a cadenas más largas.

gnasher729
fuente
2
Buen trabajo de hacer la respuesta clara y obvia. Vale la pena señalar que esto es similar a lo que intenta hacer un buen algoritmo de compresión: para un dominio de entrada dado, intente acortar los tipos de entradas más comúnmente esperados, a cambio de alargar las entradas menos comunes.
JBentley
6

Para cada esquema de compresión que se te ocurra, es posible producir datos que no serán comprimibles por él. Entonces, incluso si su esquema de compresión es muy eficiente con algunos tipos de datos, nunca se comprimirá de manera consistente a una cierta proporción.

La forma de producir un ejemplo de datos no comprimibles para un algoritmo de compresión particular es simple: tomar cualquier tipo de datos y ejecutarlos a través del algoritmo de compresión repetidamente, hasta que el tamaño ya no disminuya.

Entonces, la compresibilidad de una cadena de bits no es realmente una función de la longitud de la cadena, sino de su complejidad en relación con el algoritmo de compresión.

m69 '' sarcástico y poco acogedor ''
fuente
¡Bienvenido! Tenga en cuenta que esto solo se aplica a la compresión sin pérdidas. La compresión con pérdida puede comprimir todas las cadenas (al menos, siempre que acepte el algoritmo "Devolver cadena vacía" como un algoritmo de compresión con pérdida. ;-)).
David Richerby
@DavidRicherby Eso es cierto, por supuesto. Pero tuve la impresión de la pregunta de que el OP estaba preguntando acerca de la compresión sin pérdida, porque no tiene mucho sentido discutir la compresión máxima de un esquema con pérdida; La idea de que puede llevarlo a extremos inutilizables es inherente al concepto de compresión con pérdida.
m69 '' sarcástico y poco acogedor ''
Sí, creo que es una interpretación razonable.
David Richerby
-2

Existe un algoritmo interesante y completamente diferente que utilizan los sistemas de respaldo empresariales. La idea es que si tiene una compañía con 10,000 computadoras, muchas de estas computadoras contendrán muchos archivos idénticos. Por ejemplo, un correo electrónico enviado a todos en la empresa podría terminar como un archivo idéntico en cada disco duro.

Por lo tanto, un sistema de copia de seguridad que intenta hacer una copia de seguridad de un archivo obviamente debe intentar comprimir el archivo para ahorrar espacio, pero primero el sistema de copia de seguridad comprueba si ya se ha guardado un archivo absolutamente idéntico. Entonces, en lugar de hacer una copia de seguridad de todo , todo lo que hace el sistema de copia de seguridad es, por ejemplo, recordar que tiene el número de archivo 1,487,578 en el sistema de copia de seguridad en su disco duro.

Esto es especialmente eficiente, por ejemplo, cuando 10,000 usuarios tienen un sistema operativo y aplicaciones idénticos instalados. Para usuarios individuales no es muy útil en absoluto.

gnasher729
fuente
44
Eso es interesante pero no veo cómo responde la pregunta. La pregunta pide límites en la compresión, no una discusión general de las copias de seguridad empresariales.
David Richerby
Esto se llama deduplicación y se realiza mediante hashes. Se necesita mucha RAM para almacenar un hash de 128 bits por cada bloque en el disco. ZFS puede hacer esto para hacer que algunos bloques compartan un espacio de almacenamiento de copia en escritura. Pero este tipo de problema de compresión (donde está tratando de comprimir un conjunto de datos masivo al que necesita acceso aleatorio, y que está cambiando demasiado rápido para la compresión de flujo normal, pero tiene redundancia a nivel de bloque) no es relevante como respuesta a esto pregunta.
Peter Cordes