【问题标题】:is there a hashing function that satisfies the following是否有满足以下条件的散列函数
【发布时间】: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


【解决方案1】:

我想最高公因数(Hcf) 适合这里。设 a 和 b 是两个以 x 为最大公因数的数。

hcf(a,b) = x.

这意味着a = x*mb = x*n。这显然意味着:

hcf(x,x*m) = hcf(x,x*n) = hcf(x*n,x*m) = x

【讨论】:

  • 非常巧妙的想法,但是如果你将这个函数应用于多个元素呢?
【解决方案2】:

您正在寻找的是Accumulators。目前,它们很受digital coins @youtube的欢迎

来自维基百科;

密码累加器是一种单向隶属函数。它回答有关潜在候选人是否是集合成员的查询,而不会透露集合的各个成员。

例如这个paper;

我们展示了如何使用 RSA 单向累加器来实现高效且动态的认证字典,其中不受信任的目录提供可加密验证的答案 对受信任来源维护的集合的成员资格查询

使用简单的基于累加器的方案;

  • 查询:要求提供会员证明时。
  • 验证:检查答案的有效性。
  • 更新:插入和删除

可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多