STL 中 next_permutation 的全排列思路
来源:互联网 发布:南阳理工学院网络 编辑:程序博客网 时间:2024/05/17 03:09
STL中,next_permutation 与 prev_permutation 可实现全排列。
使用 next_permutation 时,需要先将 vector 的元素顺序。
使用 prev_permutation 时,需要先将 vector 的元素逆序。
多说一句,如要求所有组合的问题,比如说 5 个数的所有可能的组合情况,则由 00000 到 11111 的变化过程,刚好遍历所有组合;相当于 ( 1 + 1 ) ^ n = 全组合加和的数学等式。
next_permutation 之数学原理:
由全顺序到全逆序过程中的枚举,这一动态规划过程是由后向前进行的。
迭代过程:
设序列 a = [ a<1>, a<2>, ..., a<n> ],在 i 处 (1 <= i < n),有 [ a<i+1>, ... a<n> ] 为递减序列,表示后半段已完成全逆序操作。从后半段中找出大于 a<i> 的最小值,并与 a<i> 互换,并对后半段全部翻转,使其顺序。如是完成一步迭代。
每步迭代均返回一种排列,每步迭代都需对 i 重新定位,要求 [ a<i+1>, ... a<n> ] 为全逆序列。
子问题的划分:
设某迭代过程完成后,新的 [ a<i+1>, ... a<n> ] 序列成为子序列(子问题),对其再次由全顺序到全逆序完成全部操作。则此时将再次在 i 处操作迭代过程,相当于将 a<i> 处的值逐渐增大,直到最大值;此时,新的分界线成为了 a<i-1>,如是直到首元素。
子序列 [ a<i+1>, ... a<n> ] 枚举的过程不会影响到 [ a<1>, a<2>, ..., a<i> ],除非 [ a<i+1>, ... a<n> ] 全逆序操作完成。
- STL 中 next_permutation 的全排列思路
- C++STL中全排列函数next_permutation的使用
- C++STL中全排列函数next_permutation的使用
- C++STL中全排列函数next_permutation的使用
- STL next_permutation 全排列
- [STL]next_permutation全排列
- 全排列(STL next_permutation)
- STL: <algorithm>中 next_permutation()生成全排列
- STL中全排列函数 next_permutation
- STL实现全排列 next_permutation
- STL中的全排列next_permutation
- 枚举全排列 STL next_permutation
- HDU1716 -- 全排列 -- STL -- next_permutation()
- STL next_permutation(全排列算法)
- poj 1833 排列 [ 使用STL的next_permutation函数生成全排列 + STL中copy函数的用法完美解决 ]
- 标准库——STL里面的全排列:next_permutation()
- 使用STL的next_permutation函数生成全排列(C++)
- 全排列问题的STL用法(next_permutation类)
- cxf学习笔记2009-7-15(1.发布wsdl)
- 2009中国最具潜力IC设计公司
- js不仅仅是弱类型_参数要求也不是很严格 爽 啊~!
- 支持smil文件的MMS PDU打包方式
- 关于ADABOOST人脸检测
- STL 中 next_permutation 的全排列思路
- [Flex]Flex SDK 4(Gumbo)改善的Layout和Scroller(一)
- 让HTML在DIV中进行幻灯
- ORA-00904:invalid identifier错误的解决办法
- 分布式拒绝服务攻击(DDoS)原理及防范
- Oracle监控Sql脚本
- 第一篇 试试看
- Database Project requires local SQL 2005 instance的解决方案(downmoon)
- AO的Display对象简介