• 查找(顺序、折半、分块)


    就平均查找长度而言,折半(二分)查找最小,分块查找次之,顺序查找最大。

    1、顺序查找

      a、基本概念:

       b、对无序线性表顺序查找,查找失败需要遍历整个线性表。  

        对有序线性表进行顺序查找,查找失败不需要遍历整个线性表。(因为在中间如果查找失败,剩下的部分就不需要再找了)。

      c、平均查找长度ASL:

       d、判定树(描述查找过程的二叉排序树) 

     

      e、在有序单链表上顺序查找和在无序顺序表或者有序顺序表上做顺序查找的平均查找长度相同,都是(n+1)/2。

     2、折半查找

      a、原理:

       b、查找的复杂度与对应的树的深度(层数)直接相关,折半查找的树更像是平衡二叉树,层数低,所以查找效率高。

       c、平均查找长度ASL:

     

       d、顺序查找适用于顺序存储和链式存储,序列有序无序皆可。

        折半查找只适用于顺序存储,而且序列一定有序。

      e、折半查找法在查找不成功时的比较次数最多为树的高度,即⌊log2n⌋+1或者⌈log2(n+1)⌉。

      f、折半查找判定树:

          实际上是一颗二叉排序树,它的中序序列是一个有序序列

          折半查找判定树的构建方法就是不断地寻找中间的mid结点,下面以一个例题展示:

     

     

     

      g、折半查找(二分查找)的推广:

        k分查找可以用k叉树来描述,在查找时进行比较的关键字的个数不超过树的深度,具有n个结点的k叉树深度为⌊logkn⌋+1,所以k分查找时和给定值进行比较的关键字个数至多为⌊logkn⌋+1,即时间复杂度为O(logkn),查找不成功同理,进行比较的关键字个数也是⌊logkn⌋+1,时间复杂度也是O(logkn)。

    3、分块查找

      a、基本概念:

     

     

       b、平均查找长度ASL:

  • 相关阅读:
    收藏文章
    Python __func__
    Python 可变对象 & 不可变对象
    Kafka SASL ACL配置踩坑总结
    C++ 传递动态内存
    负数取反,单目运算“-”的运算
    C++重载运算符的理解
    c++ 随机函数用法
    static变量
    路由汇聚及其相关计算
  • 原文地址:https://www.cnblogs.com/oaoa/p/13756870.html
Copyright © 2020-2023  润新知