首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

数据结构-Hash

2012-12-21 
数据结构-----Hash数据结构之Hash表?一.数据结构概念数据结构是计算机存储,组织数据的方式.? ? ? 包括三个

数据结构-----Hash

数据结构之Hash表

?

一.数据结构概念

数据结构是计算机存储,组织数据的方式.

? ? ? 包括三个组成部分: 数据的逻辑结构 ,数据的存储结构 ,数据运算结构?

? 就个人理解,数据结构就是存储数据的容器,简单的数组显然不能适应大量数据存储,查找等功能的实现。因此,合理,高效,也就是空间和时间效率都必须高效,也就成了计算机人员所研究的重点对象。

? 接下来,就简单介绍Hash表作为一种数据结构的原理,具体代码实现.

?

二.Hash原理

?

1.数组,链表 , 数等数据结构有一个共同点:数据的位置和其关键字之间不存在一个确定关系,它们之间的区别仅在于:关键字和给定值比较的顺序不同.


? 2.将数据位置和关键字联系----以Hash(key) 函数计算key在表中的位置.

? 接下来我将以除留余数法---H(key)=key MOD p(p<m) ?(m为表长) 示例讲解Hash表的构成。

?

? 3.冲突.

? 可以想象,数据数量一旦增多,必然发生不同key值通过Hash函数计算的地址值相同的情况,我们称这种情况成为——冲突。

? 为解决冲突,即为产生冲突的关键字寻找下一个哈希地址,可以采取多种方法:

(开放定址法 , 再Hash法 ,链地址法 等)

? 此时,我选择最后一种方法来讲解,其余的方法读者有兴趣课自行找寻资料进行学习.


? 4.链地址法——结合数组和链表,即通过Hash函数计算得到相同地址的元素链在第一个元素的后面。此时,存储形式就是一个个节点了,包括数据的Key值和指针域。

?

? ? 5.数据结构的用途就是实现对数据的操作:增----删----查----改 ,效率当然越高越好.

? ? ? 就我们所知的:

? 数组查找方便,通过下表可直接定位,但增,删的效率较慢,因为改变的代价是其他数据也要进行相应的移动。

? ? ?链表在插入,删除等操作上显然体现了其优势,因为只用改变数据链域中的指向即可。但链表的查找操作却仍是需要逐一遍历,效率较低。

Hash的结构很容易解释其平衡查找和删除插入操作的效率问题

? 6.阀值.

首先,Hash表仍是以数组为基础的,即数组大小初始就要设定且不能改变,当我们无法预知数据总量时,无法准确估计数组大小。若数组初始设定的过大,则浪费内存,若太小,则会出现数组下的链表过长,甚至长于数组的长度,此时,查找效率明显降低。

为解决这个问题,我们需要设定一个阀值,用作控制平衡的量度.

此时,我设定的阀值的是:某一条链上的节点总数和数组大小的比值。这这是个数值,更是个规则。建设Hash表过程中,不能超过这个规则的设定。一旦超过,则需要ReHash。

?

? 7.ReHash

用更大的数组重新计算地址,并按照上述规则建设Hash表,直至满足阀值的要求。

?

三.代码实现

?

?

?

?

运行结果如下:

?

?写道

................

第1917个位置
7677 3837 7677 1917 9597 5757 1917 3837 3837 1917 1917 3837 3837 9597 3837 3837 9597 1917 9597 5757 1917 5757 3837 1917 5757 9597 3837 5757 3837 9597 9597 7677 1917 3837 5757 5757 3837 3837 1917 5757 3837 5757 3837 0
第1918个位置
1918 3838 1918 9598 1918 9598 5758 7678 3838 1918 5758 5758 7678 9598 7678 1918 3838 5758 5758 5758 1918 9598 5758 1918 3838 3838 9598 7678 9598 1918 1918 7678 9598 1918 1918 9598 5758 3838 5758 3838 5758 1918 1918 1918 1918 3838 7678 3838 1918 0
第1919个位置
9599 1919 5759 1919 1919 7679 3839 3839 7679 5759 7679 3839 5759 3839 9599 3839 5759 5759 1919 9599 7679 3839 3839 5759 5759 5759 1919 1919 9599 5759 9599 9599 7679 3839 3839 9599 9599 5759 1919 3839 0
实现Hash创建所用时间为:6827
实现Hash搜索所用时间为:1394
?

?

?

热点排行