Еще сидя за "системником" ZX и изучая асм, прочел о примитивнейшем методе сжатия - составление базы "пустых" блоков. Тогда показалось интересным и не более.
Лет семь назад захотелось попробовать прогать на С, а сделать решил свой кодировщик, но так как собирался добавлять ключ для кодировки то под него надо было освободить в файле место, обычный метод был не лишним, но не актуальным при кодировании архивов и проч. Пришлось написать свой алгоритм, родил за пару дней приблизительно такой принцип:
1) бьем файл на блоки, анализируем на соответствие блока маске из готового набора. Маска должна увеличить число пустых битов в байте.
2) если необходимо, делаем вычитания или прибавления по маске, инфу о маске сохраняем в базу(например: блок,маска№5)
3) теперь у нас есть какой-то процент блоков, имеющих по четыре свободных бита в байте, смещаем байты и смешиваем блоки так, чтобы заполнить пустоты в байтах.
4)повторяем процедуру до потери актуальности..
Проверялось все на бумаге, и работало со случайным набором символов уменьшая файл на 10 и более процентов. Был так е вариант без масок, уменьшение размера от 4%
после недели долботни то ли с Сишными, то ли с компиляторскими глюками забил на С вообще..
Блитца тогда не знал..