• 浅谈查找算法


    可以分为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表)。
     

  • 相关阅读:
    【进制转换】
    将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
    解决跨越的几种方式
    统信UOS Linux操作系统下怎么删除某个程序在开始菜单或桌面的快捷方式
    python 2018全国自学考试第5章 第35题,求出了完整数但是没有达到题目的要求。继续修改,今天又有了另一个收获 排名21297
    哎,被这个叫做at least once的玩意坑麻了。
    2.24 OrCAD Cadence16.6怎么更改原理图中做好的库文件?
    蓝牙芯片|瑞萨和TI推出新蓝牙芯片,试试伦茨科技ST17H65蓝牙BLE5.2芯片
    19 【RTK Query】
    智达方通EPM,解决企业经营分析和管理难题
  • 原文地址:https://blog.csdn.net/baidu_16370559/article/details/126268209