Формула для уникального хэша из целочисленной пары - PullRequest
3 голосов
/ 15 ноября 2011

Я думаю, что могу использовать Кантора для создания уникального хэша n = ((x + y) * (x + y) + x - y) / 2 ...

а можно ли поменять этот хеш? А если нет, то может ли кто-нибудь предоставить аналогичную пару формул для обратимого хэша?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

, если x и y и n являются одинаковыми типами данных.

n = ((x + y)*(x + y) + x - y)/2...

когда x и y находятся рядом с типом данных :: max n переполнится, и вы потеряете информацию и не сможете восстановить x и y.

Если, с другой стороны, если x и y всегда находятся в диапазоне, скажем, 0-FOO

n = Foo * x + y 

может быть восстанавливаемым хешем при условии, что n не переполнилось

   n % Foo

даст вам y . Как только y станет известно (n-y) / Foo даст вам x

2 голосов
/ 15 ноября 2011

Вот уникальный, обратимый и совершенно непрактичный хеш для двух целых чисел:

для двух чисел x и y, возвращает произведение x-го и y-го простых чисел.Это уникально и обратимо, если вы полагаете, что порядок не имеет значения.Если это так, то вы можете добавить символ, обозначающий, какой из двух основных факторов вашего «хэша» равен x или y.

Обратите внимание, что ваше хеш-пространство больше вашего входного пространства.Ну что ж.Это то, что вы получаете за попытку хранить более одного бита в битах.

0 голосов
/ 26 декабря 2012

Вы должны указать, если у вас есть контроль над верхней границей входов, и если да, то каков размер ваших входов, каким должен быть ваш вывод, если входы и выходы подписаны или нет и т. Д. (И, конечно, если функция должна бытьобратимо или нет).Хороший ответ будет зависеть от всего этого. В этой ссылке вы найдете хорошее решение для уникального кодирования двух положительных чисел и их декодирования обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...