伪代码:
<击> // deprecated x!=y && hash(x) == hash(y) // how to make this true?
击>
x!=y && hash(x) == hash(y) && (z!=x && z!=y) && (hash(x) != hash(z) && (hash(y) != hash(z)) // how to make this true?
x和y可以是任何可读值
无论语言是什么,伪代码只是帮助理解我的意思。 我只是想知道如何实现这样的哈希函数。
PS:对于数学,我是个白痴。我无法想象是否有算法可以做到这一点。更新1: 伪代码有bug,所以我更新了代码(实际上还有bug,没关系,我会解释)。
我原来的要求是创建一个可以为不同参数返回相同值的哈希函数,并且参数值应该包含一些规则。这意味着,只有同一类别中的参数值才会获得相同的哈希码,而其他参数值则不会。
e.g。
以下表达式显然(您可以将'0'视为占位符):
hash("1.1") == hash("1.0") == hash("0.1")
hash("2.2") == hash("2.0") == hash("0.2")
和
hash("2.2") != hash("2.1") != hash("1.2")
我认为这个问题可以做这样的描述:
它看起来像哈希冲突,但我们确切地知道它们是什么。也看起来像多对一模型。
如何设计碰撞规则?值可以是任何字符或数字。以及如何实施设计?
PPS:这是一个充满bug的问题,也许更新的部分也无法解释问题。或者这可能是一个错误的命题。我希望抽象我的问题作为一般模型,但它让我的思绪溢出。如有必要,我会发布我面临的实际问题。
答案 0 :(得分:2)
任何常量哈希都可以满足您的条件:
hash(v) = 42
答案 1 :(得分:0)
与yuri kilocheck相比,一个不太常见的答案是使用mod
运算符:
hash(v) = v % 10;
然后你会:
hash(1) = 1
hash(2) = 2
hash(3) = 3
...
hash(11) = 1
hash(12) = 2