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

转载请注明出处 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)采用开放定址法
key382574635248
地址44036
解决冲突过程  5 4 5 67
查找次数112142
平均查找长度:(1*3+2*2+4)/6=11/6
2)采用拉链法
拉链链表中元素查找次数
0631
338   5238(1次) 52(2次)
425 74 25(1次) 74(2次)
6481

平均查找长度(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表下标(地址)0123456789101112
hash表元素52 15412967 2072 36 25
解决冲突过程   2 33 4  2 3 4 5  7 8    
查找次数1 1224 12 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表下标0123456789101112
hash表元素52 15412967 2072 36 25
解决冲突过程   2 33 4  2 3 4 5  7 8    
查找次数1 1224 12 1 1
查找不成功2154321321213

故查找不成功的平均查找长度为(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人类历史上最伟大的物理学家

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

DevToys - 开发人员的瑞士军刀

DevToys 是一个适用于开发人员的工具箱, 基于 UWP 开发, DevToys 旨在拥抱 Windows 生态系统, 免费并且开源, 拥有现代化的界面, 支持中文, 有深色/浅色主题可选, 并且它是离线化的, 所以你完全可以在无网络环境中使用。你可以使用它处理与开发相关的一些任务, 它提供 了14…

python写小猪佩奇_python之小猪佩奇

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小猪佩奇 (源码有点长)# coding:utf-8 import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255,155,192),"pink") t.setup(840,500) t.speed(10) #鼻子 t.pu() t.goto(-…

PYHON中的切片

Python中的切片容易混淆,这里总结一下自己的看法 切片的语法 1 a [1,2,3,4] 2 x a[1:2] #实际上执行的是 a.__getitem__(slice(1,2,None)) 1 slice([start], stop[, step] 2 3 step的符号表示一种方向的含义 4 :从左向…

求字符串的不重复字符的最长子串长度的问题

题目: 已知一个字符串,只含有小写字母,求这个字符串的每个字符都不相同的最长子串的长度。 比如: abcd 结果是4 abcab 结果是3 思路: 用一个26个元素的整形数组表示一个字符串中是否含有某个字符。a~b分别映射到数组元素0~25。 用两个指针分别指向字符串的第一个和第…

ionic 中文 API CSS and javascript link

ionic 中文 API CSS ionic 中文 API javascript 转载于:https://www.cnblogs.com/xieyier/p/4036152.html

phpmyadmin的安装部署

系统环境:centos7php版本:5.3.27phpmyadmin版本:4.2.7.1IP:192.168.1.205数据库:mysql5.5.32本次部署使用nginx下载phpmyadmin:wget https://files.phpmyadmin.net/phpMyAdmin/4.2.7.1/phpMyAdmin-4.2.7.1-all-languag…

你和985硕博研究生,差了这些东西

全世界只有3.14 % 的人关注了爆炸吧知识明明都是在搞科研为什么别人的思路比你开阔?明明都是在写文章为什么别人的方向比你更新颖?今天小编就来推荐几个能拓展视野的公号快点收藏起来吧!募格课堂ID:mugeketang推荐理由&#xff1a…

产品运行所需的信息检索失败_禁煤后用什么替代锅炉?看看三种热源运行费用对比就知道了...

山西是我国的煤炭大省,煤炭资源丰富,自然而然也是燃煤大省。在打赢蓝天保卫战的目标任务下,拆除燃煤锅炉,改用清洁能源产品是大势所趋。这样的市场背景下,显然可见的是,山西地区将会迎来一大波的燃煤锅炉改…

图像处理技术(三)白平衡

在现实生活中,同学们经常会出旅游、去景点打卡,拍照,发个朋友圈,如果遇到阴雨天、雾霾天或者沙尘天气,那拍照的效果,可是让人头疼。好不容易去北京故宫玩一次,这不,遇到这种天气&…

Android之使用AIDL时的跨进程回调—Server回调Client

首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 package com.cmcc.demo.server; interface ITaskCallback { void actionPerformed(int actionId); } ITaskBinder.aidl 用于存放供给client端调用的方法package com.cmcc.demo.se…

Mac上Homebrew的使用 (Homebrew 使 OS X 更完整)

0 Homebrew是啥? “Homebrew installs the stuff you need that Apple didn’t.——Homebrew 使 OS X 更完整”。 Homebrew的官网[1](多语言版本)简单明了地介绍了如何安装和使用这个工具,并提供了自己的Wiki。 1 安装Homebrew b…

Java泛型总结

Java泛型总结 Java泛型是JDK5引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用的时候使用具体的类型来替换。泛型最主要的应用是在JDK5中的新集合类框架中。对于泛型概念的引入,开发…

mysql查看日志命令_面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!

之前我们搭建的ELK日志收集系统,主要是用来收集SpringBoot应用的日志。其原理是应用通过Logstash插件,使用TCP向Logstash传输日志,从而存储到Elasticsearch中去。但是有很多中间件的日志都是直接存储在文件中的,比如Nginx、Elasti…

单元测试 | 如何Mock IHttpClientFactory

前言编写单元测试时&#xff0c;常常需要使用Mock框架&#xff08;例如Moq&#xff09;生成测试类的依赖接口的"模拟"实现&#xff0c;并验证接口是否按预期使用&#xff1a;_mediatorMock new Mock<IMediator>();_mediatorMock.Setup(x > x.Send(It.IsAny…

跨域资源共享(CORS)--跨域ajax

几年前&#xff0c;网站开发者都因为ajax的同源策略而撞了南墙。当我们惊叹于XMLHttpRequest对象跨浏览器支持所带来的巨大进步时&#xff0c;我们很快发现没有一个方法可以使我们用JavaScript实现请求跨域访 问&#xff0c;对此我们哀叹不已。每个人在他们自己的网站上建立代理…

Wireshark和 TcpDump抓包分析心得

1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具&#xff0c;支持Windows平台和Unix平台&#xff0c;我一般只在Windows平台下使用Wireshark&#xff0c;如果是Linux的话&#xff0c;我直接用tcpdump了&#xff0c;因为我工作环境中的Linux一般只有字符界面&#x…

StringBuffer和StringBuilder使用方法比較

StringBuffer是字符串缓冲区&#xff0c;是一个容器。 特点&#xff1a; 1&#xff0c;长度是可变化的。2&#xff0c;能够字节操作多个数据类型。 3&#xff0c;终于会通过toString方法变成字符串。 C create U update R read D delete1&#xff0c;存储。StringBuffer append…

遇到可爱女生如何搭讪?

1 旺仔落泪▼。。。2 养狗一日&#xff0c;用狗一时&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 试图混进芒果里的鹦鹉&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 把滴滴司机的坐垫沾走了▼5 如何高效记单词&#xff08;素材来源网络&#xf…