我需要一個算法來生成一個獨特的散列,而不是必需的固定長度,對於一個整數來說,它獨立於數字的排列。如何讓不隨排列變化的數字具有散列?
就像123,321,312,213 ......的散列應該是一樣的。 (忽略前導零)
我試過的是將每個數字都提高到自身並總結。像,
Hash(321) = 3**3 + 2**2 + 1**1
現在,我不知道它是否會產生collissions與否並沒有,當然,性能問題的大量涌現。任何替代品?
我需要一個算法來生成一個獨特的散列,而不是必需的固定長度,對於一個整數來說,它獨立於數字的排列。如何讓不隨排列變化的數字具有散列?
就像123,321,312,213 ......的散列應該是一樣的。 (忽略前導零)
我試過的是將每個數字都提高到自身並總結。像,
Hash(321) = 3**3 + 2**2 + 1**1
現在,我不知道它是否會產生collissions與否並沒有,當然,性能問題的大量涌現。任何替代品?
你只需要任何哈希函數(讓我們拿md5)和一種可交換地加入事物的方法。採取每個數字的散列,然後將它們與交換方法結合起來。例如,如果我選擇md5並添加,那麼我可以md5每個數字並添加結果散列。如果我選擇使用sha1和乘法,這會給我一個不同的結果,但它仍然會有你想要的屬性。碰撞的問題更難...
一個MD5哈希是16字節長。當然,如果我加起來的散列(假設你是指從頭到尾加入),即使對於小整數,它也會變得非常長。 – Shubham 2012-04-28 20:40:43
如果你想要任何「獨特性」的機會,它將會很大。 – RBarryYoung 2012-04-28 20:46:29
這會變得怪異不僅很大。 – Shubham 2012-04-28 20:51:19
只需使用一個 交叉總和作爲算法
A * hash *對於任何方式的衝突都是不安全的。你想做什麼? – 2012-04-28 20:31:17
爲一個數字生成一個唯一的ID,以便它獨立於該數字的數字排列。 – Shubham 2012-04-28 20:35:17
@Shubham:爲什麼不直接對數字進行排序,並將結果用作散列? – 2012-04-28 20:40:08