zoukankan      html  css  js  c++  java
  • 查找

    ---

    顺序查找

    image-20210628201533371

    image-20210628201619015

    有序表的顺序查找

    如果事先知道表中关键字有序,则查找失败时,不用一直比较到表的另一端才能知道失败信息,从而降低顺序查找失败时的ASL

    image-20210628202608061

    对于n个关键字,查找失败共n+1种情况(对应n+1个区间),上式假设对于n个结点的查找概率相同,则相应的n+1个失败情况也等可能(p=1/(1+n))

    如果已知查找概率不等,另一种优化查找的方式是将被查概率大的关键字靠前放 ,从而提高查找成功的ASL(但这会破坏有序性,使得查找失败的ASL变大)

    image-20210628203236853

    小结

    无论如何优化,顺序查找的时间复杂度显然为O(n)

    image-20210628203525934

    折半查找

    (顺序表假设按升序排列)

    image-20210628210111056

    基于查找判定树的效率分析

    image-20210628210654524

    折半查找判定树的构造

    precondition:计算mid时向下取整,因此右子树结点一定大于等于左子树节点,且最多多 1

    image-20210628211709064

    构造时按照右优先添加结点

    image-20210628212036916

    不拿看出,折半查找的判定树还是一棵二叉排序树

    image-20210628212246795

    折半查找的效率为O(log(n))

    image-20210628212932776

    小结

    image-20210628213000485

    思考:如果mid使用向上取整呢?

    image-20210628213141151

    分块查找

    块内无序、块间有序

    i 个块中的最大关键字要小于第 i+1 个块中所有记录的关键字

    image-20210628214001668

    image-20210628213917323

    算法思想

    image-20210629183246188

    如果在步骤①中使用折半查找,那么现在欲查找关键字19,折半查找会因为找不到19而失败吗

    image-20210629183931777

    注意体会上图说述的原因:

    • 最终当 low>high 时,折半查找停止
    • 此时low的左边一定小于目标关键字
    • 而high的右边一定大于目标关键字
    • 又因为分块存储的特性,每个索引项中保存的是各个分块的最大关键字
    • 因此当折半查找停在 low>high 时,要到 low所指分块中去继续查找

    image-20210629184037533

    查找效率分析

    image-20210629185222900

    image-20210629190144615

    小结

    image-20210629191717431

    image-20210629191812628

  • 相关阅读:
    nodejs-supervisor
    javascript数组操作(创建、元素删除、数组的拷贝)
    mysql索引优化-order/group
    php-kafka
    大流量高并发解决方案
    MySQL数据类型和常用字段属性总结
    php一致性hash算法
    面试中的排序算法总结
    PHP的运行机制与原理(底层)
    Mysql中的锁机制
  • 原文地址:https://www.cnblogs.com/potofsalt/p/14951617.html
Copyright © 2011-2022 走看看