Построить ключ
зачем у тебя пары в посте не понял, элементы с одинаковыми цифрами не переставляются же.
видимо, поэтому я что-то другое решил, а не твою задачу.
можно просто рассматривать string a1 и string a2
вообщем нужен ключ нечуствительный к перестановке
ну я решил твою задачу )
еще можно ксорить символы в строчках и хешировать результат
можно просто рассматривать string a1 и string a2Можно умножить хэши строк.
Edit: конечно, это гон...
Edit: ну ладно, не гон...
Edit: ладно, всё-таки гон...
Атсартируй сначала по возрастанию.
можешь поксорить (по-байтно, по DWORD-но)
и тд
либо так:
придумай любой хеш для пары (string, int) -> hash
тогда для пар пар хеш такой:
result = f(hash(a1, b1 hash(a2, b2
где f - симметричная функция
все спасибо чето башка совсем не варит
Можно умножить хэши строк.Ой, кажется, я нагнал, а мне плюсы ставят...
Можно умножить хэши строк.Почему гон? Умножение коммутативно. Можно, кстати их ещё поксорить (не строки, а хеши).
Edit: конечно, это гон...
поскольку алгоритм был приближенный и сходился моментально,
я почти не потерял правильных результатов, но потом смешно было, конечно.
ты все правильно сказал. это же и есть симметричная функция
Почему гон? Умножение коммутативно. Можно, кстати их ещё поксорить (не строки, а хеши).и деструктивно (для коллизеев всяких)
типа если у тебя одно из полей не заполнено, у всех таких пар будет один хеш.
и деструктивно (для коллизеев всяких)А, ну коллизии возможны, конечно.
Кстати, упорядочивать можно не строки, а хеши.
два хеша считать и выбирать меньший?
мне нравится.
Можно умножить хэши строк.гон, гон =) приду домой - запощу java puzzler на эту тему =)
Edit: конечно, это гон...
Edit: ну ладно, не гон...
Почему гон? Умножение коммутативно. Можно, кстати их ещё поксорить (не строки, а хеши).Я сказал, что это гон, потому что распределение будет неравномерное. Умножение даст наклонную вниз: |\
Надо бы сложить два хэша в long и взять mod по max int. Или сделать XOR обоим хэшам.
Мм. Не подумал, беру свои слова обратно. Косяк, конечно, есть, но ключу не мешает =)
Оставить комментарий
bav46
Задачаесть 4 значения: string a1 int b1 string a2 int b2
нужно предложить решение ключа
чтобы a1, b1, a2, b2 имело одинаковый ключ с a2, b2, a1, b1
то есть меняя пары.
есть идеи как это сделать быстро? ключ получить в каком-нибудь int или string чтобы потом занести в хештейбл и при этом было минимальное число колизий.