当前位置:C++技术网 > 资讯 > 数据结构笔记分享:20 散列表的简单介绍

数据结构笔记分享:20 散列表的简单介绍

更新时间:2015-12-02 20:29:04浏览次数:1+次

散列表定义:  将关键字值映射到表中的某个位置来存储元素。则通过给定的关键字值,可以直接计算得到元素的存储位置。

这个到底怎么实现的呢?

在元素的存储位置和关键字值之间建立一种对应关系h,把关键字值映射到表中的某个位置,即: h(key)=Loc(key)  Loc(key)表示关键字值为key的元素的存储地址。 因此,在理想状态下,可以不进行任何关键字值的比较,直接通过对应关系h找到该元素。这个就称为散列技术。

散列技术上面还有两个关键词。

散列函数:反映元素的关键字(key)与其存储位置(loc)之间的关系的函数(h),即 h(key)loc(key)

散列表(hash,哈希表):用散列函数建立起来的表。散列表是一种表示集合的数据结构。

下面给出一个散列技术的例子:


细心的读者可能发现这种储存方式会产生很大位置冲突。比如对H1:JIANGSHUJIANGXI等被映射到相同位置,对H2:SHANGHAISHANXI等被映射到相同位置产生冲突。

能否避免冲突呢?冲突与散列函数有关,冲突不可避免!

可以做到的是:

1、选择“好”的h,尽量减少冲突。

2、若发生冲突,如何处理?用冲突处理技术。

这里就要讲到“好”的散列函数:

 (1)均分布(元素经散列函数映象到散列表中的任何位置是等概率的),少冲突;

 (2)计算简便,快速。

后面的时间我会给大家介绍一下所谓的的散列函数。