静态查找

72 阅读2分钟

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

前言

前面将基本的数据结构介绍了一遍,像是线性表、树、图等等数据结构都是非常基本的知识,许多问题的底层思想就是基本数据结构的不同展现。现在我们需要了解新的知识——查找。

基本概念

说到查找就必须明白查找表的含义——由同一类型的数据元素(或记录)构成的集合。

查找就是查询(Searching)特定元素是否在表中

查找又分为静态查找(只查找,不改变集合内的数据元素)和动态查找(既查找,又改变集合内的数据元素)。还有一些概念与数据库知识相似,本身查找也是数据库的一种操作。

关键字 记录中某个数据项的值,可用来识别一个记录

评估查找方法优劣

评估查找方法的优劣有固定的评判标准——ASL

image.png

n——记录个数

Pi——查找第i个记录的查找概率(通常取等概率,即Pi =1/n)

Ci——找到第i个记录时所经历的比较次数

假设每一元素被查找的概率相同,则查找每一元素所需 的比较次数之总和再取平均,即为ASL。可以清楚的得出ASL值越小,时间效率越高。

静态查找表

顺序查找

又称线性查找,就是用逐一比较的办法 顺序查找关键字。

算法通过把待查关键字key存入表头或表尾,从后向前或从前向后逐个比较。

优点:算法简单,且对顺序结构或链表结构均适用。

缺点:ASL 太长,时间效率太低。

折半查找

先给数据排序(例如按升序排好),形成有序表,然后再将key与 正中元素相比,若比key小,则缩小至右半部内查找;再取其中值比较,每次缩小1/2的范围,直到查找成功或失败为止。这种方法是常用的方法,又称二分查找。