Я проект, над которым я работаю, у меня есть последовательность чисел (около 2 миллиардов). Каждое число составляет 4 байта и уникально. Числа сортируются. Моя цель - прочитать их в RAM как можно скорее в несжатом формате. Это не касается места на жестком диске.Сжатие последовательности уникальных отсортированных чисел
Если я храню их несжатыми, мне нужно 2 миллиарда * 4 байта = 8 ГБ. Это займет около 100 секунд для чтения. Я могу хранить данные как последовательность бит, и для этого потребуется 2 миллиарда/8 = 250 МБ. Это займет около 3 секунд для чтения.
Мне нужно прочитать и распаковать их примерно на 0,1-0,5 секунды (если возможно) с помощью обычного жесткого диска. Мне все равно, сколько времени потребуется для сжатия данных, но мне очень важно, сколько времени потребуется для их распаковки, и мне нужно, чтобы это было сделано за несколько миллисекунд.
Случайность чисел неизвестна.
Вопрос:: Какой алгоритм сжатия может сжать номера примерно до 20-30 МБ с временем декомпрессии 100-200 миллисекунд с использованием процессора i3-i5?
EDIT: Максимальное количество в последовательности будет 2 миллиарда. Вот почему я могу хранить его на бит-массиве размером 250 МБ. Размер последовательности не всегда составляет 2 миллиарда. Он может содержать от 1 до 2.000.000.000 номеров.
Не зная ничего о статистике чисел, ответы на которые вы собираетесь получить, просто будут случайными догадками людей, говорящих вам попробовать эту библиотеку или тот. Номера уникальны, поэтому вы, вероятно, не можете с ними справиться напрямую. Сначала вам нужно будет найти избыточность данных. Например, проанализировали ли вы статистику разности последовательных чисел, чтобы, возможно, попробовать дифференциальный кодер в этих различиях? – dpmcmlxxvi
@dpmcmlxxvi: Одним словом, я храню числа отчётов, которые появляются в этом слове. – AlgoCoder
Как вы собираетесь с 8 до 250 МБ? Как кодирование различается между 4 байтовыми числами (ints, предположительно?) И «последовательностью бит»? – mhum