转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8185847
问题:
1. hash算法主表实现为什么不直接用数组,而使用malloc动态申请?
2. 另外每个桶的使用 线性队列 和 双向队列 以及 二级hash的区别以及好处是什么?
答案:
     1.
          1)hash表大小如果是固定的,当然可以采用数组;
          struct hash_head  *hash_list[1024];
          2)如果hash大小没有确定,在程序中动态变化的,那就需要使用malloc动态申请。
int hash_size = get_hash_size();
struct  hash_head  **hash_list;
*hash = malloc(hash_size);
memset(*hash, 0, hash_size);
     2.
          线性链表只能单相查找结点,即知道一个已知结点,不能找到它的前驱。  
双向链表可以向前向后二个方向查找结点。
还有双向循环链表,我在项目中用的比较多。直接用内核里扒下来用的。
二级hash我到觉的没什么必要。使结构太复杂。可以用一级hash来代替。设计好hash算法就行了。
问题:
3.
1)已知一个线性表(38,25,74,63,52,48),采用的散列函数为H(Key)=Key%7,将元素散列到表长为7的哈希表中存储。若采用线性探测的开放定址法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为 ____ ;
2)若利用拉链法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为 ____;
答案:1)11/6 ,2)8/6.对于1)中,答案给出的是12/6=2,经过验证是错误的。
分析过程:
1)采用开放定址法
key 38 25 74 63 52 48
地址 4 4 0 3 6
解决冲突过程     5   4 5 6 7
查找次数 1 1 2 1 4 2
平均查找长度:(1*3+2*2+4)/6=11/6

2)采用拉链法
拉链 链表中元素 查找次数
0 63 1
3 38   52 38(1次) 52(2次)
4 25 74  25(1次) 74(2次)
6 48 1
平均查找长度(1*4+2*2)/6=4/3
4.设一哈希表长为13,采用线性探测法解决冲突,哈希函数H(key)=key%13 
1 )画出在空表中依次插入关键字25.20.36.15.41.52.29.72.67后的哈希表 
2 )求在等概率情况下,查找成功和查找不成功的平均查找长度
答案:
1)Hash表
          
hash表下标(地址) 0 1 2 3 4 5 6 7 8 9 10 11 12
hash表元素 52   15 41 29 67   20 72   36   25
解决冲突过程       2 3 3 4   2 3 4 5     7 8        
查找次数 1   1 2 2 4   1 2   1   1
2)查找成功的平均查找长度:(1*5 +2*3 +4*1)/9 = 15/9 。查找成功的平均查找长度为SUM(查找次数)/SUM(元素个数)
3)  查找失败的平均查找长度
计算长度为m的哈希表中装填有n个记录的查找不成功时的平均查找长度相当于计算在这张表中填入第n+1个记录时所需要的比较次数的期望值。
第N+1个记录可能是0~12
若 N+1个记录是0,由于位置0已经被占用,位置1没有占用,所以比较2次,依次类推。
hash表下标 0 1 2 3 4 5 6 7 8 9 10 11 12
hash表元素 52   15 41 29 67   20 72   36   25
解决冲突过程       2 3 3 4   2 3 4 5     7 8        
查找次数 1   1 2 2 4   1 2   1   1
查找不成功 2 1 5 4 3 2 1 3 2 1 2 1 3
故查找不成功的平均查找长度为(2+1+5+4+3+2+1+1+2+2+1+2+1+3)/13=30/13
5.
将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为:      H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表。
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
答案:
(1)
(2)查找成功的平均查找长度

(表3)

所以ASLsuccess= (1+1+1+1+3+3+2)/ 7 = 12/7

    查找不成功的平均查找长度
计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可, 但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置

因此查找不成功的次数表如下表所示

(表4)

所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。

参考文献
http://zhan.renren.com/astart?gid=3602888498031032593 
http://shijuanfeng.blogbus.com/logs/172381700.html 
转载请注明出处http://blog.csdn.net/yankai0219/article/details/8185847

