关于哈希表和数据结构的一点随笔

1. 哈希法的概念或原理:

  思想是通过一定的手段以达到能通过关键字K直接找到存储以关键字为K的K-V键值对,这个手段就是哈希函数:(便于计算,地址分布均匀,冲突少),而构造出的结果是一张哈希表。

2. 哈希函数的构造方法:

1、直接寻址法
2、取模法
3、数字分析法
4、折叠法
5、平方取中法
6、除留余数法
7、随机数法
8、单旋转法

 3. 处理冲突的方法

原因:因为无论不同的构造哈希函数的方法是哪种,总会有机会出现不同的K映射到相同的地址上。

1、开放地址法:a.线性探测再散列 b.二次探测再散列 c.伪随机再散列
2、链地址法(拉链法)
3、再散列法(双重散列,多重散列)
4、建立一个公共溢出区
 

a) 开放地址法:

Hi=(H(key)+di) mod m,   其中H(key)为哈希函数,m为哈希表长,di为增量序列,

增量序列有以下取法:  

 (1): di=1,2,3,4....,m-1 称为线性探测再散列   ,冲突发生时就简单的顺序查看下一个相邻存储单元是否可用,重复该动作直到找到可用地址为止。

 (2): di=1^2 ,- 1^2,2^2,- 2^2,.....,k^2,-k^2(k<=m/2),称为二次探测再散列,冲突发生是进行左右跳跃式的查找可用存储单元,重复该动作直到找到可用存储单元为止。

 (3):di=伪随机数序列,称为随机探测再散列; 通过一个伪随机数发生器 给定一个随机数作为新的起点查找。

 三种再散列的方法比较:线性探测再散列的优点是:只要哈希表未满就一定能找到可用的存储单元,而二次探测再散列和伪随机数探测再散列未必。

线性探测再散列的缺点是:容易产生二次聚集(处理同义词的冲突时产生非同义词的冲突)。

扫描二维码关注公众号,回复: 2604875 查看本文章

对利用开放地址法处理冲突所产生的哈希表中删除一个元素,不能简单地直接删除,因为这样将截断其他具有相同哈希地址的元素的查找路径,所以应设定一个特殊的标志以表明该元素已被删除


  b)再散列法:

同时构造多个哈希函数Hi=RHi(key) i=1,2,3,...k


  优点:不容易产生地址的聚集,也就不容易产生冲突。


  缺点:增加计算时间。(要计算不同的哈希函数,当然在函数调用开销上,而且当


  选择的哈希函数性能不优或是不适合当前的数据特征时也是有延时的)。


  c)链地址法:

以地址为i的元素为例,当有同样的地址的元素出现时就构造一个以i为同义词的单链表,即就是将相同地址的元素链接成一个单链表然后将该单链表挂接在以i为存储单元的哈希表中。


  d)建立公共溢出区:

将基本表和溢出表分开,只要产生导致冲突的元素就直接存放到溢出表中。


 4. 哈希法的性能分析:

评价因素:平均查找长度ASL。
 影响因素:

1.哈希函数,

2.处理冲突的方法。

3.哈希表的装填因子:a = (哈希表元素个数)/(哈希表的长 度)。

5、数据结构

数据结构分为逻辑结构和物理结构

逻辑结构:

反应数据元素之间逻辑关系的数据结构 (元素之间的关系)

一般有线性结构(有序表)和非线性结构(集合,树形结构,图状结构)

物理结构:

是表现数据是如何存储的结构,用计算机语言来实现的结构,(元素存储位置间的关系)

通常为顺序结构(数组)、链式结构(链表)、索引结构(线索树)、哈希结构
 

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81427960