zoukankan      html  css  js  c++  java
  • 数据结构之查找-哈希查找

    哈希法(计算式查找)

    哈希法又称散列法、杂凑发、关键字地址计算法,相应的表成为哈希表、散列表等。

    哈希法的基本思想:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,是的p=H(k),H成为哈希函数。

    五个因素:①计算哈希函数所需的时间。②关键字长度。③哈希表的大小。④关键字分布情况。⑤记录查找的频率。

    哈希函数的构造方法

    构造哈希函数原则:一是函数本身便于计算;二是计算出来的地址分布均匀。

    1、数字分析法:事先要知道关键字集合,并且每个关键字的位数比哈希表的地址为数多时,可以从关键字中选出分布均匀的若干位构成哈希地址。

    2、平方取中法:当无法确定关键字中那几位分布较均匀时,可以先求出关键字的平方值,然后取平方值中间的几位作为哈希地址。

    3、分段叠加法:按哈希表地址为数将关键字分成位数相等的几部分,然后将这几部分相加,舍弃最高进位后的结果就是该关键字的哈希地址。

    4、除留余数法:假设哈希表的长度为m,p为小于等于m的最大素数,则哈希函数为其中,%的模p为取余运算。

    5、伪随机数法:采用一个为随机函数作为哈希函数,即H(key)=random(key)

    处理冲突的方法

    通过构造性能良好的哈希函数,可以减少冲突,但一般不节能完全避免冲突,因此解决冲突时哈希法的另一个关键技术。

    1、开放定址法:这种方法也成再散列法,其基本思想是当关键字key的初始哈希地址出现冲突时,以$h_0$
    为基础产生另一个地址$h_1$如果仍然冲突,再以
    $h_0$为基础,产生地址,直到不冲突地址
    $h_i$将相应元素存入。

    2、在哈希法:这种方法的基本思想是同时构造多个不同的哈希函数:
    $H_i = RH_i(key) i=1,2,3...,k$
    当哈希地址$H_1 = RH_1(key)$冲突时,在计算$H_2 = RH_2(key)$直到冲突不在产生。这种方法不易产生聚集,但增加了计算时间。

    3、链地址法:这种方法的基本思想是将所有的哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入、删除、主要在同义词链中进行。

    4、建立公共溢出区:这种方法的基本思想是将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素一律填入溢出表。

    哈希表的查找过程

    ①首先计算 $h_0 = hash(K)$;

    ②如果单元$h_0$为空,则所查元素不存在;

    ③如果单元$h_0$中元素的关键字为K,则查找到所查元素。

    ④否则重复下述解决冲突的过程:

    a、按解决冲突的方法,找出下一个哈希地址$h_i$;

    b、如果单元$h_i$为空,则所查元素不存在;

    c、如果单元$h_i$中元素的关键字为K,则查找到所查元素。

  • 相关阅读:
    即将随便
    windows编程中的文件操作整理(一)
    输入输出总结
    _free 已经在 LIBCD.lib(dbgheap.obj) 中定义
    windows环境变量大全
    unity 3D学习备忘一(音频方面碰到的一些注意事项)
    unity 3D学习备忘二(unity 3D的脚本调试)
    windows编程中的文件操作整理(二)
    windows编程中的I/O系统整理
    暴雪游戏设计11大法则
  • 原文地址:https://www.cnblogs.com/Leon-The-Professional/p/9950101.html
Copyright © 2011-2022 走看看