美文网首页
查找之有序表查找(十)

查找之有序表查找(十)

作者: WinkTink | 来源:发表于2019-07-27 18:36 被阅读0次

1. 二分查找(折半查找)

        它的前提是线性表中的记录必须是有序的,线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

1.1 代码实现

1.2 性能分析

        其时间复杂度是O(logn),不过由于折半查找的前提是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,这样的算法是比较好的。但是对于需要频繁插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,不建议使用。


2. 插值查找(按比例查找法)

        对于前面的折半查找,为啥一定要折一般,而不是1/4或者其他?比如:我们查字典Apple,我们会先从中间查找,还是有一定目的的向前找。或者在0-1000个数之间有200个元素从小到大均匀分布排序,我们若是需要查找到15,我们会去中间查找500,还是直接去前面开始查找。以上都说明我们上面的折半查找可以再进行改进。

        基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,插值查找也属于有序查找。

2.1 代码实现

2.2 性能分析

        而插值查找则比较灵活,并不是简单的从中间进行的,它是根据我们需要查询的值的渐进进行搜索的.插值查找的不同点在于每一次并不是从中间切分,而是根据离所求值的距离进行搜索的.

        对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好的多。反之,数组中如果分布非常不均匀,那么插值查找未必是很合适的选择。

        时间复杂度:平均情况O(loglog(n)),最坏O(log(n))


3. 斐波那契查找

        除了插值查找之外,我们再介绍一种有序查找,可以对折半进行优化,那就是斐波那契查找,利用了黄金分割原理来实现的

        斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。他要求开始表中记录的个数为某个斐波那契数小1,即n=F(k)-1;

越向后,每两个数之间相除越接近黄金比例

相关文章

  • 查找之有序表查找(十)

    1.二分查找(折半查找) 它的前提是线性表中的记录必须是有序的,线性表必须采用顺序存储。折半查找的基本思想是:在有...

  • 3种经典查找算法(Java)

    有序表查找##

  • 数据结构与算法-静态最优查找树

    静态最优查找树 当有序表中每个记录的查询概率相同时,用折半查找性能最优。当有序表的查找概率不等时,折半查找的概率未...

  • 重温数据结构_树表的查找

    线性表的查找的顺序查找和折半查找作为查找表的组织形式,其中折半查找效率较高。但由于折半查找要求表中记录按关键字有序...

  • 查找

    查找 framework 1 顺序 查找 适用: 线性表 思路: 逐个比较 2 二分查找 适用: 有序 顺序表...

  • 数据结构课程 第十二周 查找

    查找基本概念 线性表的查找 顺序查找(线性查找) 折半查找(二分或对分查找) 表中元素是有序的!(仅限于顺序存储结...

  • 查找算法-Python

    无序表查找 线性查找 O( n ) 适用于线性表的顺序存储结构和链式存储结构。 有序表查找 二分查找 Binary...

  • 查找

    折半查找(顺序表,数据有序排列) 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1...

  • 查找|有序表折半查找判定树|二叉排序树|3阶B-树

    1 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。 首先,长度为n的有序表折...

  • 数据结构--静态树表和索引顺序表的查找

    一、静态树表的查找对有序表的查找,如使用折半查找方法,是在“等概率”的前提下进行的,如果查找概率不一样,折半查找就...

网友评论

      本文标题:查找之有序表查找(十)

      本文链接:https://www.haomeiwen.com/subject/cprtrctx.html