RLE в bzip2
Очень меня поразил тот факт, что внутри очень эффективного архиватора bzip2 работает алгоритм RLE. Да, после очень хитрых перестановок данных, но RLE!
Это очень простое семейство алгоритмов сжатия, с которым я познакомился ещё в то время, когда у меня был «Спектрум».
У него может быть много разных реализаций, но та, что я тогда программировал, выглядела следующим образом.
Последовательности одинаковых значений мы кодируем как один и тот же байт, записанный дважды, плюс счётчик — сколько таких байтов надо дописать; остальное оставляем как есть.
Например:
01 02 03 03 03 03 03 03 03 04 04 04 → 01 02 03 03 05 04 04 01
Как я уже написал, могут быть варианты. Например, можно счётчик делать больше, чем один байт или записывать количество повторений около каждого байта, всё зависит от характера сжимаемых данных, но суть
Комментарии 15
байтов?
02 11 22 33 85 44 раскодируются в 11 22 33 44 44 44 44 44 44
02 кодирует длину равную трем (отчёт с нуля ибо нулевой длины не бывает в данном случае). Аналогично с 85 — кодирует длину 6
02 11 22 33 85 44 ← ваш вариант
11 22 33 44 44 04 ← который я описал
81 11 81 22 против
11 11 00 22 22 00
Если я правильно понял ваш вариант кодирования
На сайте найдите спойлер RLE кодирование/декодирование своими руками
Попробуйте
На выходе сжатый файл, плюс 6 байт заголовка.
Реализация на Си и на JavaScript.