哈希表之四查找及分析

哈希表查找和哈希表的构造过程基本一致,见下图

哈希表插入和查询的例子(先省略)

(1)哈希表虽然建立了关键字和记录的存储位置之间的映射关系,但是由于冲突,导致是一个多对一的映射,

所以,哈希表的查找效率是平均查找长度;

(2)查找过程中徐鹤给定值进行比较的关键字的个数取决于三个因素:哈希函数,处理冲突的方法和装填因子

(3)一般情况下,处理冲突方法相同的哈希表,其平均查找长度依赖于哈希表的装填因子。

哈希表装填因子的定义:

表示哈希表的装填程度,越小,发生冲突的可能性就越小;反之越大,表示已填入的记录越多,发生冲突的可能性越大,

则查找时需要比较的关键字个数越多。

长度m,已填入的个数为n,哈希表的平均查找长度是的函数,而不是n的函数,所以不管n多大,总可以选择一个合适的

装填因子来将平均查找长度限制在一个范围内部。

需要注意的是,如果在非链地址处理冲突的哈希表中删除一个记录,则需要在该记录的位置上填入一个特殊符号,

以免找不到它之后填入的同义词记录。

对于预先知道且规模不大的关键字集,尽可能找到不发生冲突的哈希函数。

时间: 2024-11-05 06:55:34

哈希表之四查找及分析的相关文章

(转载)查找三 哈希表的查找

查找三 哈希表的查找 目录 要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash Table),也叫散列表. 以上描述,如果通过数学形式来描述就是: 若查找关键字为 key,则其值存放在 f(key) 的存储位置上.由此,不需比较便可直接取得所查记录. 注:哈希查找与线性表查找和树表查找最大的区别在于,不用数值比较. 冲突 若 key1 ≠ key2

查找三 哈希表的查找

要点 哈希表和哈希函数 在记录的存储位置和它的关键字之间是建立一个确定的对应关系(映射函数),使每个关键字和一个存储位置能唯一对应.这个映射函数称为哈希函数,根据这个原则建立的表称为哈希表(Hash Table),也叫散列表. 以上描述,如果通过数学形式来描述就是: 若查找关键字为 key,则其值存放在 f(key) 的存储位置上.由此,不需比较便可直接取得所查记录. 注:哈希查找与线性表查找和树表查找最大的区别在于,不用数值比较. 冲突 若 key1 ≠ key2 ,而 f(key1) = f

[LeetCode] #1# Two Sum : 数组/哈希表/二分查找

一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solutio

数据结构与算法分析:哈希表

以下是阅读了<算法导论>后,对哈希表的一些总结: 哈希表又叫散列表,是实现字典操作的一种有效数据结构.哈希表的查询效率极高,在没有冲突(后面会介绍)的情况下可做到一次存取便能得到所查记录,在理想情况下,查找一个元素的平均时间为O(1)(最差情况下散列表中查找一个元素的时间与链表中查找的时间相同:O(n),但实际情况中一般散列表的性能是比较好的). 哈希表就是描述key-value对的映射问题的数据结构,更详细的描述是:在记录的存储位置和它的关键字之间建立一个确定的对应关系h,使每个关键字与哈希

第七章 哈希表

上章回顾 常见的排序算法有哪些 其中那种算法的效率最高 对大量的数据进行排序的化最好使用那种排 序算法 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 第七章 第七章 哈希表 哈希表 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Al

哈希表详解

最近在做负荷分担的优化,将数据流均匀分到八条流中,学习点哈希算法 什么是哈希表?     哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表.说白了哈希表的原理其实就是通过空间换取时间的做法..     哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

一.哈希表 1.概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度.这个映射函数就做散列函数,存放记录的数组叫做散列表. 2.散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过散列函数H(k)计算出函数值,以该函数值作为一块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中. 3.哈希表查找的时间复杂度 哈希表存储的是键值对,其查找的时间复杂度与元素数

哈希表(HashMap)分析及实现(JAVA)

转自:http://www.java3z.com/cwbwebhome/article/article8/83560.html?id=4649 —————————————————————————————————————————————————————————————————— 探讨Hash表中的一些原理/概念,及根据这些原理/概念,自己设计一个用来存放/查找数据的Hash表,并且与JDK中的HashMap类进行比较. 我们分一下七个步骤来进行. 一. Hash表概念二 . Hash构造函数的方法

memcached源码分析-----哈希表基本操作以及扩容过程

        转载请注明出处:http://blog.csdn.net/luotuo44/article/details/42773231 温馨提示:本文用到了一些可以在启动memcached设置的全局变量.关于这些全局变量的含义可以参考<memcached启动参数详解>.对于这些全局变量,处理方式就像<如何阅读memcached源代码>所说的那样直接取其默认值. assoc.c文件里面的代码是构造一个哈希表.memcached快的一个原因是使用了哈希表.现在就来看一下memca