【python】数据结构与算法—哈希表
一、哈希表
用顺序表来存数据
存键值对时,通过哈希函数计算出键对应的索引,将值存到索引对应的数据区中
获取数据时,通过哈希函数计算出键对应的索引,将该索引对应的数据取出来
二、哈希冲突
对于任何哈希函数,都会出现两个不同的元素映射到同一个位置上的情况,这种情况称为哈希冲突
三、开链法
哈希表的每一个位置都连接一个链表,当发生冲突时,冲突的元素会被加到该位置的链表的最后
1、开链法存储数据
四、开放寻址法
如果哈希函数得到的位置i已经又数据了,那么就往后探查新的位置来存储这个值
线性探测:如果i有数据了,则探测i+1
,i+2
…以此类推,直到找到空的位置
1、存储值的过程
a、key=apple,cat,dog,hello,通过哈希函数映射之后得到的值都为2
b、现有一个字典dic={‘apple’:1,‘cat’:2,‘dog’:3},存储数据,
c、原索引为2的位置没有存储数据,此时将apple的值1存储到这个
d、接着cat寻址到索引为2的位置,发现这个位置已经有值了,会继续往后探测,依次类推
2、获取值的过程
a、获取dic[‘dog’]的时候,先到索引为2的位置去获取
b、获取不到继续向后探测
3、删除值得过程
dic.remove(‘cat’)
a、给每一个节点定义一个状态
未使用
已使用
已删除
二次探测:如果位置i被占用,则探测i+1^2
,i+2^2
…一次类推,知道找到空的位置
五、开链法和开放寻址法的区别
开链法:
优点:删除节点比较容易,数据量比较大使用开链法
缺点:使用空间比较大
开放寻址法:
删除节点不能真正的把节点删掉,给每一个节点定义一个状态,数据量比较小使用开放寻址法
缺点:
a、使用开放寻址法,那么顺序表总归会有一天会填满
b、一般为了保证插入和查找的效率,哈希表一般在元素数量在容量的2/3时,就会进行扩容
c、扩容之后,计算的哈希函数也会随之变化,那么里面的数据存储的顺序也会变化
【python】数据结构与算法—哈希表相关推荐
- python hash表_python数据结构与算法——哈希表
哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...
- 数据结构与算法——哈希表与字符串
文章目录 1.预备知识 1.1 最简单的哈希--统计字符个数 1.2 哈希表排序整数 1.3 哈希映射的问题 2.最长回文串 2.1 题目描述 2.2 C++代码实现 3.单词规律 3.1 题目描述 ...
- 数据结构与算法——哈希表
哈希表 看一个实际需求,google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址-)当输入该员工的id时,要求查找到该员工的所有信息. 要求: ...
- Python数据结构与算法(四)--顺序表
顺序表 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元素). 根 ...
- Python数据结构与算法笔记(七):数据结构——队列,链表和哈希表
队列 看成人在排队. 在出队到最后一个元素时,再想入队,使用列表可以在后面append,但是前面仍然占据着一部分内存,无法处理.想个办法让其收尾连成一个圈. 队列的实现方式:环形队列 判定一个队列是否 ...
- Python数据结构与算法(2.7)——跳表
Python数据结构与算法(2.7)--跳表 0. 学习目标 1. 跳表的基本概念 1.1 跳表介绍 1.2 跳表的性能 1.3 跳表与普通链表的异同 2. 跳表的实现 2.1 跳表结点类 2.2 跳 ...
- Python数据结构与算法(2.2)——顺序表
Python数据结构与算法(2.2)--顺序表 0. 学习目标 1. 线性表的顺序存储结构 1.1 顺序表基本概念 1.2 顺序表的优缺点 1.3 动态顺序表 2. 顺序表的实现 2.1 顺序表的初始 ...
- Python数据结构与算法(2.1)——线性表的基本概念
Python数据结构与算法(2.1)--线性表的基本概念 0. 学习目标 1. 线性表的定义 2. 线性表的操作 3. 抽象数据类型线性表定义 相关链接 0. 学习目标 线性表是应用最为广泛的一种数据 ...
- Python数据结构与算法(1.1)——数据结构与算法导论
Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...
最新文章
- php error 关闭,php error_reporting()关闭报错
- 决策树——学习笔记(一)
- Facebook SDE onsite面经
- C++命名空间(namespace)
- 原神:创新和成功有目共睹,游戏可玩性历久弥新,戒骄戒躁保初心
- XX市公共租赁住房信息管理系统模板
- 面试官系统精讲Java源码及大厂真题 - 39 经验总结:不同场景,如何使用线程池
- php导出excel表格例子,PHP导出excel表格示例
- 软件开发团队中,凭什么新手当道?| 畅言
- jsoncpp用法简述
- 开源无人机如何实现空对地框选撞击?
- 第6-5课:五子棋游戏的相关算法
- EXCEL——向上、向下自动填充数据
- 小程序-e.detail.value动态获取input的value
- 如何修改input提示文字样式
- 怎样使用css动画animation实现静态箭头图片上下摆动
- aligned内存对齐
- 采样频率和带宽的关系_ADI公司AD7380系列SAR ADC的片内过采样 - 模拟技术
- HTML5——7个最牛的HTML5移动开发框架
- 开源引路人:我的Apache Mentor之路
热门文章
- 新基建将引发全国用电量暴涨近两成,如何应对
- 的日志在哪里_写给大忙人看的,MyBatis日志如何做到兼容所有常用的日志框架?...
- 联想按f2进不了bios设置_华硕笔记本win10装win7bios设置方法分享
- 成功解决To fix this you could try to: 1. loosen the range of package versions you‘ve specified ​​​​​​​
- ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)
- DL之PanopticFPN:Panoptic FPN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- Matlab:盲反卷积还原失焦图像
- pyhanlp 词性标注(正篇)
- sklearn中的分类决策树
- xshell xftp使用