Парная функция, которая генерирует уникальное значение для заданного числа целых чисел - PullRequest
1 голос
/ 19 сентября 2019

У меня есть различные наборы целых чисел, каждый набор может иметь от 2 до> 10 целых чисел со значениями от 0 до 500ish (переменная).Я хотел бы соединить их в уникальный номер.Я исследовал функцию сопряжения Кантора, но мне пришлось бы объединять два числа за раз, и для более длинных групп чисел это вскоре привело бы к очень большим числам.

Например: набор 1: [1,12,65,4] будет сопоставлен с уникальным значением, отличающимся для значения, представляющего набор 2: [1,12,65,2].

Также еще одним приятным требованием было бы, чтобы множества [1,4,78,5] и [1,4,78,10] были бы близки друг к другу, когда представлены уникальным числом.

Возможно ли это математически?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Если я правильно понимаю ваш вопрос, вам нужна инъективная функция R ^ n -> R. Да, это определенно возможно.

Самое простое решение - просто соединить цифры.Например, для [1,12,65,4] каждая цифра может быть представлена ​​как [001,012,065,004], и вы можете сопоставить это с 1012065004. Это также имеет свойство, близкое к [1,12,65,2] -> 1012065002.

Другим решением является «переплетение» цифр.Например, если у вас есть [abc, def] -> adbecf.Так что для [1,12,65,4] -> [001,012,065,004] -> '000001601254' -> 1601254. Это приводит к меньшим значениям.

Как только у вас есть эта инъективная функция, вы можете составить ее с другойинъективная функция R -> R (например, f (x) = log x), чтобы сделать значения не слишком большими для вашего приложения.

0 голосов
/ 19 сентября 2019

Я думаю, что функция кортежа cantor могла бы быть решением.Непосредственно перед этим просто отсортируйте номера набора, а затем перейдите к функции канторной записи .

Таким образом, вы получите уникальный результат для каждого набора, и каким-то образом он мог бы удовлетворить хорошее требование (Не лучшее, но могло бы быть решением).

enter image description here

...