请教产生排列组合的算法

你可以递归。比如,对于组合,N个对象的K组合,相当与挑出其中第i个对象,然后用这个对象和i+1 .. N对象的K-1组合逐个组合。比如:abcd四个对象的3组合,我首先挑出a,然后生成bcd的所有2组合bc,bd,cd,然后生成abc,abd,acd。然后再跳出b,后面cd的所有2组合就只有cd,就生成了bcd。
■网友
C++ STL里面提供了next_permutation函数。你可以google看看。
■网友
来源:组合数学 (豆瓣)字典序法:1. 请教产生排列组合的算法
2. 请教产生排列组合的算法
3. swap(num, i-1, h)4. reverse(num, i, end)比如 34211. 先从右往左找到第一个顺序对,此时i=12. 从右往左找到第一个\u0026gt;num =3 的数,此时h=13. swap(num, 0, 1) : 43214. reverse(num, 1,end): 4123所以3421的下一个字典序是4123。
■网友
审题不严.... 递归是不对的, 正确答案就是题目评论里的 next lexicographic permutation 字典序以及 @yangscar 同学的答案.-------------------------------------------------------------递归.root: 假设有 1, 2, 3, 4 四个, 求所有的组合a) 求所有以 1 开头的组合 ( 1 + 剩下 2, 3, 4 所有的组合 )b) 求所有以 2 开头的组合 ( 2 + 剩下 1, 3, 4 所有的组合 )c) 求所有以 3 开头的组合 (....)d) 求所有以 4 开头的组合 (,...)recursion a: 有 2, 3, 4, 求所有的组合a1) 求所有以 2 开头的组合 ( 2 + 剩下的 3, 4 所有的组合 )a2) 求所有以 3 开头的组合 ( 3 + 剩下的 2, 4 所有的组合 )a3) 求所有以 4 开头的组合 (....)recursion a1: 有 3, 4 求所有的组合这里就是跳出递归的条件了, 只有两个元素的时候, 手动写出组合.
■网友
看了回答,估计没多少人真正实践过的。
你这个问题是两个问题:排列、组合
递归思路最简单,排列使用交换思想,从0开始到结束。
【请教产生排列组合的算法】 组合使用向下递归,例如从n个中取m个数,看做是n-m个从n-1个中取m-1个递归。
需要代码联系我,私信github地址给你。

■网友
JohnsonTrotter算法,就是用来生成排列的算法,还有一种是用来生成字典序排列的算法


    推荐阅读