求一个集合S的m个元素组合的所有情况,并打印出来,非常适合采用递归的思路进行求解。因为集合的公式,本身就是递归推导的:

C(n,m) = C(n-1,m-1) + C(n-1,m)。

  根据该公式,每次递归会分裂为两次递归,直至m=1或m=n的情况,打印出当前组合情况。

  本文实现了给定m的递归代码,并且给出了求一个集合S所有可能的组合的情况,具体可参考下面代码。

  核心代码为_fill 函数,往数组 cm 中填充,打印。

 1 void combine<E>(Set<E> s, int m) {
 2   if (m > 0 && m <= s.length) _fill(List<E>(m), s, 0, m);
 3 }
 4
 5 void combineAll<E>(Set<E> s) {
 6   for (var i = 1; i <= s.length; i++) combine(s, i);
 7 }
 8
 9 void _fill<E>(List<E> cm, Set<E> a, int i, int m) {
10   if (m < a.length) {
11     cm[i] = a.first;
12     if (m > 1) {
13       _fill(cm, _rest(a, a.first), i + 1, m - 1);
14     } else {
15       print(cm);
16     }
17     _fill(cm, _rest(a, a.first), i, m);
18   } else {
19     for (var e in a) cm[i++] = e;
20     print(cm);
21   }
22 }
23
24 Set _rest<E>(Set<E> a, E e) {
25   var tmp = a.toSet();
26   tmp.remove(e);
27   return tmp;
28 }

转载于:https://www.cnblogs.com/outerspace/p/10827029.html

递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况相关推荐

  1. 求一个集合的所有子集 Python实现

    求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...

  2. 求一个集合的所有子集

    题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}. 思路 实际上求子集问题是一个经典的DFS,每一次 ...

  3. C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和

    C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...

  4. 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。

    import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...

  5. 本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

    本题要求编写程序,求一个给定的m×n矩阵各行元素之和. 输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6).随后m行,每行给出n个整数,其间 以空格分隔. 输出格式: 每行输出对应矩阵行元素 ...

  6. 求一个N阶方阵右下三角元素的和

    编写程序求一个N阶方阵右下三角元素的和(包括副对角线上的元素),用符号常量定义N为5,从键盘输入这个N阶方阵. #include <stdio.h>#define N 5int main( ...

  7. 求一个集合的所有子集问题实现

    **问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...

  8. 求一个集合的子集个数的方法

    假设一个集合包含n个元素,要求计算该集合的子集个数. 该集合的所有子集,也叫该集合的幂集,比如集合{1,2,3}的所有子集为 空集,{1},{2},{3},{1,2},{1,3},{2,3},{1,2 ...

  9. 求一个集合的所有子集问题

    一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...

最新文章

  1. http权威指南-http连接管理
  2. 人工智能应用需要高可信性(180806)
  3. leetcode-找出数组中重复的数字
  4. 【转】DataGridView新特色(vs2005)
  5. 在没有数据集的情况下使用数据表
  6. php采集单线程卡死,php - 为什么我这段curl采集,单线程比多线程还快?
  7. sdk 今日头条_Unity接入今日头条广告(激励广告)
  8. 完整的Java软件开发学习路线
  9. 提权、渗透、经验、技巧总结大全三
  10. mysql 主键和候选键_2.2.2 候选键与主键
  11. gds文件 导出_将gds导入virtuoso以后,再将该gds导出,为什么元素顺序就变了?谢谢...
  12. 非线性规划与KTT(一)
  13. IT培训机构如何选择?选择IT培训机构3大误区
  14. CRC32 tools in Ubuntu /fedora
  15. Java虚拟机如何运行Java字节码?
  16. RTP PS PES ES H264协议学习
  17. 敏捷开发团队 项目分工_如何为您的软件开发项目建立敏捷团队
  18. 联想ghost重装系统_一键ghost官网,图文详解一键ghost怎么重装系统
  19. 用友uap nc65 如何实现一个下拉框(枚举类型实体)
  20. Windows 启用 IIS

热门文章

  1. Spring boot -mongodb
  2. JSP中文乱码问题解决方案
  3. How does “Coded UI test” finds a control ?
  4. dos下打包整个java工程
  5. Spring官网阅读(三)自动注入
  6. 性能优化指南(5000 字小结)
  7. MySQL 百万级数据量分页查询方法及其优化
  8. 激烈竞争的时代,哪些能力可以帮你脱颖而出?
  9. 给转型做技术的同学的一些建议
  10. Linux 常用命令全称,看看你 get 到了哪些?