算法基础:散列表(基于Python)

本文介绍了散列表(哈希表)的基本概念、应用,包括查找、防止重复和用作缓存,并通过Python的字典展示了其实现。散列表通过散列函数将关键码值映射到特定位置,实现快速查找。当填装因子过高时,冲突增加,性能下降,需要调整长度以保持高效性能。
摘要由CSDN通过智能技术生成

本博客所有内容均整理自《算法图解》,欢迎讨论交流~

想必大家都熟知最基本的两个数据结构:数组链表,在此二者的基础上,延伸出了两种比较高级的数据结构:队列。其实还有一种很有用的基本数据结构,那就是散列表


1、散列表的基本概念

散列表也成为哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

关于散列表的引入我想引用《算法图解》一书举的例子,我觉得非常贴切。

假设你在一家杂货店上班,在顾客来买东西时,你需要在一个价格表的本子中查找商品的价格。如果本子的内容是无序的,那么你查找苹果(apple)的价格就需要浏览本子内所有的内容,需要多长时间来完成查找价格的操作呢?用大O表示法来表示就是O(n)

如果这个本子编排得比较智能,刚好是按照字母顺序来排列的,那么OK,你可以使用二分查找来找出苹果的价格,此时需要的时间将大大缩短,为O(log^{n})

但是性能还能不能再提升呢?假如我能够聘请到一位雇员,这位雇员可以记住所有商品的价格,任何顾客来购买任何一件商品时,该雇员都可以直接凭借记忆一口就报出商品的价格,那么此时需要的时间就是O(1)了!

那么到哪去聘请这样一位雇员呢?此时就需要散列函数了。

散列函数是这样的函数,即无论你给它声明数据,它都反馈你一个数字。用专业术语表达,即散列函数“将输入映射到数字”。所以,看完这个定义你就知道了,散列函数就是上述的神级雇员,你给它输入一个商品名称,它就给你反馈该商品的价格数字。

散列函数必须满足一些要求:

  • 它必须是一致的。例如,假设你输入“苹果”时反馈的是数字4,那么每次你输入“苹果”都会得到相同的反馈,数字4。
  • 它应将不同的输入映射到不同的数字

有了散列函数,你就可以来创建你的神级雇员了!

我们首先创建一个空数组,假设长度为5,我们将在这个数组中存储商品的价格。

原始数组如下所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值