DS11_查找与散列结构汇编.pptVIP

  • 5
  • 0
  • 约8.95千字
  • 约 50页
  • 2017-04-12 发布于湖北
  • 举报
DS11_查找与散列结构汇编

基本思想: 在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法。即:通过简单计算直接得到数据的地址。 1) 哈希(Hash)函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字。 哈希表 关键字 集合 存储地址 集合 hash 2) 由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1? key2,而 f(key1) = f(key2)。 3) 很难找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。 哈希表 1 2 3 51 52 年份 人数 1949 1950 1951 1999 2000 2000 2100 2200 4400 4420 例 某地区的人口统计表 H(年度)=年度-1948 哈希表 例 30个地区的各民族人口统计表 编号 地区 总人口 汉族 回族…... 1 北京 2 上海 …... …... 以编号作关键字, 构造哈希函数:H(key)=key H(1)=1 H(2)=2 以地区作关键字,取地区 名称第一个拼音字母的序号 作哈希函数:H(Beijing)=2 H(Shanghai)=19 H(Shenyang)=19 哈希表——应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫哈希表。 哈希查找——又叫散列查找,利用哈希函数进行查找的过程叫哈希查找。 哈希表 哈希函数的构造方法 构造哈希函数的准则:使关键字经过哈希函数得到一个“随机的地址”,以便使一组关键字的哈希地址均匀地分布在逐个地址区间,从而减少冲突。 常用的构造方法: (1)直接定址法:取关键字或关键字的某个线性函数值为哈希地址,如年龄。 (2)数字分析法:假设关键字是以 r 为基的数,并且哈希表中可能出现的关键字都是事先知道的,则可取关键字的若干数位组成哈希地址 哈希表 常用的构造方法: (2)数字分析法:若事先知道关键字集合,且关键字的位数比哈希表的地址位数多,则可选取数字分布比较均匀的若干位作为散列地址。例如,有一组8位数字组成的关键字: 经过分析可知,前三位和第五位分布不均匀,所以,若表长为1000,则可取4、6、7位的数字作为哈希地址,若表长为100,则可取4、6与7、8位之和并舍去进位作为散列地址。 关键字 散列地址1 散列地址287107136 465 723 874 013 228 339 99 04 32 37 03 27 哈希表 (3)平方取中法:取关键字平方后的中间几位为哈希地址。 通常,要预先估计关键字的数字分布并不容易,要找数字均匀分布的位数更难。此时可采用平方取中法:即先通过求关键字的平方来扩大差别,再取其中的几位或其组合作为散列地址。 例如:一组关键字: (0100,0110,1010,1001,0111) 平方结果为: (0010000,0012100,1020100,1002001,0012321) 若表长为3位,则可取中间三位作为散列地址集: (100,121,201,020,123) 哈希表 (4)折叠法:若关键字位数较多,可将关键字分割成位数相同的几段(最后一段的位数可以不同),段的长度取决于哈希表的地址位数,然后将各段的迭加和(舍去进位)作为哈希地址。 例如,对于key=58242324169 582 423 241 + 69 [1]315 H(key)=315 移位迭加 582 324 241 + 96 [1]243 H(key)=243 间界迭加 哈希表 (5)除留余数法:选择一个适当的正整数P,用P

文档评论(0)

1亿VIP精品文档

相关文档