Я использую Java-версию MurMurHash3, разработанную Google (google.common.hash.HashFunction и google.common.hash.Hashing), для создания n независимых хеш-функций (с использованием n различные семена), чтобы хэшировать ID как долго.Вот фрагмент кода:
for(int i=0; i<seeds.length;i++){
signature[i] = hash(id, seeds[i]);
}
private long hash(int id, int seed){
HashFunction hf = Hashing.murmur3_128(seed);
long signature = hf.hashLong((long)id).asLong();
Я попытался повторить вышеупомянутый код в Python 2.7, используя mmh3 (https://pypi.org/project/mmh3/), но версия Python принимает только строки в качестве входных данных (или NumPy int) и использование одного и того же начального числа возвращает другой результат. Вот фрагмент кода:
def create_signature(self, id):
v = np.int64(id)
signature = []
for i in range(len(self.__seeds)):
h = mmh3.hash128(v, self.__seeds[i], signed=True)
signature.append(h)
return signature
Применение библиотеки mmh3 к набору различных идентификаторов, также есть много коллизий (нет коллизий с версией Javaвместо этого.) Есть ли способ получить те же результаты версии Java с Python?