`

哈希表

    博客分类:
  • 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

 

分享到:
评论

相关推荐

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

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

    哈希表设计 哈希表 哈希表

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。这种数据结构的设计旨在解决在大量数据中查找特定元素的问题...

    哈希表设计 针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。

    第二步:实现哈希表的基本操作,包括创建哈希表、销毁哈希表、查找哈希表、插入哈希表等。 第三步:实现哈希函数,使用除留余数法构造哈希函数,并使用伪随机探测再散列法处理冲突。 第四步:实现查找算法,使用...

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

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在“数据结构哈希表设计实验报告”中,我们可能会涉及到以下几...

    哈希表操作(c语言版)

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

    哈希表相关操作实现

    哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了一种高效的数据存储和检索方法。哈希表通过将键(Key)映射到一个索引位置来实现快速访问,这个索引位置是通过哈希函数计算得出的。哈希...

    hashtab2_C语言_哈希表删除、添加、寻找_codeblocks_

    哈希表是一种高效的数据结构,它通过特定的函数(哈希函数)将数据映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在C语言中,我们可以手动构建哈希表来处理这些操作。Code::Blocks是一款流行的...

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

    哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将数据映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本主题中,我们将深入探讨哈希表的建立和查找过程,以及相关的算法和设计...

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

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在C语言中,实现哈希表需要理解其基本原理,并掌握如何利用...

    数据结构哈希表实验报告

    数据结构中的哈希表是一种高效的数据存储和检索结构,它通过特定的哈希函数将关键字映射到数组的索引位置,实现快速访问。在这个实验报告中,我们关注的是如何构建哈希表并进行基本操作,包括插入、删除、查找等。 ...

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

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

    哈希表算法 链地址法解决冲突

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本例中,我们关注的是如何利用链地址法来处理哈希冲突。 哈希函数是哈希表的...

    大数据结构课程设计--哈希表实验报告材料

    "大数据结构课程设计--哈希表实验报告材料" 在大数据结构课程设计中,哈希表实验报告材料是非常重要的一部分。本文档将详细介绍哈希表的设计和实现,包括哈希函数的构造、冲突处理、查找算法等。 一、哈希表的设计...

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

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

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

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

    c + + 哈希表实现数字排序

    哈希表是一种在计算机科学中广泛使用的数据结构,它的主要目的是快速查找、插入和删除元素。在这个特定的C++程序中,哈希表被用来实现一个数字排序算法,特别是针对大整数范围内的数据。程序的目标是处理多组测试...

    哈希表源代码-哈希表模型

    在这个"哈希表源代码"压缩包中,我们可以期待找到实现哈希表的源代码,这对于理解哈希表的工作原理以及在实际编程中应用哈希表非常有帮助。 哈希表的基本概念: 1. 键值对:哈希表由一系列键值对组成,每个键对应...

    哈希表的实现

    哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在本项目中,我们将深入探讨哈希表如何用于管理用户名和密码。 ...

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

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

Global site tag (gtag.js) - Google Analytics