【数据结构】哈希表 Hash Table

原创 2013年12月05日 17:23:22

1. Hash Table的定义

在线性表,树等数据结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。查找的效率依赖于查找过程中所进行的比较次数。

理想的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此,不需要进行比较便可以直接取得所查记录.这个对应关系f为哈希(Hash)函数.

哈希函数是一个映像,只要使得任何关键字由此所得的的哈希函数值都落在表长允许范围之内即可.

另外,对于不同的关键字可能得到同一个哈希地址,这种现象称为冲突.一般情况下,冲突只能尽可能地少,而不能完全避免.因此,在建立哈希表时不仅要设定一个好的哈希函数,而且要设定一种处理冲突的方法.

根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的"像"作为记录在表中的存储位置,这种表便成为哈希表,这一映像过程成为散列,所得存储位置称为哈希地址或散列地址。


2. 哈希函数的构造方法


3. 处理冲突的方法

3.1. 链地址法

将关键字为同义词的记录存储在同一个线性链表中,



Hash Table的特点及引用

Hash Table是一种高效的数据结构,其高效主要体现在把数据的存储和查找的时间大大降低,几乎可以看成是常数时间,而代价是消耗较多的内存。

  • 统计值出现的次数/频率


数据结构基础-Hash Table详解

理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素...

数据结构—散列表(Hash table,也叫哈希表)

散列表(Hash table,也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)的比较操作。 ...

数据结构基础(18) --哈希表的设计与实现

哈希表    根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的、地址连续的地址集 (区间) 上,并以关键字在地址集中的“映像”作为相应记录在表中的存储位置,如此构...

C语言实现的数据结构之------哈希表

1 哈希表原理这里不讲高深理论,只说直观感受。哈希表的目的就是为了根据数据的部分内容(关键字),直接计算出存放完整数据的内存地址。试想一下,如果从链表中根据关键字查找一个元素,那么就需要遍历才能得到这...
  • smstong
  • smstong
  • 2016年04月13日 19:27
  • 15688

数据结构HASH总结一:理论学习篇

数据结构HASH总结一:理论学习篇  数据结构HASH总结二:程序学习篇 数据结构HASH总结三:实践基础篇 数据结构HASH总结四:程序高级篇 数据结构HASH总结五:Ngi...

【c++/数据结构】哈希表

哈希表哈希表(HashTable)又叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散...
  • LLZK_
  • LLZK_
  • 2016年11月06日 14:19
  • 768

数据结构例程——哈希表及其运算的实现

本文是[数据结构基础系列(8):查找]中第11课时[哈希表——散列结构]和第12课时[哈希表的运算]的例程。#include #define MaxSize 100 //定义最大哈希...

数据结构与算法分析:哈希表

哈希表又叫散列表,是实现字典操作的一种有效数据结构。哈希表的查询效率极高,在没有冲突(后面会介绍)的情况下可做到一次存取便能得到所查记录,在理想情况下,查找一个元素的平均时间为O(1)(最差情况下散列...

数据结构 课设一:停车场管理

停车场管理 【问题描述】             设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供    汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向    南排列(大门在最...

ELFhash - 优秀的字符串哈希算法

1.字符串哈希: 我们先从字符串哈希说起 在很多的情况下,我们有可能会获得大量的字符串,每个字符串有可能重复也有可能不重复 C不像Python有字典类型的数据结构,我们没有办法吧字符串当做是键值来保存...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构】哈希表 Hash Table
举报原因:
原因补充:

(最多只允许输入30个字)