• 浅谈查找算法


    可以分为7种查找算法:顺序查找、二分查找、插值查找、斐波那契查找、分块查找、二叉树查找法哈希查找

    a.顺序存储的顺序查找:其实就是在无序队伍中,逐个比较判断查找。时间复杂度是O(n)。

    b.顺序存储有序表查找有:前提都是有序顺序存储(排好顺序,内存连续)。

    折半查找(二分查找):最坏情况下,关键词比较次数为log2(n+1),且期望时间复杂度为O(log2n)

    插值查找:时间复杂度均为O(log2(log2n))。mid=low+(key-a[low])/(a[high]-a[low])*(high-low),根据关键字在整个有序表中所处的位置,让mid值的变化更靠近关键字key,这样也就间接地减少了比较次数。   对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好的多。反之,数组中如果分布非常不均匀,那么插值查找未必是很合适的选择。

    斐波那契查找:最坏情况下,时间复杂度为O(log2n),且其期望复杂度也为O(log2n)。

    c.线性索引查找稠密索引、分块索引(最坏的时间复杂度是n的开平方)、倒排索引.

    分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
      算法思想:将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……
      算法流程:
      step1 先选取各块中的最大关键字构成一个索引表;
      step2 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。

    d.链表存储的查找法:二叉树查找法

    二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树: 1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3)任意节点的左、右子树也分别为二叉查找树。 二叉查找树性质:对二叉查找树进行中序遍历,即可得到有序的数列。

    它和二分查找一样,插入和查找的时间复杂度均为O(logn),但是在最坏的情况下仍然会有O(n)的时间复杂度

    e.哈希(散列)查找:复杂度:对于无冲突的Hash表而言,查找复杂度为O(1)(注意,在查找之前我们需要构建相应的Hash表)。
     

  • 相关阅读:
    常用的全国快递物流查询api接口对接
    Linux C应用编程-1-文件IO
    【C++基础】9. 数组
    软件测试|Python Faker库使用指南
    【pytest】生成测试报告
    『Halcon与C#混合编程』004_窗体交互Drawing
    Vision China 2023(深圳)倒计时,51camera诚邀您莅临观展
    【SQL基础学习】----高级篇(1)
    SQL Server实战六:T-SQL、游标、存储过程的操作
    Plant Communications|高质量的基因组组装和泛基因组研究促进了绿豆的基因发现及其改进
  • 原文地址:https://blog.csdn.net/baidu_16370559/article/details/126268209