Java和Python在长输入时返回不同的结果
我正在使用Google开发的Java版本的Hash3(Google.common.hash.HashFunction和Google.common.hash.Hashing)来创建n个独立的hash函数(使用n个不同的种子)来对ID进行尽可能长的散列。下面是一段代码:Java和Python在长输入时返回不同的结果,java,python,hash,murmurhash,Java,Python,Hash,Murmurhash,我正在使用Google开发的Java版本的Hash3(Google.common.hash.HashFunction和Google.common.hash.Hashing)来创建n个独立的hash函数(使用n个不同的种子)来对ID进行尽可能长的散列。下面是一段代码: for(int i=0; i<seeds.length;i++){ signature[i] = hash(id, seeds[i]); } private long hash(in
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();
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
在一组不同的ID上应用mmh3库,也会有很多冲突(与Java版本没有冲突)。有没有办法用Python获得与Java版本相同的结果?不确定是否是这样,但
mmh3
似乎设计用于处理字符串,因此可能是在计算str(id)
的哈希值。尝试使用h=mmh3.hash128(id.to_字节(8,byteorder='little')、self.\u seeds[i],signed=True)
,看看这是否有区别。