zoukankan      html  css  js  c++  java
  • Hash Table(哈希表)

    数据结构--Hash Table(哈希表)
    一、基本概念
    哈希表(Hash Table,也叫散列表)定义:哈希表是一种根据关键码去寻找值的数据映射结构。它通过把关键码值
    映射到表中的一个位置来访问记录。哈希表是一个数组。
    哈希函数(映射函数):index = H(key),通过传递key值映射出位置。

    二、Hash Table大小的确定
    Hash Table大小的确定也非常关键,如果Hash表的空间远远大于最后实际存储的记录个数,则造成了很大的空间浪
    费,如果选取小了的话,则容易造成冲突。在实际情况中,一般需要根据最终记录存储个数和关键字的分布特点来
    确定Hash表的大小。还有一种情况是可能事先不知道最终需要存储的记录个数,则需要动态维护Hash表的容量,
    此时可能需要重新计算Hash地址。
    装载因子:指所有关键字填充哈希表后饱和的程度,它等于装填因子(T)=关键字总数(N)/哈希表的长度(L),T=N/L

    三、哈希冲突以及解决办法
    哈希冲突:可能传递不一样的key值时候产生相同的结果,即:H(key1) = H(key2)
    哈希冲突的解决办法:
    (1)开放定址法。这个可以分三种
    Hi = (H(key) + Di) MOD M,(i = 1,2,3...k)(k<=m-1),其中m为表长,Di为增量序列
    a.线性探测再散列,Di可能为1,2,3,4...m-1
    b.二次探测再散列,Di的取值可能为1,-1,2,-2,4,-4....k^2,-k^2(k<=m/2)
    c.随机探测再散列。Di取值为伪随机探测再散列。
    (2)链地址法。原理是如果遇到冲突,它就会在原地址新建一个空间,然后以链表结点的形式插入到该空间。

    (3)再散列法。准备若干个hash函数,如果使用第一个hash函数发生了冲突,就使用第二个hash函数,第二个也
    冲突,使用第三个....


    四、Hash Table的查找
    查找过程和造表过程一致,假设采用开放定址法处理冲突,则查找过程为:
    对于给定的key,计算hash地址index = H(key)
    如果数组arr[index]的值为空 则查找不成功
    如果数组arr[index]== key 则查找成功
    否则 使用冲突解决方法求下一个地址,直到arr[index]== key或者 arr[index] ==null

    五、Hash Table的删除
    首先链地址法是可以直接删除元素的,但是开放定址法是不行的,拿前面的双探测再散列来说,假如我们删除了
    元素1,将其位置置空,那 23就永远找不到了。正确做法应该是删除之后置入一个原来不存在的数据,比如-1。

     六、Hash Table的应用

    a.Hash主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做
    Hash值. 也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。

    b.查找:哈希表,又称为散列,是一种更加快捷的查找技术。我们之前的查找,都是这样一种思路:集合中拿
    出来一个元素,看看是否与我们要找的相等,如果不等,缩小范围,继续查找。而哈希表是完全另外一种思路:
    当我知道key值以后,我就可以直接计算出这个元素在集合中的位置,根本不需要一次又一次的查找!

    举一个例子,假如我的数组A中,第i个元素里面装的key就是i,那么数字3肯定是在第3个位置,数字10肯定是在
    第10个位置。哈希表就是利用利用这种基本的思想,建立一个从key到位置的函数,然后进行直接计算查找。

    c.Hash表在海量数据处理中有着广泛应用。

    参考:https://www.cnblogs.com/s-b-b/p/6208565.html

    https://www.cnblogs.com/lchzls/p/6714079.html

    https://blog.csdn.net/yyyljw/article/details/80903391

    https://blog.csdn.net/u011109881/article/details/80379505

  • 相关阅读:
    1、Python的初识与简介
    解密解密
    python看是32位还是64
    linux实战一段,安装python3(centos)
    前段技巧
    django后端safe和前端safe的方法
    测试
    python小知识整理
    ajax格式
    111
  • 原文地址:https://www.cnblogs.com/boldness2012/p/12922365.html
Copyright © 2011-2022 走看看