Мне интересно, есть ли способ генерировать ключ на основе отношений между двумя сущностями таким образом, чтобы ключ для отношений a-> b был таким же, как ключ для отношений b-> a.
Желательно, чтобы это была хеш-функция, которая принимает любой член отношения, но генерирует один и тот же вывод независимо от порядка, в котором представлены члены.
Очевидно, что это можно сделать с помощью чисел (например, добавить (2,3) эквивалентно добавлению (3,2)).Проблема для меня в том, что я не хочу, чтобы add (1,4) равнялся add (2,3).Очевидно, что любая хеш-функция перекрывается, но я имею в виду слабое чувство уникальности.
Моя наивная (и нежелательная производительность) мысль:
function orderIndifferentHash(string val1, string val2)
{
return stringMerge(hash(val1), hash(val2));
/* String merge will 'add' each character (with wrapping).
The pre-hash is to lengthen strings to at least 32 characters */
}