Combination 组合
问题
从包含个元素的集合中任意取个元素()组成组合,求所有组合。集合中任意两元素互不相同。
解法
设置集合表示集合的选择,表示选择数字,表示不选择数字。比如集合中取出组合
等价于集合
即元素为,元素为。
可以看出,包含个元素的集合中取出个元素的所有组合,可以转化为求有个,个的集合的唯一全排列,其中。
从集合中取出个元素作为组合,即中有个,个,唯一全排列有个
从集合中取出个元素作为组合。则中有个,个,唯一全排列有个
从集合中取出个元素作为组合,则中有个,个,唯一全排列有个。
只要求出所有唯一全排列,即可反向求出对应的组合。
包含个元素中选出个元素的所有组合,需要重复次,每次求有个,个的集合的唯一全排列,其中。根据全排列反向得到组合,算法结束。第步求唯一全排列的时间复杂度为,该算法的时间复杂度为。
StackOverflow - algorithm-to-return-all-combinations-of-k-elements-from-n
二项式系数
Chase’s Twiddle - Algorithm 382: Combinations of M out of N Objects:
Buckles - Algorithm 515: Generation of a Vector from the Lexicographical Index:
Remark on algorithm 515: Generation of a vector from the lexicographical index combinations
源码
测试
Last updated