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

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

    按我的理解:

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

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

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

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

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

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

    常用哈希表

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

    1、线性哈希表

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


    2、随机哈希表

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


    3、溢出哈希表

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

    1)可能会造成新的冲突

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

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


    4、拉链哈希表

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

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


    5、指标哈希表

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

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

    好处就是省存储空间。


  • 相关阅读:
    winfrom 中datagridview中checkbox的使用方法
    转 webservice中参数类型为datatable,报错“生成 XML 文档时出错”
    Oracle将表空间改为自动扩展
    Oracle 动态建立分区表
    运用ASMIOSTAT脚本监控asm disk磁盘性能
    ASMCMD命令
    select * from salgrade for update和select * from salgrade for update nowait区别
    Oracle 10g Block Change Tracking特性
    分佈式事務故障處理暨ORA-24756: transaction does not exist處理
    shell test 數值 字符串 文件比較
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257868.html
Copyright © 2011-2022 走看看