数据结构检索(查找)之入土攻略(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wydyd110/article/details/82113893

目录

 

1 检索的基本概念

2 线性表的检索

2.1 顺序检索

2.2 二分检索

2.3 分块检索

3 集合的检索


1 检索的基本概念

度娘作为中国最牛的中文搜索引擎,各种问题在其中都会找到答案,其中不乏一些辣眼的奇葩提问。

不好意思,以上在扯犊子。

搜索引擎是检索的典型应用,当我们在搜索引擎上输入一个关键字,点击“搜索”按钮时,搜索引擎会带着关键字奔向索引数据库,检索到所有包含搜索词的网页,并依据它们的浏览次数与关联性等一系列算法确定网页级别,排列出顺序,最终以网页的形式显示给用户。

检索(查找):在一组记录集合中找到关键码值等于给定值的某个记录,或者找到关键码值符合特定条件的某些记录的过程。

提高检索效率的方法:

2 线性表的检索

2.1 顺序检索

(来源于《大话数据结构》)

上述图书尽管已经排列整齐,但还没有分类,因此我们要找书,只能从头到尾从尾到头一本一本地查看,直到找到或全部查找完为止。这就是顺序检索。

顺序检索:针对线性表里的所有记录,逐个进行关键码和给定值的比较。
–若某个记录的关键码和给定值比较相等,则检索成功
–否则检索失败(找遍了仍找不到)

查找成功:最好的情况就是在第一个位置就找到了,比较1次,时间复杂度为O(1),最坏的情况是在最后一位才找到,需要比较n次,时间复杂度为O(n)

ASL = (1 + 2 + ......+ n) = (1+n)n/2n = (1+n)/2

查找失败:需要比较n+1次(设置了一个监视哨)

ASL = (n+1)n/n = n+1

(p取1或0)

顺序检索的优缺点:

优点:插入元素可以直接加在表尾 Θ(1)

缺点:检索时间太长 Θ(n)

2.2 二分检索

将上述图书排列整齐后,还按照书名拼音的首字母排序放置,也就是对图书做了有序排列,这样利于查找。

二分检索(折半查找):元素必须是有序的,必须采用顺序存储。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若小于中间结点的关键字,则在中间结点的左半区继续查找;若大于中间结点的关键字,则在中间结点的右半区继续查找。

折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找能得到不错的效率。但对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。

2.3 分块检索

  分块检索原理与稀疏索引(分块索引)类似,可参考

《数据结构索引之杀死攻略(一)》:https://blog.csdn.net/wydyd110/article/details/81904483

分块检索的优缺点:

优点:插入删除相对容易,没有大量记录移动

缺点:增加一个辅助数组的存储空间
          – 初始线性表分块排序
          – 当大量插入/删除时,或结点分布不均匀时,速度下降

3 集合的检索

集合(set):由若干个确定的、相异的对象(element)构成的整体
集合的检索:确定一个值是不是某个集合的元素

  集合的检索的原理与位图索引类似,可参考:

《数据结构索引之杀死攻略(三)》:https://blog.csdn.net/wydyd110/article/details/82012960

仿佛检索的知识点到此就结束了,然而

下面跳转至《数据结构检索(查找)之入土攻略(二)》:https://blog.csdn.net/wydyd110/article/details/82144549

猜你喜欢

转载自blog.csdn.net/wydyd110/article/details/82113893