散列表

1.散列表

Hash表是一种支持高效的查找,插入,删除操作的数据结构,高效的设计目标是时间复杂度为O(1)

概念:

1. 散列函数:数据元素的关键字和该元素的存储位置之间的对应关系。
                由散列函数觉得存储位置的存储结构称为散列表。
                实质:关键字集合到地址集合到映射。
2.  冲突: 多个关键字 映射到 同一个存储位置;
                         
构造散列表的关键:如何减少冲突 以及 如何有效处理冲突

2.散列函数

好的散列函数的标准: 使散列地址均匀的分布在散列表中,尽量避免或减少冲突。

常用散列函数:
    1.  直接定址法;
    2.  除数取余法;
    3. 平方取中法;
    4.  折叠法:把关键字拆成几部分,按照某种约定把这几部分组合在一起;

3.冲突处理

1. 开放定址法:
    
    设计一个关键字key,散列地址为i=hash(k),若散列表中i的位置已经存储元素,则产生冲突,探测下一个i+1位置是否为空,若空,则存储该元素;否则继续探测下一个位置i+2,以此类推,直到找到一个空的位置。

缺点:使非同义词也产生冲突,并堆积在散列表的一段区域,极速降低查找效率。

2. 链址法

3. 线性探测再散列法

4. 二次线性再散列;

参考博客:
浅谈算法和数据结构: 十一 哈希表 http://www.cnblogs.com/yangecnu/p/Introduce-Hashtable.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念 散列技术: 在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f...
    liangxifeng833阅读 7,393评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,734评论 25 709
  • 散列表(也叫哈希表),是根据键而直接访问在内存存储位置的数据结构。在这篇文章中,我们将介绍散列表的基本原理。通过了...
    王聪帅阅读 8,209评论 0 7
  • Aristotle 1.The natural state of a body is to be at rest ...
    采铜青年阅读 968评论 0 0
  • 好久好久没写日记了。 这几天感冒接着咳嗽,陈睿好了又到我。白天在棠雅苑忙得焦头烂额,根本没时间歇息。吹着风扇整天头...
    清和简阅读 1,241评论 0 0