请教产生排列组合的算法
你可以递归。比如,对于组合,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算法,就是用来生成排列的算法,还有一种是用来生成字典序排列的算法
推荐阅读
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 圣才教育网站招募创业学生是咋回事
- 淘宝,天猫保证金为啥不能放入余额宝产生收益
- 如果小米公司宣布MIUI将适配锤子T1,会产生怎么样的影响?
- 功夫汽车|汽车和艺术的结合,会产生怎样的“钜浪”?广汽传祺告诉你答案
- 太阳能|房车上加装的太阳能板,一天能产生几度电?
- 高中学排列组合思路不清晰是不是代表不适合学编程
- 请教智能合约编译的问题
- |今年我省推荐产生125名全国劳模先进
- 今年江苏推荐产生125名全国劳模先进
