Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89344
  • 博文数量: 87
  • 博客积分: 3980
  • 博客等级: 中校
  • 技术积分: 1010
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-08 06:42
文章分类

全部博文(87)

文章存档

2010年(1)

2009年(86)

我的朋友

分类: LINUX

2009-08-10 20:35:42

哈希查找

一、 功能
自定义哈希函数及解决冲突的方法,建立一张哈希表;输入要查找的数据,进行哈希查找,查找结果有相应提示。

二、 哈希查找简介
哈希查找是一种基于计算的查找,其查找长度与查找表的长度无关,而与哈希函数的选择和解决冲突的方法有关。
哈希查找先将关键字通过哈希函数进行计算,计算出其地址,放入哈希表中(查找的过程同此)。如果地址已经有其他元素,称为冲突,此时要根据采用的解决冲突的方法来解决。
下面我们通过一个实例来进行学习。

三、 哈希表的建立和哈希函数的选择
如建立一个长度为35的哈希表,即定义一个长度为35的数组。
哈希函数用来计算关键字的地址,如选择的哈希函数为f(x)=x % 29,则关键字35的数组元素下标应该为6,关键字72的数组元素下标应该为14,等等。

四、 解决冲突的方法
当 两个不同关键字通过哈希函数计算出来的地址一样时,称为冲突。如输入关键字35,计算出其下标为6,此时下标为6的地方已经存在元素64,此时产生冲突。 可以用线性探测方法,即依次探测下标6后面的地址,是否有空位可以存放35。探测的次数不能过多,例如最多5次为宜,即6后面连续5个下标都无空位的话, 当作溢出处理,不能插入。

五、 哈希查找
元素的查找与元素的插入相对应。如查找关键字35,通过哈希函数计算出其下标当为6,则查看数组下标为6的元素是否35,如果是则找到,如果不是则需要线性探测6后面的5个位置,如果在这5个位置的其中一个,则找到,否则输出找不到。

六、 程序流程
1、 定义哈希表;
2、 输入若干个数,插入到哈希表中,输出哈希表;
3、 输入要查找的关键字,输出查找结果。
(如果可能,建立菜单以便选择操作最好)
阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~