【发布时间】:2019-05-17 20:06:20
【问题描述】:
是否有满足以下条件的哈希算法?
let "hash_funct" be a hashing function that takes two args, and returns a hash value. so all the following will be true
Hash1 = hash_funct(arg1, arg2) <=> hash_funct(Hash1, arg1) = hash_funct(Hash1, arg2) = Hash1;
谁能指点我这个算法?或者如果它不存在,任何人都可以与我合作发明它吗?
更多解释:
想象一个集合S={A,B,C,D},以及上面的散列函数。
如果我们可以使:Hash1 = hash_funct(A,B,C,D),那么我们可以通过检查hash_funct(Hash1,X) == Hash1 ? belogns to the set : doesn't belong的哈希结果来检查元素X是否在集合中
使用这个属性,我们可以检查集合中元素的存在性 O(1) 而不是 O(NlogN)
【问题讨论】:
-
hash_funct(Hash1, arg1) = hash_funct(Hash1, arg2) = Hash1;我不明白这个属性的用处。好像只是忽略了第二个参数,否则就是身份。 -
您可能想要排除一个常量函数。 :)
-
@geza- 这是一个非常有用的属性。如果您有一组固定且已知的元素,您可以从所有元素“Hash1”中生成一个哈希值,以检查元素 A 是否在集合中,您检查
hash_funct(Hash1, A)是否为您提供哈希“Hash1”那么这个元素在集合中,否则它不在。使用这个散列函数检查一个元素是否在一个集合中变成了 O(1)。 -
@organicoman 现在它们在数字硬币中非常受欢迎。见this
标签: c++ algorithm math hash cryptography