Python第八天:哈希表笔记以及题目整理

发布时间:2026/9/15 6:45:30

Python第八天:哈希表笔记以及题目整理 1. 哈希表的核心思想哈希表Hash Table是一种根据关键码key的值直接进行访问的数据结构其主要作用是快速判断一个元素是否出现在集合中。核心思想在关键码key和存储位置之间建立一个确定的对应关系f使得每个关键字 key 对应一个唯一的存储位置。2. 哈希表的直观比喻可以将哈希表想象成一个大抽屉这个大抽屉里面有很多小格子每个格子可以用来存放数据。抽屉编号key通过这个 key 可以找到对应的抽屉散列函数Hash Function将数据的名字key转换成一个数字然后根据这个数字来选择对应的抽屉抽屉里的物品实际存储的数据快速查找通过名字key可以快速地找到对应的抽屉3. 哈希表的数据结构选择在解决问题时哈希表一般选择以下三种数据结构数组列表集合映射4. 哈希冲突与解决哈希冲突不同的 key 经过散列函数可能得到相同的数字即映射到同一个抽屉解决冲突的方法开放地址法链地址法再哈希法建立公共溢出区5. 哈希表的优势快速查找平均时间复杂度 O(1)直接访问通过 key 可以直接定位到存储位置避免重复比较不需要像线性查找那样逐个比较6. 应用场景快速查找元素是否存在数据去重缓存实现字典/映射关系存储统计频率7. 实现要点# 简单哈希表示例classSimpleHashTable:def__init__(self,size10):self.sizesize self.table[[]for_inrange(size)]# 使用链地址法解决冲突defhash_function(self,key):简单的散列函数returnhash(key)%self.sizedefinsert(self,key,value):插入键值对indexself.hash_function(key)self.table[index].append((key,value))defsearch(self,key):查找键对应的值indexself.hash_function(key)fork,vinself.table[index]:ifkkey:returnvreturnNone8. 注意事项散列函数设计好的散列函数应该均匀分布减少冲突负载因子存储元素数量与哈希表大小的比值影响性能冲突处理选择合适的冲突解决方法动态扩容当负载因子过高时需要考虑扩容总结哈希表通过建立 key 到存储位置的直接映射关系实现了快速的数据访问和查找是计算机科学中非常重要的数据结构之一。9. 实践示例统计字符串中出现次数最多的字母下面是一个统计字符串中出现次数最多的字母的Python示例以及常见的错误分析# 读取一个整数 n表示接下来有 n 行字符串要处理nint(input())# 循环 n 次每次处理一行字符串foriinrange(n):# 读取当前行的字符串题目保证只含小写字母但为了安全我们后面过滤sinput()# 创建一个长度为 26 的列表用来记录 a~z 每个字母出现的次数# 26 * [0] 和 [0] * 26 效果相同都是生成包含 26 个 0 的列表count26*[0]# 遍历字符串中的每一个字符forcharins:# 只处理小写字母避免空格、数字、大写字母等干扰ifacharz:# 计算当前字母在 count 列表中的索引a-0, b-1, ..., z-25idxord(char)-ord(a)# 该字母出现次数加 1count[idx]1# 开始查找出现次数最多的字母max_freq0# 当前最大出现次数初始为 0max_idx-1# 当前最大次数对应的字母索引-1 表示尚未找到# 遍历 26 个字母的计数forminrange(26):ifcount[m]max_freq:# 发现更大的出现次数更新最大值和对应索引max_freqcount[m]max_idxm# 注意这里用的是 而不是 所以当次数相同时不会更新# 这样就会保留索引较小的字母也就是字母顺序更小的那个符合题目默认要求# 将索引转换回对应的字母# ord(a) max_idx 得到该字母的 Unicode 编码chr() 将其转成字符resultchr(ord(a)max_idx)# 输出这一行的结果print(result)常见错误分析错误①range(s) 使用字符串作为参数错误代码forjinrange(s):报错TypeError: str object cannot be interpreted as an integer原因range()函数只接受整数参数而s是字符串类型。正确做法想遍历字符串的每个字符可以直接用for char in s:或者用for i in range(len(s)):再通过索引取字符。错误②把变量名写成字符串字面量错误代码chord(char)-ord(a)报错TypeError: ord() expected a character, but string of length 4 found原因char是一个长度为 4 的字符串由 c、h、a、r 四个字符组成而ord()函数要求传入单个字符。你本意是用循环变量char却误加了引号变成了固定字符串。正确做法变量名不能加引号应写成ord(char)。哈希思想在本例中的应用这个例子实际上使用了哈希思想哈希函数ord(char) - ord(a)将字母映射到 0-25 的索引直接访问通过索引直接访问count数组中的对应位置快速统计时间复杂度为 O(n)其中 n 是字符串长度这种方法比使用字典Python 内置的哈希表实现更高效因为数组的访问速度更快且空间固定为 26。
延伸阅读

更多相关文章

2026/9/15 6:44:09

从零写一个工控多协议通讯库(一):架构与取舍

📌 本文首发于我的个人博客 talkplc.com,同步发布于 CSDN。原文链接:https://talkplc.com/2026/07/18/talkplc-architecture/ 上一篇把 Modbus 一帧报文逐字节拆开讲了。这一篇往上走一层:与其每个项目都重写一遍 Modbus/西门子/三…

2026/9/15 6:41:37

AI前端面试黄金准备期:SSE流式处理与TypeScript类型守门实战

1. 为什么9月8号是今年AI前端面试准备的黄金启动日?如果你正盯着日历,犹豫“现在开始准备AI方向的前端面试,到底来不来得及”,那我得先告诉你一个反直觉但被上百份真实offer验证过的结论:9月8号不是太晚,而…

2026/9/15 6:41:37

联合储能系统在配电网优化调度中的应用与Matlab实现

1. 项目概述:联合储能在配电网中的关键作用电力系统正经历着从传统化石能源向可再生能源转型的关键时期。在这个转型过程中,配电网作为连接发电侧和用户侧的"最后一公里",面临着前所未有的挑战与机遇。我最近完成的一个研究项目&am…

2026/9/15 6:41:37

专业图片去水印技术解析与高效工具实操指南

1. 图片去水印工具的核心价值与应用场景作为一名经常处理图片素材的视觉设计师,我深知水印对作品完整性的破坏有多严重。无论是从网络获取的参考图、客户提供的带版权标记的素材,还是自己早期添加水印后需要重新编辑的旧作品,水印的存在往往成…

2026/9/15 6:41:37

别再滥用Redis!后端缓存设计的三个致命误区

去年,我们一个商品详情服务接入了Redis,QPS从两千涨到了两万,团队欢呼雀跃。三个月后,一次缓存雪崩,数据库被打穿,服务瘫痪了四十分钟。复盘时才发现,我们把Redis当成了万能药,却踩了…

2026/9/15 6:36:37

AI论文写作工具评测与职称论文高效写作方案

1. AI论文写作工具的价值与现状作为一名科研工作者和学术编辑,我亲历了从传统论文写作到AI辅助写作的转变过程。职称论文作为专业技术人员晋升的重要依据,其质量直接影响职业发展。但现实中,许多专业人士面临时间紧张、写作经验不足、格式规范…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码