c/c++:STL之Binary search
STL之Binary search
http://www.cppblog.com/patriking/archive/2011/01/16/138617.html
STL中对于有序序列(vector,list等)提供了相当相当强大的二分搜索Binary search算法。对于可以随机访问容器(如vector等),binary search负载度为对数级别(LogN),对于非随机访问容器(如list),则算法复杂度为线性。现在简要介绍一下几种常用的binary search算法:
ForwardIterator lower_bound (ForwardIterator first,ForwardIterator last, const T& value)
ForwardIterator lower_bound (ForwardIterator first,ForwardIterator last, const T& value, Compare comp)
//查找最远的一个iterator i, 使得[first,i)里面的任意一个iterator j,有 *j < value or comp(*j,value)==true.
ForwardIterator upper_bound (ForwardIterator first,ForwardIterator last, const T& value)
ForwardIterator upper_bound (ForwardIterator first,ForwardIterator last, const T& value, Compare comp)
//查找最远的一个iterator i, 使得[first,i)里面的任意一个iterator j,有 !(*j < value) or comp(*j,value)==false.
pair equal_range(ForwardIterator first, ForwardIterator last, const T& value)
pair equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
//查找最大的subrange[i,j),使得任意一个iterator in [i,j)满足!(*k<value) && !(value<*k) or comp(*k,value)==false && comp(value,*k)==false.
bool binary_search (ForwardIterator first, ForwardIterator last, const T& value)
bool binary_search (ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
// 查找是否在[first,last)中存在iterator i,满足 !(*i<value) && !(value<*i) or comp(*i,value)==false && comp(value,*i)==false
// 存在则返回true,否则返回false.
#include<algorithm> #include<iostream> #include<vector> #include<iterator> using namespace std; int main() {vector<int>v;vector<int>::iterator itr;pair< vector<int>::iterator, vector<int>::iterator >vecpair;for(int i = 1; i <= 20; i++){v.push_back(i%6);}sort(v.begin(),v.end());cout << "array: " << endl << " ";copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));cout << endl;//lower_boundcout << "lower_bound function, value = 3:" << endl; itr = lower_bound(v.begin(),v.end(),3);cout << " [first, itr) = ";copy(v.begin(),itr,ostream_iterator<int>(cout," "));cout << endl;cout << " [itr, last) = ";copy(itr,v.end(),ostream_iterator<int>(cout," "));cout << endl << endl;// upper_boundcout << "upper_bound function, value = 3:" << endl; itr = upper_bound(v.begin(),v.end(),3);cout << " [first, itr) = ";copy(v.begin(),itr,ostream_iterator<int>(cout," "));cout << endl;cout << " [itr, last) = ";copy(itr,v.end(),ostream_iterator<int>(cout," "));cout << endl << endl;// equal_rangecout << "equal_range function, value = 3:" << endl; vecpair = equal_range(v.begin(),v.end(),3);cout << " [vecpair->first, vecpair->second) = ";copy(vecpair.first, vecpair.second, ostream_iterator<int>(cout," "));cout << endl << endl;//binary_search, value = 3cout << "binary_search function, value = 3:" << endl;cout << "3 is " << (binary_search(v.begin(),v.end(),3) ? "":"not ") << "in array." << endl;cout << endl;//binary_search, value = 6cout << "binary_search function, value = 6:" << endl;cout << "6 is " << (binary_search(v.begin(),v.end(),6) ? "":"not ") << "in array." << endl;cout << endl;return 0; }
array:0 0 0 1 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 5 lower_bound function, value = 3:[first, itr) = 0 0 0 1 1 1 1 2 2 2 2[itr, last) = 3 3 3 4 4 4 5 5 5upper_bound function, value = 3:[first, itr) = 0 0 0 1 1 1 1 2 2 2 2 3 3 3[itr, last) = 4 4 4 5 5 5equal_range function, value = 3:[vecpair->first, vecpair->second) = 3 3 3binary_search function, value = 3: 3 is in array.binary_search function, value = 6: 6 is not in array.
转载于:https://www.cnblogs.com/Azhu/articles/3898962.html
c/c++:STL之Binary search相关推荐
- 1043 Is It a Binary Search Tree(二叉查找树BST)
1043 Is It a Binary Search Tree 0.题目 A Binary Search Tree (BST) is recursively defined as a binary t ...
- 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)
议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...
- 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结
动态管理集合的数据结构--二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列. 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树. (1)若它 ...
- 二叉搜索树(binary search tree)的建立、删除、查找
由于输入的数据顺序不同,建立的bst会不一样.最坏的情况就是一个链,所以我们引入了平衡二叉树的概念.这里我们先来看binary search tree.(我随笔里面有一些相关知识) 建立(也就是插入) ...
- 查找二叉树中出现次数最多的数 Find Mode in Binary Search Tree
为什么80%的码农都做不了架构师?>>> 问题: Given a binary search tree (BST) with duplicates, find all the ...
- LeetCode 98. Validate Binary Search Tree--C++解法--判断是否是BST--递归,迭代做法,中序遍历
LeetCode 98. Validate Binary Search Tree–C++解法–判断是否是BST–递归,迭代做法,中序遍历 LeetCode题解专栏:LeetCode题解 LeetCod ...
- LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法
题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...
- LeetCode: 109. Convert Sorted List to Binary Search Tree
题目 Given a singly linked list where elements are sorted in ascending order, convert it to a height b ...
- [LeetCode]: 96: Unique Binary Search Trees
题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For e ...
最新文章
- usaco Canada Tour
- python对话框机制_Chromium 新的弹窗机制以及 HTML 的 dialog 元素
- diffpatch升级_Linux diff创建补丁以及patch打补丁
- d3.js 制作简单的俄罗斯方块
- 飞畅科技-工业以太网交换机市场发展情况介绍
- 极乐科技CEO应邀出席2017微信小程序生态课
- OpenSSL编写SSL,TLS程序
- Android 存储路径浅析
- python日期选择框_Python的Django框架中设置日期和字段可选的方法
- [matlab]元胞数组(使用cellplot显示元胞数组)
- 用脚本运行Modelsim教程
- ui自动化html模板,webui 自动化 (utx+unitest+HTMLTestRunner_cn)
- 服务器托管费用一般是多少
- mac 打开网页慢_老Mac电脑打开网页慢怎么办
- DOORS和Reqtify — 需求管理和需求追溯工具
- 软件开发的12大定律,你是否使用了呢
- audio 静音标签
- Web开发技术的演变
- js之 实现浏览器下载图片保存到本地
- putty使用方法~SSH等
热门文章
- c语言心形编程代码_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
- mysql 7 for windows_Mysql 5.7 for windows 免安装版(解压版)安装和配置
- 全国计算机二级考试c语言指针,全国计算机等级考试二级C语言指针检测试题.doc...
- php clearinterval,JavaScript定时函数(2)setInterval与clearInterval
- impala java api 操作_Impala实践之六:使用Rest Api
- 二位四进制计数器_金三银四还在看JVM这一块?看完这篇万字JVM面试解析就够了...
- gis导出栅格数据为什么不能tif_GIS基础操作教程(3)--点数据操作【附带练习数据】...
- matlabapp窗口图像_如何在一个matlab窗口上合并两个图像?
- 精通lambda表达式:java多核编程_Java8 Lambda表达式和流操作如何让你的代码变慢5倍...
- 组播vlan_【参与方式】耗时10小时编撰(下)带你轻松通关组播知识点!