【STL源码剖析读书笔记】【第6章】算法之next_permutation和prev_permutation算法
来源:互联网 发布:js 遍历json数据 编辑:程序博客网 时间:2024/06/06 07:37
1、next_permutation()会取得[first, last)所标示序列的下一个排列组合,如果没有下一个排列组合,返回false,否则返回true。
2、next_permutation()函数算法原理:从最尾端开始寻找两个相邻的元素,令第一个元素是*i,第二个元素是*ii,且满足*i < *ii,找到这样一组元素后,再从尾端开始往前找出第一个大于*i的元素*j,将i、j元素对调,然后将ii之后的所有元素逆序排列,就得到了下一个组合。
3、next_permutation()源代码
template <class BidirectionalIterator>bool next_permutation(BidirectionalIterator first,BidirectionalIterator last) {if (first == last) return false; //空区间BidirectionalIterator i = first;++i;if (i == last) return false; //只有一个元素i = last;//i指向尾端--i;for (;;) {BidirectionalIterator ii = i;--i;if (*i < *ii) {//前一个元素小于后一个元素BidirectionalIterator j = last;//令j指向尾端while (!(*i < *--j));//由尾端向前找,直到遇上比*i大的元素iter_swap(i, j);//交换i,jreverse(ii, last);//将ii之后的元素全部逆向重排return true;}if (i == first) { // 进行至最前面了reverse(first, last);//全部逆向重排return false;}}}
4、prev_permutation()会取得[first, last)所标示序列的上一个排列组合,如果没有上一个排列组合,返回false,否则返回true。
5、prev_permutation()函数算法原理:从最尾端开始寻找两个相邻的元素,令第一个元素是*i,第二个元素是*ii,且满足*i > *ii,找到这样一组元素后,再从尾端开始往前找出第一个小于*i的元素*j,将i、j元素对调,然后将ii之后的所有元素逆序排列,就得到了上一个组合。
6、prev_permutation()源代码
template <class BidirectionalIterator>bool prev_permutation(BidirectionalIterator first,BidirectionalIterator last) {if (first == last) return false; //空区间BidirectionalIterator i = first;++i;if (i == last) return false; //只有一个元素i = last;//i指向尾端--i;for (;;) {BidirectionalIterator ii = i;--i;if (*ii < *i) {//后一个元素小于前一个元素BidirectionalIterator j = last;//令j指向尾端while (!(*--j < *i));//由尾端向前找,直到遇上比*i小的元素iter_swap(i, j);//交换i,jreverse(ii, last); // 将ii之后的元素全部逆向重排return true;}if (i == first) { // 进行至最前面了reverse(first, last);//全部逆向重排return false;}}}
0 0
- 【STL源码剖析读书笔记】【第6章】算法之next_permutation和prev_permutation算法
- STL源码学习----next_permutation和prev_permutation算法
- 【经典算法】STL之next_permutation和prev_permutation
- STL源码剖析之next_permutation,prev_permutation
- STL算法之 next_permutation、prev_permutation 的原理和实现
- STL全排列算法next_permutation和prev_permutation
- STL算法:prev_permutation和next_permutation的使用
- STL算法:prev_permutation和next_permutation的使用
- 【STL源码剖析读书笔记】【第6章】算法之power算法
- 【STL源码剖析读书笔记】【第6章】算法之copy算法
- 【STL源码剖析读书笔记】【第6章】算法之set相关算法
- 【STL源码剖析读书笔记】【第6章】算法之partition算法
- 【STL源码剖析读书笔记】【第6章】算法之rotate算法
- 【STL源码剖析读书笔记】【第6章】算法之inplace_merge算法
- STL经典算法集锦<六>之排列(next_permutation/prev_permutation)
- STL经典算法集锦之排列(next_permutation/prev_permutation
- [转载]STL算法:prev_permutation和next_permutation的使用
- STL algorithm算法next_permutation,prev_permutation(39)
- Android or Linux 的休眠与唤醒
- Tomact数据源JNDI 配置
- virtualbox挂载时出现 mount: unknown filesystem type 'vboxsf' 的解决办法
- 搜狗商业平台Java技术实践
- 高效绘图、图像IO以及图层性能
- 【STL源码剖析读书笔记】【第6章】算法之next_permutation和prev_permutation算法
- windows下如何使用github ssh 公钥
- Qt小游戏开发:俄罗斯方块
- CXF与Spring整合
- Maven 利用Profile属性配置,生成不同环境(生产、测试)下的发布包
- powershell各种反弹姿势以及取证(一)
- C++超迷你迷宫
- 《一分钟能做什么?》60招对抗拖延
- maven文件