zoukankan      html  css  js  c++  java
  • STL之二分查找 (Binary search in STL)

    STL之二分查找 (Binary search in STL)

    Section I
    正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 
    本文是对Effective STL第45条的一个总结,阐述了各种查找算法的异同以及使用他们的时机。

    首先可供查找的算法大致有count,find,binary_search,lower_bound,upper_bound,equal_range。带有判别式的如count_if,find_if或者binary_search的派别式版本,其用法大致相同,不影响选择,所以不作考虑。
    注意这些查找算法需要序列式容器,或者数组。关联容器有相应的同名成员函数except binary_search。

    首先,选择查找算法时,区间是否排序是一个至关重要的因素。
    可以按是否需要排序区间分为两组:
     A. count,find
     B. binary_search,lower_bound,upper_bound,equal_range
    A组不需排序区间, B组需要排序区间。
    当一个区间被排序,优先选择B组,因为他们提供对数时间的效率。而A则是线性时间。

    另外A组B组所依赖的查找判断法则不同,A使用相等性法则(查找对象需要定义operator==), B使用等价性法则(查找对象需要定义operator<,必须在相等时返回false)。

    A组的区别
    count:计算对象区间中的数目。
    find:返回第一个对象的位置。
    查找成功的话,find会立即返回,count不会立即返回(直到查找完整个区间),此时find效率较高。
    因此除非是要计算对象的数目,否则不考虑count。

    B组的区别 {1,3,4,5,6}
    binary_search:判断是否存在某个对象
    lower_bound: 返回>=对象的第一个位置,lower_bound(2)=3, lower_bound(3)=3
     目标对象存在即为目标对象的位置,不存在则为后一个位置.
    upper_bound: 返回>对象的第一个位置, upper_bound(2)=3,upper_bound(3)=4

  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/a1225234/p/5064595.html
Copyright © 2011-2022 走看看