数据结构32-33

上一篇 / 下一篇  2010-07-04 21:11:43

第三十二课

本课主题: 哈希表(一)

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

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

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

授课内容:

一、哈希表的概念及作用

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

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

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


TAG:

 

评分:0

我来说两句

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 19097
  • 日志数: 51
  • 建立时间: 2009-04-22
  • 更新时间: 2010-12-09

RSS订阅

Open Toolbar