這本書有種相見恨晚,若是在學習數據結構以前看的話,代碼的可閱讀性確定會有很大的提高,一直在想一個問題,相似的書爲啥國外版的就要好不少,這裏並非一味地的說外國的東西好, 看看這些書的練習體你就知道了,國外的是在教你怎樣去思考一個問題,一個問題以後有更多的問題讓你思考,而國內C語言相關書的練習題都是抄來抄去。基本還停留在打印一個星星之類。算法
第三章就是教你怎樣寫一個更好的hashtable, 針對hash碰撞問題在習題3.1中給出的一方案叫你去驗證比較,以後又給了一些可供參考的hash算法。好的一本書就當如此,在不斷的叫你思考。
下面來看看書中例子的分散圖:
數組
其中橫座標表示0-2048的入口,縱座標表示數組每一個入口裏面被hash的string,能夠看到咱們的分佈式極不均勻的。理論上10000個string應該是均勻的分佈到2048上的,也就是每一個入口上有5個左右的字符串。再來看看其對應的直方圖:
數據結構
能夠看到一半左右的入口是空的。分佈式
下面來看看buckets爲2039並使用以下的hash函數優化後的效果:函數
for (h = 0, i = 0; i < len; i++) { h = (h << 1) + scatter[(unsigned char)str[i]]; } h &= 0x7fffffff; h %= NELEMS(buckets);
分散圖:
學習
對應的直方圖:
優化
能夠看到其符合二項分佈的規律,相對於以前的函數分佈的要均勻不少。spa
-END-code