常见的搜索算法原理及其时间复杂度

常见的搜索算法原理及其时间复杂度

1.顺序查找:

  • 最基础的查找方法,对比每一个元素进行查找。在数据量很大的时候效率相当的慢。
  • 数据结构:有序或者无需的队列
  • 时间复杂度:O(n)

2.二分查找:

  • 二分查找首先要求数组有序
  • 每次查找从中间开始查找,比较查找对象和中间值,如果比中间值小,则去头到中间值的范围继续二分查找。如果比中间值大,则去中间值以后的数组进行二分查找。
  • 如果某一步骤数组为空,则表示没有此对象
  • 数据结构:有序数组
  • 时间复杂度:O(logN)

3.二叉树排序:

二叉排序树的特点是:

a.若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

b.若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

c.它的左、右子树也分别为二叉排序树。

搜索原理:

a.若b是空树,则搜索失败,否则:

b.若x等于b的根节点的数据域之值,则查找成功;否则:

c.若x小于b的根节点的数据域之值,则搜索左子树;否则:

d.查找右子树。

数据结构:二叉排序树
    时间复杂度: O(log2N)

4.哈希散列法(哈希表)

原理:先根据key值和哈希函数创建一个哈希表(散列表),然后根据键值,通过散列函数,定位数据元素位置。

数据结构:哈希表
    时间复杂度:几乎是O(1),取决于产生冲突的多少。

5.分块查找

分块查找又称索引顺序查找,它是顺序查找的一种改进方法。其算法思想是将n个数据元素”按块有序”划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须”按块有序”;即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,依次类推。

算法流程:

先选取各块中的最大关键字构成一个索引表;

查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。

这种搜索算法每一次比较都使搜索范围缩小一半。它们的查询速度就有了很大的提升,复杂度为。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值