python算法----散列表

今天我们来学习一下python语法中的散列表

散列表

散列表最有用的基本数据结构之一
散列函数:
散列函数是将输入映射到数字散列函数输出的数字是没什么规律的,但是它必须满足一定的要求:
1.它必须是一致的每次输入相同时,得到的也必须都相同
2.它将不同的输入映射到不同的数字
我们能在散列表中准确的找到存储的位置原因如下:
1.散列函数总是将同样的输入映射到相同的索引2.散列函数将不同的输入映射到不同的索引
3.散列函数知道数组有多大,只返回有效的索引

散列表是结合散列函数和数组创建的数据结构,是一种包含额外逻辑的数据结构,也被称为散列映射,映射,字典和关联数组,python提供的散列表实现为字典可以使用 函数dict 来创建(如有不太理解的地方请点击下方链接)
关于python中字典的介绍

冲突:

例子:我们有一个好友叫tom,他的年龄是18岁,我们将他的数据储存在散列表中,我们还有一个好友叫marry,他的年龄是20岁,我们也将她的数据存储在散列表中,但是我们还有一个好友也叫tom,他今年19岁,若我们还是讲tom作为键在散列表中进行信息的存储,我们就只能查到tom的年龄是19岁,却查不到18岁的那个tom,这就叫做冲突

为了解决这种问题,我们可以讲两个tom都映射到同一个位置,在这个位置存储一个列表,我们就可以查到两个tom的信息了,但是查询的速度可能会比查询marry时慢一点

但是我们还应该注意:
1.散列函数很重要,我们应该讲散列函数均匀的映射到散列表的不同位置2.如果散列表存储的链表很长,散列表的速度就会急剧下降

性能:

简单查找的运行时间是线性时间
二分查找的运行时间是对数时间
在散列表执行各种操作的时间都为O(1),被称为常量时间,无论散列表包含的元素是1个还是10000个,获取数据所需的时间都是相同的
在这里插入图片描述
在使用散列表过程中,避免出现最糟糕的情况至关重要,为此需要避免冲突,需要:
1.较低的填装因子
2.良好的散列函数

填装因子:

当填装因子大于1时就表示散列表中的元素数大于散列表的位置数,就需要在散列表中添加位置,这被称为调整长度
填装因子越小,发生冲突的可能性越小,散列标的性能就越高
小经验(一旦填装因子大于0.7就调整长度)

良好的散列函数:

良好的散列函数让数组中的值呈均匀分布, 糟糕的散列函数让值扎堆,导致大量的冲突

猜你喜欢

转载自blog.csdn.net/Layfolk_XK/article/details/108306690