Например, вы можете сжать файл и получить отличный уровень сжатия всего с 3 символами.
Если вы хотите выполнить тяжелую работу, вы можете сделать то, что делают базовые алгоритмы zip:
У вас есть 3 значения -1, 0 и 1.
Затем вы можете определить дерево трансляций, например:
bit sequence - symbol
0 - 0
10 - 1
110 - -1
1110 - End of data
Таким образом, если вы читаете ноль, вы знаете, что это символ 0, и если вы читаете 1, вы должны прочитать следующий бит, чтобы узнать, является ли он единицей, или если вам нужно прочитать еще один, чтобы узнать, является ли он -1.
Так что, если у вас есть серии 1,1,0, -1,0, это будет переводиться как:
101001100
Если это все данные, которые вы видите, у вас есть 9 битов, поэтому вам нужно будет что-то дополнить до 16.
Затем просто поставьте конец маркера данных и после этого anytihg.
10100110 01110000
Для этого вам нужно работать с битовыми операторами.
Если вы знаете, что любой из этих символов имеет скорость вхождения больше, чем у остальных, используйте этот символ с меньшим количеством битов (например, 0 должен представлять наиболее часто используемый символ).