`

哈希表

    博客分类:
  • JSE
阅读更多

 

哈希表的概念作用及意义,哈希表的构造方法

作者:unknown 更新时间: 2005-05-11

 

 

本课主题: 哈希表(一)

教学目的: 掌握哈希表的概念作用及意义,哈希表的构造方法

教学重点: 哈希表的构造方法

教学难点: 哈希表的构造方法

授课内容:

一、哈希表的概念及作用

一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在 比较 的基础上,查找的效率依赖于查找过程中所进行的比较次数。

理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f ,使每个关键字和结构中一个唯一的存储位置相对应。

哈希表最常见的例子是以学生学号为关键字 的成绩表,1号学生的记录位置在第一条,10号学生的记录位置在第10条...

如果我们以学生姓名为关键字,如何建立查找表,使得根据姓名可以直接找到相应记录呢?

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

 

 

刘丽

刘宏英

吴军

吴小艳

李秋梅

陈伟

...

姓名中各字拼音首字母

ll

lhy

wj

wxy

lqm

cw

...

用所有首字母编号值相加求和

24

46

33

72

42

26

...

最小值可能为3 最大值可能为78 可放75 个学生

用上述得到的数值作为对应记录在表中的位置,得到下表:

 

 

成绩一

成绩二...

3

...

 

 

...

...

 

 

24

刘丽

82

95

25

...

 

 

26

陈伟

 

 

...

...

 

 

33

吴军

 

 

...

...

 

 

42

李秋梅

 

 

...

...

 

 

46

刘宏英

 

 

...

...

 

 

72

吴小艳

 

 

...

...

 

 

78

...

 

 

上面这张表即哈希表

如果将来要查李秋梅的成绩,可以用上述方法求出该记录所在位置:

李秋梅:lqm 12+17+13=42 取表中第42 条记录即可。

问题:如果两个同学分别叫 刘丽 刘兰 该如何处理这两条记录?

这个问题是哈希表不可避免的,即冲突 现象:对不同的关键字可能得到同一哈希地址。

二、哈希表的构造方法

1、直接定址法

例如:有一个从1100 岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。

地址

01

02

...

25

26

27

...

100

年龄

1

2

...

25

26

27

...

...

人数

3000

2000

...

1050

...

...

...

...

...

 

 

 

 

 

 

 

 

2、数字分析法

有学生的生日数据如下:

..

75.10.03
75.11.23
76.03.02
76.07.12
75.04.21
76.02.15
...

经分析, 第一位,第二位,第三位重复的可能性大,取这三位造成冲突的机会增加,所以尽量不取前三位,取后三位比较好。

3、平方取中法

取关键字平方后的中间几位为哈希地址。

4、折叠法

将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位)作为哈希地址,这方法称为折叠法。

例如:每一种西文图书都有一个国际标准图书编号,它是一个10 位的十进制数字,若要以它作关键字建立一个哈希表,当馆藏书种类不到10,000 时,可采用此法构造一个四位数的哈希函数。如果一本书的编号为0-442-20586-4, 则:

 

5864

 

5864

 

4220

 

0224

+)

04

+)

04

 

-----------

 

-----------

 

10088

 

6092

 

H(key)=0088

 

H(key)=6092

 

 

 

 

 

(a) 移位叠加

 

(b) 间界叠加

5、除留余数法

取关键字被某个不大于哈希表表长m 的数p 除后所得余数为哈希地址。

H(key)=key MOD p (p<=m)

6、随机数法

选择一个随机函数,取关键字的随机函数值为它的哈希地址,即

H(key)=random(key) , 其中random 为随机函数。通常用于关键字长度不等时采用此法。

三、总结

哈希表的优缺点

四、作业

 

 

 

 

http://www.ddvip.com/program/c/index3/70.htm

 

分享到:
评论

相关推荐

    哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找

    哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找哈希表的建立和查找

    哈希表设计程序设计+数据结构实验报告

    哈希表设计程序设计+数据结构实验报告 1.1 针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序. 1.2 人名为汉语拼音形式,最长不超过18个字符(如:庄双双 zhuangshuangshuang)...

    姓名哈希表创建哈希表,将ASCII码取余得KEY值,若未发生冲突存入哈希表

    /为班级30个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。要求用除留余数法 构造哈希函数,用线性探测再散列法处理冲突,平均查找长度的上限为2。 编写数据结构和算法来实现。要求:将哈希函数和处理冲突方法...

    哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。c语言课设

    哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2...

    哈希表设计 哈希表 哈希表

    对一批关键字集合采用开放定址哈希表的存储结构来建立相应的哈希表和完成查找过程。 (1) 熟练掌握哈希表的构造方法 (2) 理解哈希表与其他结构表的实质性差别。

    哈希表的设计与实现【课程设计】

    哈希表的设计与实现课程设计 问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。 基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字...

    哈希表的设计与实现

    问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。 基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字建立哈希表,哈希函数用除留取...

    哈希表课程设计数据结构实验报告——哈希表设计

    哈希表课程设计数据结构实验报告——哈希表设计 针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序. 1.2 人名为汉语拼音形式,最长不超过18个字符(如:庄双双 ...

    哈希表操作(c语言版)

    ////采用除留余数法定义哈希表,哈希表长度为10,哈希函数为H(key)=key%13。产生冲突时采用线性探测法实现下面要求的功能。 ////(1)初始化哈希表,置空哈希表 ////(2)在哈希表中查找元素 ////(3)在哈希表中...

    《数据结构课程设计》设计哈希表实现电话号码查找系统

    哈希表的设计与实现——链地址法 问题描述: 设计哈希表实现电话号码查找系统。 基本要求: (1)设每个记录有下列数据项:电话号码、用户名、地址; (2)从文件中读取各记录,分别以电话号码和用户名为关键字建立...

    哈希表的设计与实现 实现电话号码查询(用word 2007打开)

    哈希表的设计与实现。设计哈希表实现电话号码查询系统。基本要求:(1)设每个记录有一列数据项:电话号码、用户名、地址(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;(3)采用再哈希法解决...

    数据结构课设哈希表查找姓名.rar

    问题描述:针对某个集体中人名设计哈希表,并完成相应的建表和查表程序。 要求: (1)假设人名为中国人姓名的汉语拼音形式。名称的长度不少于3个字符、不多于10个字符; (2)随机生成人名列表,个数不少于3000个,...

    C语言设计哈希表实现图书查找

    C语言设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 1) 记录由外部输入。 2) 将生成...

    数据结构实验报告--姓名哈希表的设计与实现.doc

    任务要求:针对姓名信息进行初始化哈希表,可以进行显示哈希表,查找元素。 设计思想:哈希函数用除留余数法构造,用线性探测再散列处理冲突。 设人名为中国人姓名的汉语拼音的形式,有30个待入的人名,取平均查找...

    人名查询哈希表设计(链地址法)

    针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。 基本要求 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除...

    数据结构哈希表设计(1).doc

    1. 问题描述 针对某个集体(比如你所在的班级)中的"人名"设计一个哈希表,使得平均查找长度 均不超过R,完成相应的建表和查表顺序。 2. 基本要求 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个...

    用C语言实现的哈希表设计

    用C语言实现的哈希表设计,内有姓名列表,只要输入姓名就可得到查到在哈希表中的相应位置

    哈希表设计源码

    假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。

    哈希表的设计与实现哈希表的设计与实现

    哈希表的设计与实现哈希表的设计与实现哈希表的设计与实现

    数据结构课程设计 哈希表设计

    针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2...

Global site tag (gtag.js) - Google Analytics