[英]How write a hash function to make such expression to be true?
偽代碼:
// 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:偽代碼有錯誤,所以我更新了代碼(實際上仍然有錯誤,沒關系,我會解釋)。
我最初的要求是制作一個可以為不同參數返回相同值的哈希函數,並且該參數值應包含一些規則。 這意味着,只有相同類別中的參數值才能獲得相同的哈希碼,而其他參數則不能。
例如
顯然,以下表達式(可以將“ 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:這是一個充滿錯誤的問題,也許更新的部分也無法解釋問題。 也許這是一個錯誤的主張。 我希望將我的問題抽象為一個通用模型,但這使我無所適從。 如有必要,我將發布我面臨的實際問題。
任何常量哈希都可以滿足您的條件:
hash(v) = 42
一個不太不變的答案比尤里kilocheck的是使用的mod
操作:
hash(v) = v % 10;
然后您將擁有:
hash(1) = 1
hash(2) = 2
hash(3) = 3
...
hash(11) = 1
hash(12) = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.