У меня есть много уникальных чисел, все положительные и порядок не имеет значения, 0 < num < 2^32
.
Пример: 23 56 24 26
Улучшить алгоритм сжатия чисел?
Самый большой, 56
, нуждается в 6 bits
пространство. Итак, мне нужно: 4*6 = 24 bits
всего.
я сделать следующее, чтобы сэкономить место:
сортировать их первым: 23 24 26 56
(потому что порядок не имеет значения)
Теперь я получить разницу каждого из предыдущего: 23 1 2 30
самый большой, 30
, нуждается в 5 bits
пространство.
После этого я сохраняю все номера в 4*5 bits = 20 bits
.
Вопрос: как улучшить алгоритм?
Дополнительная информация: С запрошенной цифры в основном представлены в диапазоне 2.000-4.000
. Номера менее 300
довольно редки. Числа более 16.000
также довольно редки. Вообще говоря, все цифры будут близки. Например, они могут быть все в диапазоне 1.000-2.000
или все они могут находиться в диапазоне 16.000-20.000
. Общее количество номеров будет в диапазоне от 500-5.000
.
Разница между 56 и 26 равна 30, так что это будет самое большое;) –
да, исправлено, спасибо, что указали его – Luka
Я не понимаю, разрядных вычислений ... где вы храните формат, чтобы его можно было декодировать? –