数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)

简介: 数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)

散列表的性能分析

  • 平均查找长度(ASL)用来度量散列表查找效率:成功、不成功
  • 关键词的比较次数,取决于产生冲突的多少,影响产生冲突多少有以下三个因素
  1. 散列函数是否均匀;
  2. 处理冲突的方法;
  3. 散列表的装填因子


开放地址法的查找性能

线性探测法

可以证明,线性探测法的期望探测次数满足下列公式:

(对插入和不成功查找而言)

(对成功查找而言)


时,

  • 插入操作和不成功查找的期望
  • 成功查找的期望

在实际问题中,


1717670908383.png


,于是,经过公式计算得:

ASLu=5.70次,ASLs=2.11(实际计算ASLs=2.56)

平方探测法和双散列探测法

可以证明,平方探测法和双散列探测法探测次数满足下列公式:

(对插入和不成功查找而言)

(对成功查找而言)



时,

  • 插入操作和不成功查找的期望
  • 成功查找的期望

在实际问题中,


1717670943450.png

,于是,通过公式计算得:

ASLu=5.56次,ASLs=2.09次(实际计算ASLs=2)。

期望探测次数与装填因子的关系


  • 当装填因子 的时候,各种探测法的期望探测次数都不大,也比较接近。
  • 随着 的增大,线性探测法的期望探测次数增加较快,不成功查找和插入操作的期望探测次数比成功查找的期望探测次数要大
  • 合理的最大装填因子应该不超过0.85

分离链接法的查找性能

所有地址链表的平均长度定义成装填因子 有可能超过1。

不难证明:其期望探测次数p为:

(对插入和不成功查找而言)

(对成功查找而言)



时,

  • 插入操作和不成功查找的期望
  • 成功查找的期望

在实际问题中,

前面例子14个元素分布在11个单链表中,所以 ,故

期望ALSu=1.55次,ASLs=1.64次(实际计算ASLs为1.36).

总结

  • (优点)选择合适的h(key),散列表的查找效率期望是常数O(1),它几乎与关键字的空间的大小n无关!也适合于关键字直接比较计算量大的问题
  • 它是以较小的为前提。因此,散列方法是以空间换时间
  • (缺点)散列方法的存储对关键字是随机的,不便于顺序查找关键字,也不适用与范围查找,或最大值最小值查找。

开放地址法

  • (优点)散列表是一个数组,存储效率高,随机查找
  • (缺点)散列表有“聚集”现象

分离链接法

  • 散列表顺序存储和链式存储的结合,链表部分的存储效率和查找效率都比较低
  • (优点)关键字删除不需要“懒惰删除”法,从而没有存储“垃圾”
  • (缺点)太小的 可能导致空间浪费,大的 又将付出更多的时机代价。不均匀的链表长度导致时间效率的严重下降。
目录
相关文章
|
19天前
crash —— 获取内核地址布局、页大小、以及栈布局
crash —— 获取内核地址布局、页大小、以及栈布局
|
19天前
crash —— 查看数据结构内部成员的偏移量和地址
crash —— 查看数据结构内部成员的偏移量和地址
|
2月前
|
机器学习/深度学习 算法 数据挖掘
操作系统调度算法的演进与性能分析
随着计算机科学的发展,操作系统作为硬件与软件之间的桥梁,其调度算法对系统性能有着举足轻重的影响。本文将探讨操作系统中调度算法的演变,从早期的简单调度策略到现代复杂的多级反馈队列和实时调度机制,并结合最新研究和实验数据,深入分析不同调度算法对系统吞吐量、响应时间及资源利用率的影响。通过对调度算法性能的定量评估,本文旨在为系统设计者提供优化决策的理论依据,同时为未来调度算法的研究指明方向。
35 0
|
3月前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
75 1
|
3月前
|
机器学习/深度学习 人工智能 算法
操作系统调度算法的演变与性能分析
操作系统作为计算机硬件和软件之间的桥梁,其调度算法的效率直接影响到系统的响应速度和资源利用率。本文将探讨从简单到复杂的各类调度算法,包括先来先服务、短作业优先、轮转法以及多级反馈队列等,通过数据分析揭示各算法的性能特点,并结合现代操作系统设计的需求,讨论未来调度算法的发展趋势。
|
4月前
|
算法 Unix Linux
【C/C++ 实用工具】性能分析工具一览
【C/C++ 实用工具】性能分析工具一览
225 0
|
4月前
|
Web App开发 JavaScript 前端开发
JavaScript中的性能优化:代码优化技巧与性能分析工具
【4月更文挑战第22天】本文探讨JavaScript性能优化,包括代码优化技巧和性能分析工具。建议避免全局查找、减少DOM操作、使用事件委托、优化循环和异步编程以提升代码效率。推荐使用Chrome DevTools、Lighthouse和jsPerf等工具进行性能检测和优化。持续学习和实践是提升JavaScript应用性能的关键。
|
7天前
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具
|
12天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
4月前
|
监控 Java 开发者
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
【5月更文挑战第21天】本文介绍了Java性能优化的两个利器——JProfiler和VisualVM。JProfiler通过CPU Profiler、内存分析器和线程视图帮助解决过度CPU使用、内存泄漏和线程阻塞问题;VisualVM则聚焦于GC行为调整和类加载优化,以减少内存压力和提高应用性能。使用这些工具进行定期性能检查,是提升Java应用效率的关键。
123 0