字串hash無論是在acm競賽中還是在工程中都有著廣泛的應用,所以很有必要掌握好它的用法。主要分為兩個部
分:hash對映和衝突處理。而本文主要來詳細講解hash對映的方法及應用,下篇文章將會介紹如何處理衝突。
對於字串hash來說都是把字串對映為乙個整數,這一步是通過hash函式來進行的。常用的hash函式具體有:
sdbmhash,rshash,jshash,elfhash,bkdrhash,djbhash等等。
接下來只詳細介紹elfhash函式的原理
及應用。
elfhash函式的**如下
unsigned int elfhash(char *str)
} return h & 0x7fffffff;
}
接下來我會詳細**它的原理。
(1)h = (h << 4) + *str++; 把當前的字元的ascii存入h的低4位。
(2)x = h & 0xf0000000l; 取出h中最高4位,0xf0000000l地代表28~31這4位是1,其餘後28位是0。
(3)如果最高4位不為0,那麼說明字元多於7個,現在正在存第8個,如果不處理再加下乙個字元時,第乙個字元會
被移出,因為1~4位剛剛加入了新字元,所以不能>>28,而是>>24。
(4)h &= ~x; 表示把h的高4位清零。
MyCat分片規則之字串hash解析演算法分片
字串hash解析分片,其實就是根據配置的hash預算位規則,將擷取的字串進行hash計算後,得到的int數值即為datanode index 分片節點索引,從0開始 實現步驟 a 建立資料庫和表 b 配置server.xml c rule.xml配置分片規則 d schema.xml配置分片節點 分...
Hash 字串 字串雜湊
luo gu luogu luogup 3370 p3370 p337 0如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母 請求出n個字串中共有多少個不同的字串。第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字...
白兔的字串 字串hash
原題 一道典型的字串hash,至於hash,這裡講的非常好。一開始用map函式一直超時,後來改用unordered map就過了,至於這2個map的區別,這裡講的挺清楚的。之後去查了一下其它方法,發現還有一種方法是手寫map函式 強 指明 大佬 unordered map是跑了600ms,重寫跑了1...