Сериализация параллельных целых чисел - PullRequest
0 голосов
/ 21 марта 2012

я хочу сериализовать параллельную информацию, например (1,23,5,32,6,1,0,5,1,6), в одно целое число («индекс» с этого момента) Массив всегда имеет ровно десять значений, и порядок значений имеет значение.

Значения массива являются целыми числами, которые могут достигать от 0 до + inf и полностью независимы друг от друга. Я продумал несколько возможных решений, но не могу найти решение, в котором каждый возможный массив имеет ровно один возможный индекс, а каждый возможный индекс имеет ровно один возможный массив.

Вы можете представить ситуацию, как десять (упорядоченных) коробок подряд, в которые было положено определенное количество шариков. Теперь существует бесконечное количество этих рядов, и каждый ряд имеет различное количество шаров в коробках. Как вы можете дать каждой строке один номер (например, каталог), и вы точно знаете, сколько шариков в какой коробке?

Я знаю, что номер индекса будет смехотворно большим при больших значениях массива, но я все равно не буду использовать большие значения массива.

Примеры:

Индекс: массив

0: (0,0,0,0 ..., 0,0)

1: (0,0,0,0 ..., 0,1)

Должно быть простое математическое решение, но я этого не вижу.

Большое спасибо!

Someonelse

Ответы [ 2 ]

0 голосов
/ 10 ноября 2012

Приведенный выше ответ henrik предполагает, что вы знаете максимальное количество цифр для номера, если вы уже знаете, что нет необходимости чередовать, просто объедините числа, дополненные нулями.

У меня есть общая конструкция :) Предположим, только два измерения и расположить пары, как это и поддерживать два целых числа.
(0,0) \\offset:0 -- sum:0
(0, 1), (1, 0) \\offset:1+0 -- sum:1
(0, 2), (1, 1), (2, 0) \\ offset:1+2 -- sum:2

так что, по сути, индекс для кортежа - это индекс + смещение, где смещение определяется уровнем (fibbonacci (уровень), уровень определяется суммой слагаемых, индекс определяется порядком. (Смещение + index) гарантированно является уникальным и может быть декодировано динамическим программированием

Для более чем двух измерений просто рекурсивно сверните измерения, получите целое число для первых двух измерений, это уменьшит вашу проблему на 1 измерение, а затем вы можете продолжать:)

0 голосов
/ 21 марта 2012

Вы можете просто чередовать цифры. Пример с массивами размера 3 вместо 10:

(123, 456, 789) --> 147258369

при необходимости введите начальные нули:

(123, 4, 5) --> 100200345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...