Objetivo: Comprimir esta frase de la forma más efectivamente posible.
Esta semana voy a jugar al pádel.
Mediante el código Ascii, vamos a asociar un código a cada letra. Cada código tiene asociado a su vez un conjunto de 0 y 1.
Esta frase en código Ascii sería así:
E s t a s e m a n a v o y a j u g
69-115-116-97-32-115-101-109-97-110-97-32-118-111-121-32-97-32-106-117-103-
a r a l p a d e l .
-97-114-32-97-108-32-112-97-100-101-108-46
El problema es que este conjunto es demasiado extenso, con lo que vamos a tratar de acortarlo.
Para ello, vamos a asociar a cada letra y símbolo un número, que esté a su vez asociado al código de la letra en Ascii.
Como esto es un texto sin números, podemos asociar a los códigos Ascii, un número de uno o dos dígitos, ahorrando en algunos casos hasta 2 dígitos; pero no solo podemos asociarlos a números de dos dígitos, sino también a símbolos, que ocupan un solo caracter, con lo que cuando lleguemos a una asignación de doble dígito, podemos cambiar y usar símbolos.
Además, esto en textos extensos es mucho más efectivo, puesto que en lugar de asociarlos a letras, podemos asociarlos a palabras, lo que nos hace ser mucho más productivos.
a → 1 E → $
e → 2 Espacios → %
o → 3 g → *
u → 4 . → .
l → 5
s → 6
t → 7
m → 8
n → 9
v → @
y → #
j → +
r → ^
p → &
d → \
Con lo que la frase quedaría así:
$671%628191%@3#%1%+4*1^%15%&1\25.
Así, la frase tiene 33 caracteres, frente a los 84 iniciales.
Tras estas dos entradas relacionadas con la compresión, vamos a hacer una pequeña reflexión entre los compresores.
Ya hemos explicado como funcionan, gracias al post anterior sobre las imágenes y a éste sobre el texto, así que una vez visto su funcionamiento, podemos deducir que hay algunos más efectivos que otros, como es lógico.
Pero incluso, hay algunos que en lugar de reducir la información, lo que hacen es agrandarlas. Esto se debe a que en lugar de guardar una estimación, guarda una copia exacta, con el mismo nivel de detalle, aunque si queremos eso es mejor guardar otra copia en lugar de una compresión.
También tenemos otros, que son capaces de guardar una aproximación.
El objetivo de la compresión es siempre reducir el tamaño de la información, intentando que esta reducción de tamaño no afecte al contenido. No obstante, la reducción de datos puede afectar o no a la calidad de la información:
- Sin pérdida. Los datos comprimidos son exactos a los no comprimidos. Esto hace que la compresión necesite más o menos tiempo de descompresión, sin embargo no pierde calidad. Además, la tasa de bits que se transmiten en cierto tiempo siempre varía. Es el usado en los textos.
En los textos extensos, por ejemplo, podemos asociar a palabras un símbolo como por ejemplo el @ o la #.
Un ejemplo de la transferencia sin pérdida es el que hemos representado en este post.
- Con pérdida. Los datos guardados son una estimación, con lo que se reduciría la calidad, ya que reduce el tamaño. Aquí la tasas de bits que se transmiten en cierta unidad de tiempo puede ser constante o ser variable.
Por ejemplo:
Tenemos una foto, que tiene diferentes tonalidades de blanco al gris en una línea.
El compresor, en lugar de guardar cada una de las tonalidades de la foto original, hace una estimación entre los extremos donde hay grandes cambios de tonalidad, con lo que a lo mejor, la foto se nos quedaría con un tono de blanco intermedio y un tono de gris intermedio.
Imagen original:
Imagen comprimida:
Esto da lugar a una estimación muy aproximada de la imagen.