持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情。
前言
前面将基本的数据结构介绍了一遍,像是线性表、树、图等等数据结构都是非常基本的知识,许多问题的底层思想就是基本数据结构的不同展现。现在我们需要了解新的知识——查找。
基本概念
说到查找就必须明白查找表的含义——由同一类型的数据元素(或记录)构成的集合。
查找就是查询(Searching)特定元素是否在表中
查找又分为静态查找(只查找,不改变集合内的数据元素)和动态查找(既查找,又改变集合内的数据元素)。还有一些概念与数据库知识相似,本身查找也是数据库的一种操作。
关键字 记录中某个数据项的值,可用来识别一个记录
评估查找方法优劣
评估查找方法的优劣有固定的评判标准——ASL
n——记录个数
Pi——查找第i个记录的查找概率(通常取等概率,即Pi =1/n)
Ci——找到第i个记录时所经历的比较次数
假设每一元素被查找的概率相同,则查找每一元素所需 的比较次数之总和再取平均,即为ASL。可以清楚的得出ASL值越小,时间效率越高。
静态查找表
顺序查找
又称线性查找,就是用逐一比较的办法 顺序查找关键字。
算法通过把待查关键字key存入表头或表尾,从后向前或从前向后逐个比较。
优点:算法简单,且对顺序结构或链表结构均适用。
缺点:ASL 太长,时间效率太低。
折半查找
先给数据排序(例如按升序排好),形成有序表,然后再将key与 正中元素相比,若比key小,则缩小至右半部内查找;再取其中值比较,每次缩小1/2的范围,直到查找成功或失败为止。这种方法是常用的方法,又称二分查找。