Какой RLE лучше-2
Какое-то время назад я сравнивал два разных алгоритма сжатия RLE. Один вспомнил сам, а второй прислал один из читателей.
Они по-разному устроены, но оба используют для сжатия простой принцип — вместо повторяющейся последовательности записывать её длину. Я тогда написал небольшой скрипт на Пайтоне, чтобы сравнить эти два алгоритма на бинарных файлах в моей папке «Загрузки» и посмотреть что получится.
Оказалось, что более сложным алгоритмом я кодирую неправильно, так как в нём потенциально есть несколько стратегий кодирования одной и той же последовательности, чего я не увидел и не учёл в своей программе. На это мне попенял читатель, который мне когда-то и прислал этот алгоритм.
У меня всё никак не доходили руки аккуратно переписать свой скрипт, чтобы учесть замечание, но сегодня я не вытерпел и сделал некрасиво, практически перебором. Правда двухбайтный счётчик повторов делать не стал, наверное он тоже повлиял бы, но пока что-то времени нет дописать это место.
В общем, новые результаты такие. Использовал на той же папке, что и в прошлый раз, но с той поры её состав немного поменялся. Алгоритм, который вспомнил я, лучше сжал 440 файлов, который предложил читатель — 4159, не удалось сжать вообще — 2507 файлов.
Прежний результат был такой: 1811 лучше сжал «мой» алгоритм, 2152 — читательский, в 3193 случаях не справился ни один из алгоритмов.
В общем, соотношение сильно изменилось.