❤️实现、冲突和散列函数❤️ 算法图解:第五章:散列表

举报
是Dream呀 发表于 2022/01/15 12:48:15 2022/01/15
【摘要】 ❤️实现、冲突和散列函数❤️ 算法图解:第五章:散列表

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

@TOC

5.1散列函数

散列函数是这样的函数,即无论你给它什么数据,它都还你一个数字。
如果用专业的术语来表达的话,我们会说,散列函数“将输入映射到数字”。
散列函数需要满足一些要求:

  1. 它必须是一致的。即每次输入相同内容时,返回的都是同一个数字
  2. 它应将不同的输入映射到不同的数字。最理想的情况是,将不同的输入映射到不同的数字。
  3. 散列函数将不同的输入映射到不同的索引。

散列表是你学习的第一种包含额外逻辑的数字结构。数组和链表都被直接映射到内存,但散列表更复杂,它使用散列函数来确定元素的存储位置。
Python提供的散列表时限为字典,可以用汉化苏dict来创建:
book=dict()
散列表由键和值组成!

5.2应用案例

# -*-coding:utf-8 -*-
# @Author:到点了,心疼徐哥哥
# 奥利给干!!!
vote={}
def check_voter(name):
    if vote.get(name):
        print('投过了哟')
    else:
        vote[name]=True
        print('投呗')
check_voter('tom')
print(vote)
check_voter('tom')

如果“tom”在散列表中,函数get将返回True;否则返回None。
如果将已投票者的名字存储到列表中,这个函数的速度终将会变得非常慢,因为它必须得使用简单的查找搜索整个列表。使用散列表来检查是否重复,速度非常快。

散列表适用于:
1.模拟映射关系;
2.防止重复;
3.缓存/记住数据,以免服务器再通过处理来生成它们。

5.3冲突

两个元素映射到了同一个位置,就需要在这个位置再存储一个链表。
在这里插入图片描述

这里给我们两个教训:

  1. 散列函数很重要。前面的散列函数将所有的键都映射到一个位置,而最理想的情况是,散列函数将键均匀地映射到散列表的不同位置。
  2. 如果散列表的存储链表很长,散列表的速度急剧下降,如果使用的散列函数很好,这些链表就不会很长。

5.4性能

简单查找的运行时间为线性时间
二分查找的速度更快,所需时间为对数函数
在散列表中查找所需要的时间为常量时间

在这里插入图片描述

5.5小节

你几乎不需要自己去实现散列表,因为你使用的编程语言提供了散列表的实现。
散列表是一种功能强大的数据结构,其操作速度快。
1.可以结合散列函数和数组来创建散列表;
2.冲突很糟糕,应该使用最大限度减少冲突的散列函数;
3.散列表的查找、插入和删除速度都非常快;
4.散列表适合用于模拟映射关系;
5.一旦填装因子超过0.7,就该调整散列表的长度;
6.散列表可用于缓存数据;
7.散列表非常的适合用于防止重复。

好啦,这就是今天要给大家分享的全部内容了
如果你喜欢的话,就不要吝惜你的一键三连了~在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。