Если данные не являются действительно случайными и имеют симметричное распределение 1/0, то это просто становится проблемой сжатия данных без потерь и очень похоже на сжатие CCITT Group 3, используемое для черно-белые (т.е. двоичные) факсимильные изображения. CCITT Group 3 использует схему кодирования Хаффмана. В случае факса они используют фиксированный набор кодов Хаффмана, но для данного набора данных вы можете сгенерировать определенный набор кодов для каждого набора данных, чтобы улучшить достигнутую степень сжатия. Пока вам нужен только последовательный доступ к битам, как вы и предполагали, это будет довольно эффективный подход. Произвольный доступ создаст некоторые дополнительные проблемы, но вы, вероятно, сможете сгенерировать индекс бинарного дерева поиска для различных точек смещения в массиве, что позволит вам приблизиться к нужному местоположению, а затем войти оттуда.
Примечание : схема Хаффмана по-прежнему работает хорошо, даже если данные случайные, если распределение 1/0 не является идеально ровным. То есть чем меньше равномерное распределение, тем лучше степень сжатия.
Наконец, если биты действительно случайны с равномерным распределением, тогда, согласно Мистер. Клод Шеннон , вы не сможете сжать его сколько-нибудь значительно, используя любую схему.