pyhon算法---散列表

散列表学习目标

散列表是最有用的基本数据结构之一,散列表用途广泛,本篇博客我们将学习散列表的内部机制:实现.冲突和散列表函数.

散列函数:
散列函数是将输入映射到数字散列函数输出的数字是没什么规律的,但是它必须满足一定的要求:
1.它必须是一致的每次输入相同时,得到的也必须都相同
2.它将不同的输入映射到不同的数字

我们能在散列表中准确的找到存储的位置原因如下:
1.散列函数总是将同样的输入映射到相同的索引2.散列函数将不同的输入映 射到不同的索引
3.散列函数知道数组有多大,只返回有效的索引

散列表是结合散列函数和数组创建的数据结构,是一种包含额外逻辑的数据结构,也被称为散列映射,映射,字典和关联数组,python提供的散列表实现为字典可以使用 函数dict 来创建

冲突:

例子:我们有一个好友叫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就调整长度)

良好的散列函数:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值