C接口與實現---之三

這本書有種相見恨晚,若是在學習數據結構以前看的話,代碼的可閱讀性確定會有很大的提高,一直在想一個問題,相似的書爲啥國外版的就要好不少,這裏並非一味地的說外國的東西好, 看看這些書的練習體你就知道了,國外的是在教你怎樣去思考一個問題,一個問題以後有更多的問題讓你思考,而國內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

相關文章
相關標籤/搜索