Los algoritmos de compresión de datos son algoritmos que intentan aproximarse a la complejidad de Kolmogorov de una fuente al encontrar el modelo de longitud mínima que representa los datos y luego codificar ese modelo.
Eso suena bastante complicado, así que iré paso a paso:
1) Algoritmos que intentan aproximarse a la complejidad de Kolmogorov de una fuente.
- ¿Cuáles son algunas de las preguntas famosas al calcular los caminos más cortos (gráficos) usando Dijkstra's, DAG y Bellman-Ford?
- ¿Cómo puedo aprender las estructuras de datos en 3 meses?
- ¿Cuál es el código para dividir una matriz en dos mitades iguales?
- ¿Qué es un promedio móvil y, algorítmicamente, cómo se calcula dicho conjunto?
- ¿Qué vas a aprender y en qué proyecto vas a trabajar este verano como principiante en programación?
La fuente puede ser un archivo, una cadena o, en general, una secuencia de datos.
Cada fuente de datos tiene un grado de complejidad, los datos aleatorios tienen la máxima complejidad posible y datos como “AAAAAAAAAAAA” tienen una complejidad muy baja. Una forma de definir la complejidad es la longitud del programa mínimo que puede imprimir los datos. Esto se conoce como “complejidad de Kolmogorov” desafortunadamente es intratable. Esto tiene varias consecuencias interesantes, pero la que sirve a nuestra definición es que, al no ser tratable, debe calcularse la complejidad de una cadena. La mejor manera de estimar la complejidad de una cadena es con un algoritmo de compresión. Cuanto más corto puede comprimir, menos complejos son los datos. Los datos aleatorios no se pueden comprimir si fuera posible, entonces no serían aleatorios. Una consecuencia directa de que KC es intratable es que es imposible probar que algunos datos son aleatorios, solo puede sospechar que lo es si no puede comprimirlos.
2) El modelo de longitud mínima
La idea básica de la compresión de datos es modelar los datos de una manera compacta. Por ejemplo, una cadena como “AAAAAAAAAA” se puede modelar como “repetir A 10 veces”. Hay muchas maneras diferentes de modelar un flujo de datos desde la búsqueda de repeticiones de secuencias vistas anteriormente hasta modelos probabilísticos que intentan predecir el siguiente símbolo en función de los anteriores y luego representan cada símbolo que indica si acertaron o no. La compresión es predicción, lo mejor que puedes predecir es lo mejor que puedes comprimir y si puedes predecir bien, entonces tienes un buen modelo para representar tus datos.
Encontrar el modelo mínimo que representa los datos también es imposible de resolver y es un problema de IA, si tiene un modelo perfecto para texto en inglés, entonces tiene una forma de codificar un chatbot que probablemente pasará una prueba de Turing.
3) Acabado del modelo.
Esta es la parte facil. Una vez que encuentre el mejor modelo para describir sus datos, debe codificarlo como 1s y 0s. Esto generalmente se realiza mediante compresión aritmética.
Tarde o temprano encontrará una definición que dice que los algoritmos de compresión de datos intentan almacenar archivos de forma compacta o algo así. Esas definiciones solo consideran una parte muy pequeña de lo que realmente es la compresión de datos. Yo diría que almacenar archivos en un tamaño pequeño es solo un subproducto del campo de compresión de datos. El objetivo real es comprender los datos .
Luis