当前位置: 首页 > news >正文

python 列表_Python 算法 09 -- 散列表

84cb5fe3bb857214ae6ee8f72de9a83e.gif
553bf6247141632a7bbd430918dd0948.png

如果你是第一次听说散列表,不要紧!因为你可能根本不需要自己去实现散列表,任何一门优秀的语言都提供了散列表实现。Python 提供的散列表实现为字典 ,你可使用函数 dict 来创建散列表。

前面我们学习了 2 种数据结构:

● 数组

● 链表

我们知道数组和链表各有优劣,如果我们“中西结合”呢?

比如说我们手机的通讯录,其中每个姓名都有对应的电话号码

e98925108f927b0627c7aae255cdd316.png
8147dde6288b7cda97e19fd4566e33f5.png

如果我们要设计一个散列表(数组+链表的结构),需要考虑哪些因素?

我们知道 Python 中的字典是 key - value 的形式,如果我们插入 key = 'Python大星',value = 123456

的值,如何让后续更多的 key - value 能均匀的分配到数组上,而不是在数组某个索引值上集中,浪费空间?

1、hash算法

常用的算法是 hash 算法,index = HashCode(Key) & (Length - 1)

2、数组默认长度

一般选择 16 或者 2 的幂次方,这是因为这个长度计算的 index 能平均分配在 Length - 1 内

3、扩容机制

为什么需要扩容?设想当我们添加的元素越来越多时,会发生 hash 碰撞,就是说 hash 算法得出的 index 是同样的。我们知道链表在查找的时候,从从头节点开始查找,相对于数组是较慢的。这个时候我们可以在一定的阈值范围内采取扩容机制,使添加的元素平摊到其他地方。

Python 语言:

① 创建通讯录,新建一个散列表

de8b0cf3fbf2ba7640385e72438c4e98.png

② 添加新的联系人

7d18407864cceefdce1e6878d87a2e18.png

③ 查找人员

e9a4073dfd8fcb538974731363dc3b3a.png

>>>Python 算法 08 -- 快速排序

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python粘性拓展_拓展Python Markdown
  • ping不通服务器_服务器远程桌面不上不要急,这就告诉你原因
  • 钢笔墨水能否代替打印机墨水_喷墨打印机该用染料墨水还是颜料墨水,区别在哪里?...
  • 零基础学python靠谱吗_零基础学python的我(开篇扯淡)
  • linux安装ssh_如何为Ubuntu服务器建立无密码SSH认证
  • responseentity 返回异常_Spring Boot异常处理
  • sklearn逻辑回归 极大似然 损失_算法 | 一个硬币与逻辑回归的故事
  • restful api和普通api有什么特点_Django REST Framework教程(1): 为什么要学习DRF, 什么是序列化和RESTful的API...
  • sql语言编程学习_在读大学生是否该重点学习一门编程语言,以及该如何选择编程语言...
  • .net 反编译_.net反编译的相关问题
  • class括号里的object_Class文件结构全面解析(下)
  • 标签打印模板_海鸟贴纸打印机:工作和生活中的得力助手!专治强迫症
  • gitlab run成功 但无法访问_用 GitLab 做 CI/CD 是什么感觉,太强了!!
  • 当前操作系统缺少黑体等字体_OpenBSD6.6正式版发布:多平台,类Unix的最安全操作系统...
  • wps 模拟分析 规划求解_基于长时间尺度的园区综合能源系统随机规划
  • 【node学习】协程
  • HTTP请求重发
  • js 实现textarea输入字数提示
  • miaov-React 最佳入门
  • Promise面试题2实现异步串行执行
  • Python连接Oracle
  • QQ浏览器x5内核的兼容性问题
  • React 快速上手 - 07 前端路由 react-router
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (~_~)
  • (11)MATLAB PCA+SVM 人脸识别
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (二)hibernate配置管理
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (汇总)os模块以及shutil模块对文件的操作
  • (算法)N皇后问题
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)ORM
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件使用
  • .NET 8.0 中有哪些新的变化?
  • .Net OpenCVSharp生成灰度图和二值图
  • .Net Remoting常用部署结构
  • .NET WPF 抖动动画
  • .Net面试题4
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • ??myeclipse+tomcat
  • @Mapper作用
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • []指针
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C/C++入门][ifelse]20、闰年判断
  • [C++]拼图游戏
  • [Excel] vlookup函数