c++Hash查找的入门知识(一)

查找的基本概念

1.静态查找
不涉及插入和删除操作的查找
2.动态查找
简单来说就是与静态查找相反,涉及插入和删除操作的查找,即在查找数据之后,对查找到的数据进行删除,或者若该数据不存在则进行插入。

查找算法的性能

我们知道查找的最基本的操作便是将关键码与给定的值进行比较,能以最少次数找到目标的算法则是性能最好的算法,一般我们使用ASL平均查找长度来评价算法。在这里插入图片描述

hash技术的介绍

应用hash技术设计查找算法的原理上很简单,其本质上就是一种特殊的一元函数,我们可以把我们要存放的数据看作自变量x,通过f(x)这个函数映射关系得出与该x唯一对应的y,这个y就是我们要保存x的位置,y与x是一一对应的,没有重复,这是一个严格单调的一元函数。

那我们为什么要设计这样一个函数呢?
为了提高查找效率。我们若已知要查找的数据,想知道该数据在哪一个位置,通过f(x)这个函数关系便可以立马查到该数据的存储位置,且用作一次运算,相比于线性查找、树的查找方便了很多

接下来我们看定义(本人学校(北邮)PPT上的)
理想情况下,通过hash技术我们可以在记录的存储位置和其关键码(上面提到的自变量x)之间建立一个确定的对应关系H,使得每个关键码key和唯一的一个存储位置H(key)对应。key是关键码,H(key)是存储位置。
这就是hash技术,采用hash技术将记录存储在一块连续的存储空间中,就是散列表。

hash过程

1.映射方法:将要存储的数据采用自己定义的H(key)映射方法一一映射到hash表中
比如H(key)=2key,则若key=1,则他应该被存储在2*1=2的位置,以此类推,存储数据。

2.查找方法:若你像查找值为key的数据在哪里,则可以用H(key)计算得出的值来确定该数据的位置。比如查找值为1的数据的存储位置(我们还是用1.中的那个映射关系并且已知该数据的存储位置是2),若我们用数组来顺序查找,则必须从下标为0的位置开始查找,需要查找三次才可以找到,而通过hash技术,我们只需要计算H(1)的值便可以找到,即只需要查找一次。

现在可能就有小伙伴会想hash技术这么方便,那它岂不是无敌了?其实不会,任何事物都有两面性,一方面好了,另一方面就会变坏,至于什么变坏了,下篇文章揭晓答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值