Я изучаю внутреннюю работу Gzip и понимаю, что он использует комбинацию Кодирование Хаффмана и LZ77 .
Я также понимаю, что файл Gzip разделен на блоки, и для каждого блока есть словарь, созданный для него.Затем часто встречающиеся подобные данные заменяются указателями, указывающими на местоположения в словаре.
Таким образом, во фразе «скачки других лошадей» слово лошадей заменяется указателем.
Однако что, если у меня есть массив 32-битных целых, но он хранит только числа до 24 бит?В качестве аргументов, скажем, эти 24-битные числа очень случайны, их трудно сжать, и в них трудно найти повторы.
Это сделает первые 8 бит каждого целого числа легко сжимаемой строкой из 0, но каждая строкапотребуется указатель, и каждый указатель по-прежнему занимает некоторое количество данных.Даже 1-битный указатель (который, как я знаю, меньше, чем реально возможный) все равно будет занимать 12,5% исходного пространства.
Это может показаться несколько избыточным, когда массив можно легко уменьшить до 24-битного массива с базовым распознаванием образов.
Поэтому мой вопрос:
Содержит ли Gzip какие-либо механизмы для лучшего сжатия файла, чем указатели словаря?
Насколько хорошо Gzip может сжимать небольшие объемы повторяющихся данных, а затем небольшие объемы трудно сжимаемых данных?