2013-03-14 3 views
0

Кто-нибудь знает о сжатии для очень коротких номеров/двоичных строк?Сжатие для коротких номеров строк

Например, хотелось бы, чтобы сжать любые цифры (0-9) или двоичный, т.е. 3,2,6,4
или
Я хотел бы сжать числа или двоичный из 2,1,3, 6,1,4,13

Применяется для исследования 4 и еврокомилий.

ответ

0

Я посмотрел EuroMillions и Pick 4. Я вижу, что первые колеблются от 1 до 50, а последние 0-9. Я думаю, что мы можем предположить, что любое число равновероятно (некоторые схемы сжатия используют тот факт, что некоторые числа более вероятны, чем другие).

На какой платформе вы кодируете? Язык высокого уровня, такой как Python или JavaScript? Или язык более низкого уровня, такой как C или C++? Вы надеетесь сохранить большой набор числовых последовательностей? Или вы просто пытаетесь найти эффективное представление в памяти?

Самый разумный компромисс, который вы могли бы сделать, если бы вы хотели работать с большим набором в памяти, - это убедиться, что каждый символ представлен не более чем на 1 байт (который может содержать значения от 0 до 255). Это может быть сложнее сделать на языках более высокого уровня, которые часто имеют тип «число» без какой-либо более тонкой детализации. Но C/C++ или даже Java должны позволить вам сделать это.

Если вы хотите сохранить большой набор этих одинаково вероятных номеров на диске, посмотрите минимальное количество бит, необходимое для хранения номера. Для EuroMillions вам понадобится 6 бит для хранения номера (2^6 = 64). Затем сохраните их в битовом потоке, чтобы сохранить 2 бита на номер. С помощью Pick 4 вы можете кодировать 2 числа в одном байте.

Смежные вопросы