2
將不同對象的兩個哈希合併的一種可接受方式是使用XOR。這是有道理的,但正如下面的帖子中Thomas Pornin的第二個評論中所提到的,XOR是可交換的,這意味着如果你將每個元素散列到一個集合中並將它們與XOR合併,那麼你所做的任何順序總是會導致相同的散列:爲有序集合組合散列
Why is XOR the default way to combine hashes?
什麼是要依賴於順序散列結合的好辦法?如果它是特定的大小,32位和64位的一些已知技術是什麼?
注意,在特定情況下,我有一個從0到元素數量的迭代變量'i'。有沒有一種好的方法來使用'我'來做出依賴訂單的哈希? – Trevor 2012-04-12 16:49:07
如果要強制執行順序,可以在將它們存入集合之前旋轉(*不轉移)部分哈希。這如果當然可以導致碰撞(如H(ABCD)== H(DABC)),但這是遊戲的一部分... – wildplasser 2012-04-12 17:59:15
現在我在做一些愚蠢的事情,我乘以一個巨大的素數'我' ,以及用每個元素的散列表示異或。它確實強加了秩序,但我絕對不是專家,我不知道這是否會導致任何重大沖突。 – Trevor 2012-04-12 18:54:38