这本书有种相见恨晚,如果在学习数据结构之前看的话,代码的可阅读性肯定会有很大的提升,一直在想一个问题,类似的书为啥国外版的就要好很多,这里并不是一味地的说外国的东西好, 看看这些书的练习体你就知道了,国外的是在教你怎样去思考一个问题,一个问题之后有更多的问题让你思考,而国内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);
分散图:
对应的直方图:
可以看到其符合二项分布的规律,相对于之前的函数分布的要均匀很多。
-END-
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。