散列表概述(一) (未完)

224 阅读1分钟

散列表或哈希表是最常用的数据结构之一,对于开发者来说,了解其内部实现原理及应用是必不可少的。

笔者整理了一些哈希表的相关知识分享出来,欢迎大家指正。 本系列文章分为三篇文章。第一篇讲述一些常用的哈希函数;第二篇讲述一些常用的解决哈希冲突的方法;第三篇,则会讲解哈希表的实现和应用。

一、散列表定义

在以内存为核心的冯诺依曼体系的计算机中,CPU通过在内存中寻址、取值从而拿到操作数和操作指令。通过寻址的方式去找到内存中存储的数据是最为快速、高效的。而数组之所以能够实现随机存取,就是通过寻址来实现的。 那么能否有这样一种数据结构,它能像数组一样利用到直接寻址的优势,快速定位到数据的位置呢。或者说如何将数组扩展为一个字典,通过一个关键字可以快速定位到对应的值。事实上,在PHP等语言的语法中,字典或哈希表正是一种特殊的数组,只是这个数组的下标可以是一个对象。 散列表就是这样一种数据结构,它通过一组关键字通过计算后能够映射到指定的内存的地址上,通过这个内存地址,我们能够实现数据的快速存取。

二、散列函数

2.1 除法散列

2.2 乘法散列

2.4 全域散列

2.5 其他散列函数