Combination - 组合
问题
从包含个元素的集合中任意取个元素()组成组合,求所有组合。集合中任意两元素互不相同。
解法
设置集合表示集合的选择,表示选择数字,表示不选择数字。比如集合中取出组合
等价于集合
即元素为,元素为。
可以看出,包含个元素的集合中取出个元素的所有组合,可以转化为求有个,个的集合的唯一全排列,其中。
从集合中取出个元素作为组合,即中有个,个,唯一全排列有个
从集合中取出个元素作为组合。则中有个,个,唯一全排列有个
从集合中取出个元素作为组合,则中有个,个,唯一全排列有个。
只要求出所有唯一全排列,即可反向求出对应的组合。
包含个元素中选出个元素的所有组合,需要重复次,每次求有个,个的集合的唯一全排列,其中。根据全排列反向得到组合,算法结束。第步求唯一全排列的时间复杂度为,该算法的时间复杂度为。