Версия: 0.1 Сайт: http://bit.ly/16wY1Dx
Давайте на минутку углубимся в технические подробности. Обычно простой текст требует по байту (8 бит) на каждый символ, но это довольно расточительно. Один байт может содержать число от 0 до 255, но поскольку в английском алфавите всего 26 букв, к чему нам такой размах? Конечно, есть буквы заглавные и строчные, цифры, знаки препинания и разные символы, но подавляющее большинство символов в текстовом документе являют собой маленькие буквы от а до z.
Всего пять битов из байта уместят любое число от 0 до 31, то есть наши 26 маленьких букв можно хранить куда более эффективно: например, использовать пять битов из байта для хранения одного символа, остальные биты — для хранения части следующего символа, и так далее. Но если делать все вручную, возня с битами может обернуться кошмаром; и вот вам Fivebit, небольшой удобный модуль Python, который выполнит всю черную работу. Он сжимает текст в 5-битную кодировку, суля 37,5% сжатия для текста из строчных букв.
Чтобы его использовать, сохраните файл fivebit.py в отдельную директорию и откройте новый файл, foo.py, со следующим контентом: import fivebit text = “abcdefghij” small = fivebit.compress(text) print text print small
Сохраните его, запустите python foo.py, и вы увидите следующие результаты: abcdefghij
[0, 68,50, 20,199, 66,122]
Итак, мы взяли строку из 10 символов, прогнали ее через алгоритм сжатия Fivebit и показали результат (вторая строка). Вы видите, что исходная строка, в обычном тексте занимавшая бы 10 байт, в результате стала 7 байт. (Из-за хитроумного 5-битного кодирования вторую строку нельзя распечатать, как обычный текст, и в ней просто выведены десятичные значения каждого байта.) Итак, налицо уже 30% экономии, и чем больше строчных букв вы используете, тем ближе этот показатель к 37,5%. Разве не здорово?