Data compression · Kompresi data
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.
Mengapa kompres data
- Data memakan ruang untuk disimpan dan waktu untuk dikirim.
- Kompresi membuat file lebih kecil sehingga lebih murah untuk disimpan dan lebih cepat untuk dibagikan.
- Ada dua jenis: lossless (tanpa kehilangan) dan lossy (dengan kehilangan).
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.
Kompresi lossless
- Lossless membuat file lebih kecil tetapi mempertahankan setiap bit data.
- Saat Anda membuka file, Anda mendapatkan kembali persis aslinya.
- Cara kerjanya adalah dengan menemukan pola dan menuliskannya dengan cara yang lebih pendek.
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".
Kompresi lossy
- Lossy membuat file jauh lebih kecil dengan melempar sebagian data.
- Ia membuang detail yang hampir tidak terlihat atau didengar manusia.
- Anda tidak bisa mendapatkan kembali asli yang persis—tetapi itu "cukup dekat".
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.
Trade-off: ukuran vs kualitas
- Lossless menjaga kualitas penuh, tetapi filenya tetap lebih besar.
- Lossy memberikan file jauh lebih kecil, tetapi kualitas turun sedikit.
- Anda memilih berdasarkan apa yang lebih penting: data sempurna atau ukuran kecil.
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.
Kapan harus menggunakan masing-masing
- Gunakan lossless ketika setiap detail harus akurat.
- Gunakan lossy ketika penurunan kualitas sedikit diperbolehkan dan ukuran kecil penting.
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.
Ide kunci
- Kompresi menukar ukuran terhadap kualitas (atau terhadap usaha untuk membalikkannya).
- Lossless = lebih kecil dan sempurna; lossy = jauh lebih kecil tetapi tidak tepat.
- Insinyur yang baik memilih jenis yang tepat untuk pekerjaannya.
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.
Pengkodean panjang larian
- Pengkodean panjang larian (RLE) adalah metode lossless yang sederhana.
- Sebuah larian adalah rentang karakter yang sama yang berulang. RLE menyimpan jumlah alih-alih pengulangannya.
- Kita akan menyimpan setiap larian sebagai pasangan
[character, count]di dalam daftar.
"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.
Kesalahan umum
- Kompresi lossless dapat dibalik secara presisi; lossy melemparkan detail.
- Kompresi lebih besar dapat berarti kualitas lebih rendah.
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.
Sekarang Anda coba
- Bangun RLE sendiri: sebuah encoder, decoder, dan pembantu panjang.
- Setiap tugas memeriksa fungsi Anda pada beberapa input. Tekan Check answer.
Lossless compression · kompresi tanpa kehilangan
Run-length encoding replaces a run of repeats with count + symbol. · Pengkodean run-length mengganti rentang pengulangan dengan count + symbol.
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 []. · Tulis encode(text) untuk pengkodean run-length. Kembalikan list of [character, count] pairs, satu per rentang pengulangan. Contoh: encode("AAAB") → [['A', 3], ['B', 1]]. Untuk string kosong kembalikan [].
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
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 ''. · Tulis decode(pairs) yang membalik encoder: given a list of [character, count] pairs, bangun kembali string asli. Contoh: decode([['A', 3], ['B', 1]]) → 'AAAB'. Untuk [] kembalikan ''.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
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. · Tanpa decoding, tulis original_length(pairs) yang mengembalikan berapa banyak karakter yang dimiliki teks asli — cukup jumlahkan semua count-nya. Contoh: original_length([['A', 3], ['B', 1]]) → 4.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.