前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通俗理解 set,dict 背后的哈希表

通俗理解 set,dict 背后的哈希表

作者头像
double
发布2020-08-28 09:51:27
1.7K0
发布2020-08-28 09:51:27
举报
文章被收录于专栏:算法channel算法channel

哈希表

Python 中set,dict都是基于哈希表的数据结构,这两个数据结构有着广泛的应用。因此很有必要弄懂哈希表的原理。

哈希表

数组和链表是数据结构的两大基石,这个在前面我们多次提到过。哈希表的实现也正是基于数组和链表。

哈希表最大特点O(1)时间内确定某元素是否位于容器中。下面探讨它是如何基于数组和链表实现的。

实现原理

O(1)内确定元素在不在的实现原理,一句话总结:

通过一种方法将元素值转化为数组的index,如果index位置处为None则不存在,不为None则表明存在。

原理图解

创建如下一个数组,长度为9

现在想把python字符串存储到数组中,哈希表的一种做法如下:

  • 使用Python的hash函数,
  • 然后对数组长度取余数,得到2,
  • 最后将python存储到数组索引2处

因此,判断字符串python是否位于数组中时,

只需重复上面的先hash再取余,检查索引2处是否为None,故时间复杂度为O(1).

链表解决哈希冲突

当存储10时,如上相同的存储原理,计算后等于索引2,但是2处已经有数据,

此时发生哈希冲突:

其中一种解决方法,在索引2处建立链表,链接到已有数据尾部:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 哈希表
    • 哈希表
      • 实现原理
        • 原理图解
          • 链表解决哈希冲突
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档