前言
笔者以前对散列是什么?哈希又是什么?何谓散列表?散列函数又是个什么东东比较的迷惑。
通过看一些书,查找一些资料总算是有一些眉目了,现将相关的知识与体会记录下来。留待日后
的再学习!
基本概念
散列表(Hash table,也叫哈希表),是根据关键字(key value)而直接进行访问的数据结构。
说的具体点就是它通过吧key值映射到表中的一个位置来访问记录,从而加快查找的速度。
实现key值映射的函数就叫做散列函数
存放记录的数组就就叫做散列表
实现散列表的过程通常就称为散列(hashing),也就是常说的hash
散列
这里的散列的概念不仅限于数据结构了,在计算机科学领域中,散列-哈希是一种对信息的
处理方法,通过某种特定的函数/算法(散列函数/hash()方法)将要检索的项与用来检索的索引-
-( 散列值)关联起来,生成一种便于搜索的数据结构--散列表。
如今,由于散列算法所计算的散列值 具有不可逆(无法逆向演算会原来的数值)的性质,
因此散列算法广泛的运用于加密技术。
散列的运用:
1、加密散列
在信息安全领域使用
2、散列表
一种使用散列函数将键名和键值关联起来的数据结构
3、关联数组
一种常常使用散列表来实现的数据结构
4、几何散列
寻找相同或相似的几何形状的一种有效方法
散列函数
通过上面可以知道,散列技术的实现是基于散列函数的。这里对散列函数进行一个较深
入的理解。 前面就知道了散列函数--哈希函数就是完成key值与位置的映射。一般说来key
以字符 串的形式居多,位置也就是一个数值。
可以看出散列函数就像是实现信息的压缩,把消息字符 串压缩成数值摘要,是数据量
变小,格式得以固定下来。
散列函数的工作原理图:
不过需要注意的是key值和经过散列函数处理之后的散列值并不是唯一对应的,
这就造成了不同的key值具有相同的索引位置,这种现象叫做散列碰撞、也称其为哈希冲突。
对于hash冲突的解决办法,将在后面予以总结。