首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

人生苦短之字典

先用通俗的语言了解这个世界的真相,再学习专业的语言与人交流。

字典可以说是 python 中非常重要的结构。先来个定义来看看我们今天要理解的字典到底是什么:字典 = 哈希函数 + 哈希表

那么目标确定,我们就是需要搞清楚哈希函数和哈希表是什么,怎么用。

考虑下现实生活中的字典如何处理那么多的字的快速索引到想要的内容?我所知道的不外两种,第一种是按照拼音字母顺序排序,然后以首字母作为索引就能够缩小范围到一个字母的范围大小。然后在这个有序的列表中查找想要的词。第二种就是按照偏旁部首分大类,然后按照笔画有序进行查找内容。所以字典的查找的核心意思就是将数据按照某种方式(偏旁,拼音首字母)分割成很多部分,然后每个部分内有序,再查找内容。

我们可以列出一个汉语字典的排版方式:汉语字典 = 分割成块的方法+分割后的索引部分+有序的内容部分。如下图所示:

这样的排版方式的好处就是能够快速定位到信息的位置,比如我们想找的是‘的’字,那么就只需要1. 查看首字母,2. 找到D的位置,3. 在D内找到‘的’字。

如果是用数组来存储这些数据的话, 我们想要找到‘的’字就需要

啊->安->奥->爸->背->擦->草->搓->的 (这里可以用二分查找优化,不过也慢)

这种查找的效率可以说很明显是我们的汉语词典占据绝对的优势。

将汉语字典的形式搬进python中,就成了python 的字典。

通过首字母进行分割数据,这种方法就被叫做哈希函数

hash函数最终会被定位到一个数组上,就是汉语字典的索引项,这个数组被叫做hash 表的入口

hash表的入口后面跟着列表(python的列表),就对应着汉语字典的有序的字的列表,被叫做哈希表

哈希函数可以是很多种的变换,其目的就是将数据按照某种形式进行切割,将大数据量切割成小数据量。然后再通过小的分布查找内容。所以对于python的字典来说,我们可以总结出下面的图。

以上, 我们就能理解python字典的具体实现的方式了,最后扩展的思考需要兄弟们自行解决。

如果遇到所有的hash结果都在同一个结果(也就是入口,entry)内,那么这个字典就退化成了列表。效率也就慢了,怎么处理。

哈希函数一般都怎么实现,对应什么类型?

邦有道,危言危行;邦无道,危行言孙。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812G0BDJT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券