ewoke: (Default)
ewoke ([personal profile] ewoke) wrote2014-10-03 10:58 pm
Entry tags:

LolPack

пусть у нас есть несжимаемый файл, по определению, байтики рандомные.

если взять первые 8 байт и представить их как число 64 бит, то для него можно подобрать множители, такие, что их можно записать как степень двойки (тройки). также будет остаток, который нужно будет добавить к произведению этих нескольких чисел, чтобы получить исходное число.

цель - найти такие множители, для которых можно будет записать их степень однобайтовым числом, т.е. от 0 до 255; например 2^16 или 3^78. если мы найдем такие множители, обозначение которых, включая обозначение остатка, займет меньше 8 байт, считай мы сжали эти 8 байт.

ну и (конечно) служебные байты для ведения структуры "архива", немного добавят информации, уменьшив соотношение исходного файла к "запакованному".

для этого приятно иметь процедуры деления/умножения произвольных больших целых чисел.