论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

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

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:58

本课主题: 哈希表(一)

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

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

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

授课内容:

一、哈希表的概念及作用

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

理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的要害字之间建立一个确定的对应关系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、直接定址法

例如:有一个从1到100岁的人口数字统计表,其中,年龄作为要害字,哈希函数取要害字自身。

地址

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为随机函数。通常用于要害字长度不等时采用此法。

三、总结

哈希表的优缺点

四、作业

 

预习如何处理冲突及哈希表的查找。

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058