C接口与实现---之三

algocrafter
• 阅读 2219

这本书有种相见恨晚,如果在学习数据结构之前看的话,代码的可阅读性肯定会有很大的提升,一直在想一个问题,类似的书为啥国外版的就要好很多,这里并不是一味地的说外国的东西好, 看看这些书的练习体你就知道了,国外的是在教你怎样去思考一个问题,一个问题之后有更多的问题让你思考,而国内C语言相关书的练习题都是抄来抄去。基本还停留在打印一个星星之类。

第三章就是教你怎样写一个更好的hashtable, 针对hash碰撞问题在习题3.1中给出的一方案叫你去验证比较,之后又给了一些可供参考的hash算法。好的一本书就当如此,在不断的叫你思考。
下面来看看书中例子的分散图:
C接口与实现---之三

其中横坐标表示0-2048的入口,纵坐标表示数组每个入口里面被hash的string,可以看到我们的分布式极不均匀的。理论上10000个string应该是均匀的分布到2048上的,也就是每个入口上有5个左右的字符串。再来看看其对应的直方图:
C接口与实现---之三

可以看到一半左右的入口是空的。

下面来看看buckets为2039并使用如下的hash函数优化后的效果:

 for (h = 0, i = 0; i < len; i++) {
    h = (h << 1) + scatter[(unsigned char)str[i]];
  }
  h &= 0x7fffffff;
  h %= NELEMS(buckets);

分散图:
C接口与实现---之三

对应的直方图:
C接口与实现---之三

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

-END-

点赞
收藏
评论区
推荐文章
灯灯灯灯 灯灯灯灯
4年前
一篇文带你彻底解决mysql的主从复制延迟问题
前言​在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。所以我来了!!!​主从复制的原理我们在此处就不再赘述了,之前已经讲过了,这是一个老生常谈的问题,原理性质的也几乎在面试中问烂了,这些原理性质的东西并不是很难,但是你需要注意了,主从复制的延迟问题会成为
一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移?
前言先抛一个问题给我聪明的读者,如果你们使用微服务SpringCloudNetflix进行业务开发,那么线上注册中心肯定也是用了集群部署,问题来了:你了解Eureka注册中心集群如何实现客户端请求负载及故障转移吗?可以先思考一分钟,我希望你能够带着问题来阅读此篇文章,也希望你看完文章后会有所收获!背景前段时间线上Sentry平台报警,
捉虫大师 捉虫大师
3年前
Dubbo为什么要用Go重写?
先说两句我常常在散步时思考很多技术上的「为什么问题」,有时一个问题会想很久,直到问题的每一个点都能说服自己时,才算完结。于是想把这些思考记录下来,形成文章,可以当做一个新的系列。这些文章中你可能看不到代码,但能窥探到一些容易被忽视的问题,以及问题更深层次的「为什么」。今天带来第1篇,Dubbo为什么要用Go重写?诞生于阿里巴巴,2011年开源的Dubbo已经
Wesley13 Wesley13
3年前
D语言在国内的发展问题
D语言是一个非常不错的编译型语言,也就是所谓的系统级编程语言,有非常强大的编译时机制,更有强大的性能,简洁的语法就像C、JAVA、PHP一样容易使用。国内的主要问题是没有一个D语言官网的中文社区,让一些喜欢D语言和使用D语言的开发者不能聚集在一起探讨问题,当然HuntLabs已经准备了两个域名打算做中文社区,是dlangchina.com和
Wesley13 Wesley13
3年前
mysql数据库先update后insert死锁分析
先update再insert的并发死锁问题分析。背景“如果库里有对应记录,就更新,没有就插入”很简单的一个逻辑,相信很多人都会遇到。最近看一个工程里实现代码是这样的,mysql数据库走的是默认的事务级别:可重复读。包在一个事务中执行:ifupdate更新结果0thenreturn"成功";el
Stella981 Stella981
3年前
Rust 凭什么成为最受欢迎的语言?
最近这十年,技术的发展可以说日新月异,各个技术领域,新东西层出不穷,像编程语言,近十年就诞生了好几种,比如Rust、Swift、Dart、TypeScript等等,跟进什么,放弃什么,这是个选择问题,因为每个人的时间才是最宝贵的。在选择学习什么编程语言的时候,我们总会思考这些问题:这门语言是否优秀,发展前景如何,这门语言能给我带来多少好处?等
Wesley13 Wesley13
3年前
JAVA的思考01
人类一思考,上帝就发笑。但是人类不会因为上帝发笑就停止了思考,不是说命运在自己手里吗,那干脆让上帝去他妈的。好吧,那思考是什么?思考是因为我们人类有事情要解决,所以我们要考虑考虑......那么,开始我们的思考吧。 当小老板还是当大老板?首先,请原谅我问这么个貌似世俗的问题,我也知道钱不是万能的,但还是那句套话:没有钱是万万不
Stella981 Stella981
3年前
JavaScript性能优化小知识总结
前言  一直在学习javascript,也有看过《犀利开发Jquery内核详解与实践》,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于思考懒得思考以至于里面说的一些精髓都没有太深入的理解。  鉴于想让自己有一个提升,进不了一个更加广阔的天地,总得找一个属于自己的居所好好生存,所以平
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Python进阶者 Python进阶者
3年前
盘点一个Python网络爬虫过程中中文乱码的问题
大家好,我是皮皮。一、前言前几天在Python黄金交流群有个叫【Mt.Everest】的粉丝问了一个关于Python网络爬虫过程中中文乱码的问题,这里拿出来给大家分享下,一起学习。二、解决过程这个问题其实很早之前,我就写过相关文章,而且屡试不爽。【Python进阶者】解答这里给出了两个思路,照着这个思路去的话,问题不大。事实上并不巧,还是翻车了。【黑
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这