Mostrando las entradas con la etiqueta compresión. Mostrar todas las entradas
Mostrando las entradas con la etiqueta compresión. Mostrar todas las entradas

miércoles, 24 de julio de 2013

Compresión de Datos Utilizando Poliominós

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

Específicamente, pentominós, los que podrían ofrecer una buena alternativa para representar formas, basándose en la morfología matemática.
Esta idea nace como una alternativa a la compresión utilizando las matrices Sudoku, discutida en el artículo Compresión de Datos Utilizando Matrices Sudoku -- estos problemas me estaban causando demasiados cortocircuitos cerebrales; por eso consideré esta idea, como una nueva vía.
La idea principal es implementar un algoritmo cuya entrada sea un flujo de bits, y cuya salida sea otro con ciertas propiedades que a continuación explico.
Internamente, el algoritmo va tomando de a m bits en m bits, conformando matrices binarias de nxn que llamaremos matriz T. A partir de T, se busca «encajar» poliominós donde existan conjuntos de bits encendidos (i.e. unos), generando un conjunto de poliominós utilizados que llamaremos P. De esta manera, sólo se necesitará codificar no toda la matriz, sino sólo el conjunto P.

Es necesario mencionar que en T pueden surgir tres situaciones. La primera es que en T existan mayor cantidad de unos que de ceros. En este caso, la cantidad de poliominós necesarios para cubrir la superficie de T será grande. Una solución simple, es invertir los bits de T. La segunda situación, es que ocurra lo contrario a la primera. En este caso, no es necesario hacer algo. Finalmente, la tercera situación es que vengan tantos unos como ceros en igual cantidad.

Los problemas que surgen de esta propuesta son los siguientes:
  • Se necesita encontrar la combinación óptima de poliominós p en P sobre T, tal que ||P|| sea el mínimo en U, donde U es el universo de conjuntos de poliominós.
  • Se requiere encontrar una representación óptima para p.
¿Alguna idea?

Compresión de Datos Utilizando Matrices Sudoku

En la seguidilla de las ideas que estoy dando a conocer, esta es otra de ellas. En los siguientes párrafos, les dejo a continuación la idea.

El objetivo de esta idea es conseguir un algoritmo que dado un conjunto de bytes de entrada, genere otro flujo de salida con ciertas propiedades que explico a continuación.
El algoritmo, en una primera versión, internamente va tomando subconjuntos de 81 bytes, conformando matrices de 9x9 que llamaremos matriz T (el tamaño del tablero de Sudoku tradicional; otra versión podría extenderse a otros tamaños). Posteriormente, a partir de T se busca un conjunto de matrices Sudoku S tal que aplicada alguna función, como sumas y multiplicaciones (u otro operador), se pueda reconstruir T.
Dada la naturaleza del Sudoku, es posible dejar sólo algunos datos en las matrices s en S. De esta forma, la representación binaria de s pudiera reducirse considerablemente, y no tan sólo porque, eventualmente, serían menos números, sino porque los números van de 1 a 9, representables con 4 bits.

Algunos pequeños gigantes problemas son los siguientes:

  • La búsqueda del conjunto S óptimo es un problema de combinación, resultando en un algoritmo exponencial. Se podría tratar con metaheurísticas, pero no garantizaría completitud.
  • Suponiendo que se ha encontrado un S óptimo, al momento de descomprimir, cada s debe ser reconstruido. Los mejores algoritmos para resolver Sudokus aún son exponenciales.
¿Alguna idea?