Вы можете легко сократить пространство пополам!
Поскольку ваши двоичные данные не имеют повторений, ваши единственные опции - [0, 1], [1, 0]. Все, что больше, будет повторять либо ноль, либо единицу. Таким образом, вы можете просто представить первый набор с 0, а второй набор с 1. Кодировка будет выглядеть примерно так ...
encode [0, 1] = 0
encode [1, 0] = 1
И расшифровка будет ...
decode 0 = [0, 1]
decode 1 = [1, 0]
Извините за синтаксис haskell, в этом случае он намного более читабелен. Это превращает ваш массив из двух элементов в массив из одного элемента и может храниться в половине пространства! Магия.
EDIT: игнорируется тривиальный случай [0] и [1]. Если их необходимо обработать (хотя на самом деле вам не нужно сжимать 1 бит), получить степень сжатия лучше, чем 100%.