数据结构-Hash总结(三):实践基础篇相关推荐

  1. invader的java学习第三天基础篇

    invader的java学习第三天基础篇 一.整数的取值范围表 类型名称 数据类型 所占空间 表数范围 字节型 byte 1字节 -128-127 短整型 short 2字节 +-3w(-2^15-2 ...

  2. Python机器学习及实践——基础篇9(SVM回归)

    小贴士:核函数是一项非常有用的特征映射技巧,同时在数学描述上也略为复杂.因此这里不做过度引申.简单一些理解,便是通过某种函数计算,将原有的特征映射到更高维度的空间,从而尽可能达到新的高维度特征线性可分 ...

  3. 数据结构-Hash总结(一):理论学习篇

    转载请注明出处http://blog.csdn.net/yankai0219/article/details/8185796 零.学习方法 简要学习理论篇,进入程序学习篇,再回头学习理论篇和实践篇 一 ...

  4. springboot批量更新实体_Spring Batch批量处理支付宝账单实践-基础篇

    前言 最近项目要做聚合支付,聚合支付顾名思义就是将市面上常用的三方支付进行聚合,这样开发者只需要对接我们一方就可以同时对接支付宝.微信支付等其他第三方支付平台,省去了挨个平台对接调试的时间,既然支付给 ...

  5. 计算机视觉 - 图像增强应用实践 (基础篇)C++ OpenCV

    环境配置我之前是跟着B站的一个UP主弄的:VS2019-Opencv4.5.2安装教程(win11上安装跟win10系统安装没有任何区别)_哔哩哔哩_bilibili (但是不知道是不是高版本的问题, ...

  6. 单片机 | 51单片机实践【基础篇】

    [金善愚] 单片机应用实践--基础篇 笔记整理 课程视频 :https://space.bilibili.com/483942191/channel/collectiondetail?sid=1440 ...

  7. 项目版本管理的最佳实践:gitflow基础篇

    对于项目版本管理,你是否存在这样的痛点:项目分支多而杂不好管理,git log界面commit信息错乱复杂无规范,版本回退不知道选择什么版本合适--. 项目版本管理的最佳实践系列,笔者将以两篇文章的形 ...

  8. redis源码剖析(三)——基础数据结构

    文章目录 SDS 链表 字典 这篇文章关于 Redis 的基础数据: SDS SDS (Simple Dynamic String)是 Redis 最基础的数据结构.直译过来就是"简单的动态 ...

  9. 学习C++:C++进阶(三)CMake基础篇---用一个小型项目了解CMake及环境构建

    V1.1 于2022年7月15日第二次修改:添加了比较多的解释图,解读了各类库的CMakelist.txt文件 目录 第一部分 基础篇(Basics) 1.0 本部分主要学什么(Intro) 1.1 ...

最新文章

  1. matlab创建符号常量出错,错误:代码中意外的符号/输入/字符串常量/数值常数/特殊...
  2. Ricky’s RealDan’s Ricky
  3. 安装mysql8.0.11版本,并使用mybatis进行连接mysql遇到的问题
  4. python expect模块_Python尚学堂高淇|第二季0408P119P123with上常见的异常的解决tryexcept...else结构,...
  5. python之路_django分页及session介绍
  6. bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分
  7. 移动机器人综合性能对比分析
  8. Linked List Two Finish
  9. (7)数据结构-基本队列实现
  10. 使用CImageList的一点心得
  11. cad 2005 计算机,AutoCAD2005
  12. 计算电磁学MoM学习启动篇
  13. access网格线方向微为垂直_设置ACCESS2010背景和网格线
  14. 阿里、华为和微软等多家国内外厂商组团搞OpenJDK,Oracle为啥不参加?
  15. matlab中双x轴,【转】MATLAB:双X轴曲线绘图
  16. Not creating XLA devices, tf_xla_enable_xla_devices not set
  17. 车载前置摄像头学习笔记 ———— 摄像头输出数据格式(JPEG)
  18. 生产者消费者模型 android
  19. mybatisPlus插入语句
  20. SpringMVC个人理解(downpour 的SpringMVC深度探险的个人整理)

热门文章

  1. 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则
  2. 微软面向初学者的机器学习课程:1.2-机器学习的历史
  3. NET问答: 如何将 DataTable 转成 IEnumerableT ?
  4. GraphQL:验证与授权
  5. Azure Cosmos Db 介绍及演示
  6. 我们为什么推荐在Json中使用string表示Number属性值
  7. dotNET Core 3.X 使用 Web API
  8. 【实战 Ids4】小技巧篇:自定义登录页操作
  9. dotNET Core 中怎样操作 AD?
  10. 从.Net框架Bug的提交到修复代码成功合并到.NET CoreFX主线