哈希查找表概念

106 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

前言

前面介绍的所有查找都是基于待查关键字与表中元素进行比较而实现的查找方法,查找的效率依赖于查找过程中所进行的比较次数。理想的情况是希望不经过任何比较,一次便能得到所查记录,这就需要使用哈希表。哈希表既是一种查找方法, 又是一种存储方法。

概念

哈希表即散列(Hash)存储结构

散列法存储通过建立关键字与其存储位置的对应关系进行存储,具有查找速度快、查找效率与元素个数无关的优点。

在学习前需要理解一些概念:

  1. 哈希函数 哈希方法中使用的转换函数称为哈希函数

  2. 冲突 通常关键字的集合比哈希地址集合大得多,因此经过哈希函数变换后,可能将不同的关键字映射到同一个哈希地址上,这种现象称为冲突

例子:

有6个元素的关键码分别为:(14,23,39,9,25,11)。 选取关键码与元素位置间的函数为H(k)=k mod 7,地址编号从0-6。

image.png

可以看出23与9,39、25与11有冲突。

问题提出

在哈希查找方法中,冲突是不可能避免的,只能尽可能减少。所以需要找到问题并尽可能解决。

有两个重要的问题:

  1. 构造好的哈希函数

(1)所选函数尽可能简单,以便提高转换速度

(2)所选函数对关键码计算出的地址,应在哈希地址集 中致均匀分布,以减少空间浪费

  1. 制定一个好的解决冲突的方案

查找时,如果从哈希函数计算出的地址中查不到关键码,则应当依据解决冲突的规则,有规律地查询其它相关单元

后记

今天学习了哈希表的一些基础知识,提出了构造好的哈希表需要解决的问题,明天继续进行解决。