Сжатие строк
августа 8, 2008
Ради сокращения строк и файлов используется библиотека zlib.
Зачем может уйти сжимать строки? Очевидно, чтобы ускорить ввод/
вывод из базы данных, оптимизировать применение сети или усложнить распознавание строк.
В классах Deflate и Inflate существуют способы класса deflate и inflate соответственно.
У метода deflate (он выполняет сжатие) ест.Ь дополнительный параметр,
задающий режим сжатия. Он определяет компромисс между свойством сжатия и
скоростью. В случае, если значение равно BEST_COMPRESSION, то строка сжимается максимально,
однако это занимает относительно много-много времени. Значение BEST_SPEED задаст
большую скорость, однако при этом строка сжимается хуже. Подразумеваемое
по умолчанию значение DEFAULT_COMPRESSION выбирает компромиссный режим.
require ‘zlib’
include Zlib
long_string = (”abcde”*71 + “defghi”*79 + “ghijkl”*113)*371
# long_string состоит из 559097 символов.
si = Deflate.deflate(long_string,BEST_SPEED) # 4188 символов.
s3 = Deflate.deflate(long_string) # 3568 символов
s2 = Deflate.deflate(long_string,BEST_COMPRESSION) # 2120 символов
Неформальные опыты показывают, что скорость отличается приблизительно
в два присеста, а плотность сжатия — в обратной пропорции на ту же величину. И скорость, и плотность сильно зависят от состава строки. Разумеется, на скорость воздействует и наличествующее средство.
Имейте в виду, что существует пороговое значение длины строки. В случае, если строка
короче, то сжимать ее почти бесполезно (в случае, если только вы не собираетесь предпринять ее нечитаемой). В этом эпизоде неизбежные накладные затраты могут даже привести к тому, что сжатая линия будет длиннее исходной.
Комментировать
Вы должны войти для того, чтобы оставить комментарий.