簡體   English   中英

如何編寫一個哈希函數使這樣的表達式為真?

[英]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") 

我認為這個問題可以做這樣的描述:

  1. 有兩個或多個包含隱含相同屬性的不同值。
  2. 世界上只有這些值具有相同的屬性。
  3. 該屬性可以通過某種方式(可能是一個函數)獲得,hash()會在內部調用它。
  4. hash()值之一,您可以檢索屬性,然后可以獲得唯一的hashCode。

它看起來像哈希沖突,但我們完全知道它們是什么。 看起來也像多對一模型。

如何設計碰撞規則? 值可以是任何字符或數字。 以及如何實施設計?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM