алгоритм - отображение n C 4 целых чисел на уникальное значение в пределах [1, N]

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

Допустим, есть три человека, у каждого из которых своя случайно перетасованная колода. Карты в колоде просто имеют значения от 1 до 13, по четыре каждой карты.

Когда приходит время взять карту, каждый берет свою верхнюю карту и показывает ее значение двум другим игрокам.

Сейчас я хочу каким-то образом сопоставить значения каждой из этих верхних карточек с одним целым числом от 1 до 13. Цель состоит в том, чтобы этот алгоритм генерировал что-то уникальное для каждой операции и допускал только 4 одинаковых значения. (когда одни и те же входные данные рассчитываются каждый из четырех раз, это может произойти).

Я знаю, что могу использовать Cantor Pairing Function, чтобы сгенерировать уникальное значение, но я снова хочу его находиться в диапазоне 1-13.


person bafrick    schedule 01.07.2016    source источник
comment
Вы не совсем точно сопоставляете n целых чисел со значением в пределах [1, N]. Это больше похоже на отображение n C 4 целых чисел на значение в пределах [1, N]. Функции хеширования приведут вас к этому, но без гарантии уникальности.   -  person AndyG    schedule 01.07.2016
comment
@AndyG Хороший вопрос, я изменил заголовок своего вопроса, чтобы быть более точным. Что касается использования хеш-функций, мой план резервного копирования состоит в том, чтобы просто делать это и нормально справляться с коллизиями, но я по-прежнему хочу уникальности, если это возможно с алгоритмической точки зрения.   -  person bafrick    schedule 01.07.2016


Ответы (1)


Функция связывания Кантора необходима только в том случае, если вы хотите отобразить все положительные целые числа. Что плохого в следующем, с n = 13 и N = n^4?

(val1 - 1) * n^3 + (val2 - 1) * n^2 + (val3 - 1) * n + (val4 - 1) + 1

Порядок может определяться мастью карт или порядком их вытягивания.

person Cimbali    schedule 02.07.2016