zoukankan      html  css  js  c++  java
  • 哈希表

    哈希,hash,也叫散列,杂凑。

    按我的理解:

    散列函数,就是对于指定的值,经过这个函数计算,可以得到一个结果。

    哈希表,就是这么一个表:将数据存放在按照散列函数计算结果位置上,或者发现该位置已被占用,即有冲突的情况下,按照一定规则,制止找到一个新位置存放为止。那么反过来,利用这个哈希表,给出指定值,按照散列函数和规则,就能找到存放于其中的数据。

    所以说,哈希表就是用来加快查找的一种表。是一种专门用来处理数据有冲突的一种表。

    因此,哈希表最适合用在高并发的场合。

    以前读书的时候,有教《数据结构》,但根本不清楚为什么要搞这么个哈希表。工作以后,也时不时撞见哈希哈希什么的,但还是不理解。都说IT从业门槛低,别的专业,甚至上几天培训班的也来跟我们计算机专业出身的抢饭吃,而且还很抢得很凶。一方面说明计算机技术是比较简单的技术,只要是个人,自学几天就能上手;另一方面,是我这种资质平庸又不争气的计算机专业学生读书不求甚解的报应。学计算机,应该努力弄清楚原理,否则很容易在五花八门,一日千里的各种技术中疲于奔命。

    所以,工作十几年以后,我居然回头重新学习数据结构。

    常用哈希表

    哈希表的关键技术之一就是要处理好元素的冲突,采用不同的冲突处理方法就可以得到不同的哈希表。

    1、线性哈希表

    最简单的一种哈希表。当冲突发生时,后来者循原本应在位置向前+1,直至找到一个空位置。


    2、随机哈希表

    当冲突发生时,后来者随机找到新位置


    3、溢出哈希表

    线性哈希表和随机哈希表有两个致命缺点:

    1)可能会造成新的冲突

    2)哈希表填满后不能再正常处理

    而溢出哈希表包括哈希表和溢出表两部分。在哈希表填入过程中,如果有冲突,就将冲突的后来者填入溢出表。这样就避免了因为要处理冲突而产生新的冲突。


    4、拉链哈希表

    每个元素并不存储元素值本身,而是指针。有冲突的位置,会跟着一串争夺这个位置的链表。

    分为外链哈希表和内链哈希表


    5、指标哈希表

    包括指标表和内容表两部分。

    指标表就是个哈希表,可以是上述任意类型,但存储的是元素在内容表中的指针。元素存储在内容表中。

    好处就是省存储空间。


  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257868.html
Copyright © 2011-2022 走看看