一、前言:
前面已经学习了两种数据结构:数组和链表
如果你是商店老板,面对顾客对商品的价格的询问,你肯定希望找一个服务员可以马上回答出价格,但服务员要想记住所有商品价格的可能性很小。
而你如果去使用数组存储包含两项内容的元素,然后按照商品名称排好序,那么你如果使用二分法去查找,那也得O(log n)时间,你想要的是O(1),而散列函数这时候就可以起作用了。
二、散列函数
散列函数就是无论你给它什么数据,它都还你一个数字。
散列函数也必须满足一些要求:
它必须是一致的,就是你如果输入Mike得到的是98,纳闷每次输入Mike得到的都是98。
你如果学习过python数据类型中的字典的话就很好理解,因为Python提供的散列表实现就是字典,所以你可以使用函数dist来创建散列表。
三、应用
你如果使用散列表去创建一个电话本,所以先创建一个散列表(字典):
book={}
那么就需要先添加人名和号码:
book["Mike"]=123456
book["John"]=121212
然而添加时如何防止重复添加呢?这里get()函数派上用途了:
x=book.get("Mike")
如果Mike在散列表中就会返回True否则返回None
四、冲突与性能
假如你有一个10个位置的数组,当你把第一元素存储到散列表中时,分配给你的是第一个位置,当以把第二个元素存储到散列表中时,他分配给你的是第五个位置,可是当你如果添加第三个元素时,它又把第一个位置分配给你了,此时就出现冲突。
解决方法中最简单的便是在同一个位置存储一个链表,可是如果绝大部分

本文介绍了散列表作为数据结构的基础知识,包括散列函数的一致性、在电话本应用中的实现、解决冲突的方法以及性能优化,强调了填装因子在保持散列表效率中的重要性。
最低0.47元/天 解锁文章
3999

被折叠的 条评论
为什么被折叠?



