任何人都可以想辦法做一個唯一的哈希出兩個字符串的?一些保證:做出獨特的哈希出兩串
hash(string1,string2) = hash(string2,string1).
我總能存儲下我的地圖兩個不同的值相同的參考,但我認爲:必須有一個更好的辦法...
任何人都可以想辦法做一個唯一的哈希出兩個字符串的?一些保證:做出獨特的哈希出兩串
hash(string1,string2) = hash(string2,string1).
我總能存儲下我的地圖兩個不同的值相同的參考,但我認爲:必須有一個更好的辦法...
檢查,看看他們是否'按字母順序排列,如果它們不是連接在一起並散列結果,則將它們交換。
你是比我快41secs :( –
那麼你可以嘗試「排序」散列他們之前都是字符串,因此,任何對字符串總是以相同的順序進行處理。
你要快,不然你想好?對各個散列碼的任何對稱操作都會產生你想要的; +
,*
和^
都是不錯的選擇;如果兩者相同,則^
產生0,所以您通常需要if
來捕捉; +
更容易產生碰撞比*
但都沒有那麼大因爲在String
內在hashCode
方法是非常糟糕:
scala> "BB".hashCode == "Aa".hashCode // Seriously?!
res40: Boolean = true
如果你希望你的字符串不會發生衝突那麼多,對字符串使用scala.util.MurmurHash.stringHash
(2.10中爲2.9; scala.util.hashing.MurmurHash.stringHash
),然後是上述方法之一。
我不明白第一行,你的意思是'hash(a)+ hash(b)'會產生OP想要的嗎? (即'hash(a)+ hash(b)== hash(b)+ hash(a)') – laggingreflex
@laggingreflex - 這是正確的。 –
比較他們,並使用作爲第一串較小,因爲第二個字符串更大。也許你應該解釋一下,爲什麼你想要這樣的行爲。 – martinstoeckli
哈希碼不是唯一的。 – Jesper