排列组合的算法
排列组合算法
排列组合的数学基础
排列
从 个不同元素中, 每次取出 个不同元素,排成一列,称为从 个元素中取出 个元素的无重复排列或直线排列,简称排列
, 记作 ;
组合
从 个不同元素中每次取出 个不同元素,不管其顺序合成一组,称为从 个元素中不重复地选取 个元素的一个组合, 简称组合
, 记作 。
全排列的递归算法描述
设一组元素 ;
当 时: ;
当 时: ;
当 时: ;
...
对于 : 有
template<class T> void Recursion_Arrangament(int begin, int end, std::vector<T> dataSet) { if (begin == end) // 终止条件 { for (size_t i = 0; i < end; i++) { std::cout << dataSet[i]; } std::cout << std::endl; } for (size_t i = begin; i < end; i++) { swap(dataSet[begin], dataSet[i]); Recursion_Arrangament(begin + 1, end, dataSet); swap(dataSet[i], dataSet[begin]); } }
组合的递归算法描述
用 "10" 转换解决组合问题
在一组元素 中选取 个作任意组合,
设
- 将元素数组的前三位标记为
1
, 其余标记为0
; - 从头读取标记为, 当遇到的第一组
10
时, 输出结果, 并转换10
为01
; - 重复
步骤2
, 直到队尾再没10
, 终止;
A | B | C | D | E | Output |
---|---|---|---|---|---|
1 | 1 | 1 | 0 | 0 | ABC |
1 | 1 | 0 | 1 | 0 | ABD |
1 | 0 | 1 | 1 | 0 | ACD |
0 | 1 | 1 | 1 | 0 | BCD |
0 | 1 | 1 | 0 | 1 | BCE |
0 | 1 | 0 | 1 | 1 | BDE |
0 | 0 | 1 | 1 | 1 | CDE |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析