Что было бы хорошим способом кодировать 52 целых числа в меньшее количество? - PullRequest
0 голосов
/ 02 августа 2011

Так, например, у меня есть массив, содержащий 52 перемешанных целых числа от 0 до 52 - без повторяющихся значений.

Как я могу кодировать этот массив в соответствии с алгоритмом, чтобы он мог быть представлен в виде меньшего числа, а затем декодировать и снова воспроизводить исходные значения?

Я думал, что смогу создать большую двоичную строку и группировать группу из 0 или 1 вместе как символы, и расширить это. Будет ли это путь? Спасибо

Ответы [ 4 ]

8 голосов
/ 02 августа 2011

Есть 52! (это пятьдесят два факториала) разные массивы, как вы описываете. Кстати они называются перестановками. Одно число от 0 до 52! уникально представляет такую ​​перестановку. Вам нужно 226 бит для хранения такого числа. Восемь 32-разрядных целых чисел бы сработали так же хорошо.

Вы можете прочитать о преобразовании чисел в перестановки и обратно здесь .

0 голосов
/ 02 августа 2011

Если ваш диапазон от 0 до 52, то вам нужно всего 6 бит для хранения каждого числа - поэтому вместо 52 байтов (при условии, что вы используете 1 байт на цифру) вам понадобится только 52 x 6/8 или 39 байтов.

Вряд ли стоит экономить, если только у вас нет триллионов их для хранения.

0 голосов
/ 02 августа 2011

А как насчет разделения массива на дерево квадрантов или пространственный индекс, а затем с помощью кривой заполнения пространства для уменьшения сложности? Может быть, это может сделать z-кривая или кривая Гильберта? Вам нужна мощность 2 2d массива? Это ваше требование?

0 голосов
/ 02 августа 2011

вам нужна 6-битная переменная для хранения значений ниже 64 Союз является ключом

union DATAPACK
{
    unsigned int code1 : 6;
    unsigned int code2 : 6;
    unsigned int code3 : 6;
    unsigned int code4 : 6;
   ....
} array1; 
...