Run-length encoding (compression) · Pengkodean panjang-lari (kompresi)
Squeezing repeated data
- Compression makes data smaller. Run-length encoding (RLE) is one simple way.
- It works well when the same value repeats many times in a row.
- It is lossless: from the squeezed form you can rebuild the exact original.
Memampatkan data berulang
- Kompresi membuat data menjadi lebih kecil. Pengkodean panjang lari (RLE) adalah salah satu cara sederhana.
- Ini bekerja baik ketika nilai yang sama berulang banyak kali secara berurutan.
- Ini tanpa kehilangan: dari bentuk yang dipadatkan Anda dapat membangun kembali aslinya persis.
What a "run" is
- A run is a stretch of the same character repeated: in
"aaabbc","aaa"is a run of 3. - RLE replaces each run with the character followed by how many times it repeats.
- So
"aaabbc"becomes"a3b2c1"— much shorter when runs are long.
Apa itu "lari"
- Sebuah lari adalah rentang karakter yang sama yang berulang: dalam
"aaabbc","aaa"adalah lari sepanjang 3. - RLE mengganti setiap lari dengan karakter diikuti oleh berapa kali ia berulang.
- Jadi
"aaabbc"menjadi"a3b2c1"— jauh lebih pendek saat lari panjang.
Counting a run
- To measure a run, look at a character, then count how many of the same character follow it.
- Stop when the next character is different, or you reach the end (
'\0'). - That count is the run's length.
Menghitung lari
- Untuk mengukur lari, lihat sebuah karakter, lalu hitung berapa banyak sama karakter yang mengikutinya.
- Berhenti ketika karakter berikutnya berbeda, atau Anda mencapai akhir (
'\0'). - Hitungan itu adalah panjang lari.
Building the encoded string
- Walk the input. For each run, write the character, then its count, into the output.
- Move your input position past the whole run before starting the next one.
- End the output string with
'\0'so it is a proper C string.
Membangun string yang dikodekan
- Jelajahi input. Untuk setiap lari, tulis karakter, lalu hitungannya, ke output.
- Pindahkan posisi input Anda melewati seluruh lari sebelum memulai yang berikutnya.
- Akhiri string output dengan
'\0'agar menjadi string C yang benar.
#include <stdio.h>
int main(void) {
const char *s = "aaab";
int i = 0;
char c = s[i];
int count = 0;
while (s[i] == c) { // count the first run
count++;
i++;
}
printf("%c%d\n", c, count); // a3
return 0;
}
Common mistakes
- Run-length encoding stores a value then its count; it only helps when there are long runs.
- It is lossless — the original is restored exactly.
Kesalahan umum
- Pengkodean panjang lari menyimpan nilai lalu hitungnya; hanya membantu jika ada lari panjang.
- Ini tanpa kehilangan — aslinya dipulihkan persis.
Now you try
- Find each run, then write the character and its count to the output.
- The caller gives you an output buffer big enough to hold the result. Do not write a
main.
Sekarang Anda coba
- Temukan setiap lari, lalu tulis karakter dan hitungnya ke output.
- Pemanggil memberikan buffer output Anda cukup besar untuk menampung hasilnya. Jangan tulis
main.
Run-length encoding · Pengkodean panjang rentang
Replace a run of repeats with count + symbol — lossless. · Ganti rentang pengulangan dengan jumlah + simbol — tanpa kehilangan data.
Complete int run_length_at(const char *s, int i) so it returns how many times the character s[i] repeats starting at index i. Do not write a main. · Lengkapi int run_length_at(const char *s, int i) agar mengembalikan berapa kali karakter s[i] berulang mulai dari indeks i. Jangan tulis sebuah main.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
Complete void rle_encode(const char *in, char *out) so it writes the run-length encoding of in into out: each run becomes the character then its count. "aaabbc" becomes "a3b2c1". End out with '\0'. Do not write a main. · Lengkapi void rle_encode(const char *in, char *out) agar menulis pengkodean panjang-lari dari in ke out: setiap rentang menjadi karakter lalu jumlahnya. "aaabbc" menjadi "a3b2c1". Akhiri out dengan '\0'. Jangan tulis sebuah main.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.