мне нужна простой хэш-функция, которая принимает два параметра, со следующими параметрами:Хэша функция F (а, б) = F (Ь, а)
- а, б, в, г являются разными строками (приблизительно 30 символов)
- F (а, б) = F (Ь, а)
- е (а, с) ≠ f (a, d)
- F (C, б) ≠ F (д, b)
мне нужна простой хэш-функция, которая принимает два параметра, со следующими параметрами:Хэша функция F (а, б) = F (Ь, а)
Сортировка и объединение двух параметров (для обеспечения того, чтобы f(a,b)
равно f(b,a)
. Поскольку для сортировки есть только два элемента, будет либо ab
, либо ba
.
Если строки имеют свойство, ab
может равняться cd
(например strong
+ hearted
и strongheart
+ ed
) вы можете в «соль» строку, предваряя его длине первой строки, закодированной в виде фиксированного числа байтов.
Затем примените строковый хэш на результат. There are numerous examples online.
Обратите внимание, что нет гарантии, что две разные строки не приведут к одному и тому же значению хэша, но хороший алгоритм хэширования уменьшит вероятность.
Почему это было ниспровергнуто? Этот ответ неверен? Это выглядит правильно для меня (моя первая мысль заключалась в том, чтобы сделать это точно). – Dogbert
В дополнение к сортировке, это хорошая предосторожность для добавления строк до конкатенации с длиной строк. Это предотвращает поиск тривиальных столкновений типа 'f (" abc "," def ") = f (" ab "," cdef ")'. Я бы предложил добавить 4-байтовый int (вместо длины в строке ascii). Так, например: 'f (a, b) = h (len (a) .to_bytes (4) + a + len (b) .to_bytes (4) + b)' где a
@LieRyan Спасибо! Я улучшил свой ответ. (на самом деле достаточно указать длину первой строки). –
Можете ли вы сделать домашнее задание дома, отдельно, самостоятельно? – Raptor
И вы пробовали ... – Abhineet
'f (x, y) = md5 (x^y)', например –