Альтернативой упакованным растровым изображениям и колесам, но одинаково эффективной в определенных контекстах, является сохранение различий между последовательными простыми числами. Если вы опустите номер 2 как обычно, тогда все различия будут четными. Сохраняя разницу / 2, вы можете получить до 2 ^ 40 регионов (непосредственно перед 1999066711391), используя байтовые переменные.
Простые числа до 2 ^ 32 требуют только 194 МБайт, по сравнению с 256 МБ для упакованного битового массива, рассчитанного только на коэффициент. Повторение простых чисел, хранимых в дельте, выполняется намного быстрее, чем в случае колесного хранилища, которое включает в себя колесо по модулю 2, известное как битовая карта только для коэффициентов.
Для диапазонов от 1999066711391 и более, требуется больший размер ячейки или хранилище переменной длины. Последнее может быть чрезвычайно эффективным, даже если используются очень простые схемы (например, продолжайте добавлять до тех пор, пока не будет добавлен байт <255, как при сжатии в стиле <a href="http://en.wikipedia.org/wiki/LZ4_%28compression_algorithm%29"> LZ4 ), из-за чрезвычайно низкой частоты разрывов, превышающих 510 / 2.
Ради эффективности лучше разделить диапазон на разделы (страницы) и управлять ими в стиле B-Tree.
Энтропийное кодирование различий (Хаффманна или арифметическое кодирование) снижает требования к постоянному хранению до чуть менее половины, что близко к теоретическому оптимуму и лучше, чем списки или колеса, сжатые с использованием лучших доступных упаковщиков.
Если данные хранятся в несжатом виде, то они все еще намного компактнее, чем файлы двоичных или текстовых чисел, на порядок или более. Имея индекс стиля B-Tree, можно просто отображать разделы в памяти по мере необходимости и перебирать их с невероятной скоростью.