C接口与实现---之三

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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 &amp;= 0x7fffffff;
  h %= NELEMS(buckets);

分散图:

C接口与实现---之三

对应的直方图:

C接口与实现---之三

可以看到其符合二项分布的规律,相对于之前的函数分布的要均匀很多。

-END-

脚本宝典总结

以上是脚本宝典为你收集整理的C接口与实现---之三全部内容,希望文章能够帮你解决C接口与实现---之三所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。