Data compression · Compresión de datos
Why compress data
- Data takes up space to store and time to send.
- Compression makes a file smaller so it is cheaper to save and faster to share.
- There are two kinds: lossless and lossy.
¿Por qué comprimir datos
- Los datos ocupan espacio para almacenarse y tiempo para transmitirse.
- La compresión hace que un archivo sea más pequeño, lo que reduce el costo de almacenamiento y acelera su distribución.
- Existen dos tipos: sin pérdida y con pérdida.
Lossless compression
- Lossless makes a file smaller but keeps every bit of the data.
- When you open the file, you get back the exact original.
- It works by finding patterns and writing them in a shorter way.
Compresión sin pérdida
- La compresión sin pérdida reduce el tamaño del archivo pero conserva todos los bits de los datos.
- Al abrir el archivo, se recupera la exacta versión original.
- Funciona identificando patrones y escribiéndolos de una forma más corta.
Original: AAAAAAAA-BBB
Shorter: 8A-3B (8 A's, then 3 B's)
Open it: AAAAAAAA-BBB (exactly the same again)
Lossy compression
- Lossy makes a file much smaller by throwing away some data.
- It drops details that people can barely see or hear.
- You cannot get the exact original back — but it is "close enough".
Compresión con pérdida
- La compresión con pérdida reduce mucho el tamaño del archivo eliminando parte de los datos.
- Descarta detalles que las personas apenas pueden ver u oír.
- No se puede recuperar la exacta versión original — pero queda "suficientemente cerca".
Photo (large) --lossy--> Photo (small)
A few colors and fine details are gone,
but your eye hardly notices.
The trade-off: size vs quality
- Lossless keeps full quality, but the file stays larger.
- Lossy gives a much smaller file, but quality goes down a little.
- You choose based on what matters more: perfect data or small size.
El compromiso: tamaño vs. calidad
- La compresión sin pérdida mantiene la calidad total, pero el archivo sigue siendo más grande.
- La compresión con pérdida produce un archivo mucho más pequeño, pero la calidad disminuye ligeramente.
- Se elige según lo que importe más: datos perfectos o tamaño reducido.
When to use each
- Use lossless when every detail must be exact.
- Use lossy when a small drop in quality is fine and small size matters.
Cuándo usar cada una
- Use sin pérdida cuando cada detalle debe ser exacto.
- Use con pérdida cuando una pequeña reducción en la calidad es aceptable y el tamaño reducido es prioritario.
Lossless: text, code, a .zip file, a spreadsheet
Lossy: photos (JPEG), music (MP3), video
Key idea
- Compression trades size against quality (or against work to undo it).
- Lossless = smaller and perfect; lossy = much smaller but not exact.
- Good engineers pick the right kind for the job.
Idea clave
- La compresión intercambia tamaño contra calidad (o contra el esfuerzo necesario para revertirla).
- Sin pérdida = más pequeño y perfecto; con pérdida = mucho más pequeño pero no exacto.
- Los buenos ingenieros eligen el tipo adecuado para cada tarea.
Run-length encoding
- Run-length encoding (RLE) is a simple lossless method.
- A run is a stretch of the same character repeated. RLE stores a count instead of the repeats.
- We will store each run as a pair
[character, count]inside a list.
Codificación por recurrencias
- La codificación por recurrencias (RLE, por sus siglas en inglés) es un método simple sin pérdida.
- Una recurrencia es una secuencia de caracteres idénticos repetidos. RLE almacena un contador en lugar de las repeticiones.
- Almacenaremos cada recurrencia como un par
[character, count]dentro de una lista.
"AAAB" -> [["A", 3], ["B", 1]] (3 A's, then 1 B)
[["A", 3], ["B", 1]] -> "AAAB" (decode it back — exact again)
Common mistakes
- Lossless compression can be reversed exactly; lossy throws away detail.
- More compression can mean lower quality.
Errores comunes
- La compresión sin pérdida puede revertirse exactamente; la con pérdida elimina detalles.
- Mayor compresión puede implicar menor calidad.
Now you try
- Build RLE yourself: an encoder, a decoder, and a length helper.
- Each task checks your function on several inputs. Press Check answer.
Ahora practica
- Construye RLE tú mismo: un codificador, un decodificador y una función auxiliar de longitud.
- Cada tarea verifica tus funciones con varias entradas. Presiona Comprobar respuesta.
Lossless compression · Compresión sin pérdida
Run-length encoding replaces a run of repeats with count + symbol. · La codificación por recuento de repeticiones reemplaza una secuencia de repeticiones con recuento + símbolo.
Write encode(text) for run-length encoding. Return a list of [character, count] pairs, one per run of repeats. Example: encode("AAAB") → [['A', 3], ['B', 1]]. For the empty string return []. · Escriba encode(text) para codificación por longitudes de carrera. Devuelva una lista de pares [character, count], uno por cada serie de repeticiones. Ejemplo: encode("AAAB") → [['A', 3], ['B', 1]]. Para la cadena vacía devuelva [].
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Write decode(pairs) that reverses the encoder: given a list of [character, count] pairs, rebuild the original string. Example: decode([['A', 3], ['B', 1]]) → 'AAAB'. For [] return · retorno ''. · Escriba decode(pairs) que invierta el codificador: dada una lista de pares [character, count], reconstruya la cadena original. Ejemplo: decode([['A', 3], ['B', 1]]) → 'AAAB'. Para [] devuelva ''.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Without decoding, write original_length(pairs) that returns how many characters the original text had — just add up the counts. Example: original_length([['A', 3], ['B', 1]]) → 4. · Sin decodificar, escribe original_length(pairs) que devuelva cuántos caracteres tenía el texto original — simplemente suma los recuentos. Ejemplo: original_length([['A', 3], ['B', 1]]) → 4.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.