Если вы хотите, чтобы двоичный элемент каждой буквы имел одинаковый размер, оптимальное решение будет дано Арифметическое кодирование . Тем не менее, он не достигнет вашей цели среднего представления 4,5 бит / символ. Учитывая 26 различных символов (не включая пробел и т. Д.), 4.7 будет лучшим, что вы можете достичь, не используя кодирование переменной длины (например, Хаффмана. См. Ответ Джегерса) или другие алгоритмы сжатия.
Неоптимальным, хотя и более простым, решением может быть нахождение допустимого количества символов, которые можно поместить в большое целое число. Например, если вы формируете 32-разрядное целое число из каждых 6 блоков символов (что возможно как 26 ^ 6 <2 ^ 32), вы используете 5,33 бит / символ. Вы можете даже вставить 13 букв в 64-битное целое число (4,92 бит / символ). Это довольно близко к оптимальному решению и все же довольно легко реализовать. Использование больших 64-битных целых может быть непростым делом из-за отсутствия встроенной поддержки во многих языках программирования. </p>
Если вы хотите получить еще более высокие коэффициенты сжатия для текста, вам определенно следует обратить внимание на алгоритмы сжатия на основе словаря, такие как LZW или Deflate.