递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
求一个集合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个元素的组合和所有可能的组合情况相关推荐
- 求一个集合的所有子集 Python实现
求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...
- 求一个集合的所有子集
题目描述 求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}. 思路 实际上求子集问题是一个经典的DFS,每一次 ...
- C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和
C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...
- 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。
import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...
- 本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
本题要求编写程序,求一个给定的m×n矩阵各行元素之和. 输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6).随后m行,每行给出n个整数,其间 以空格分隔. 输出格式: 每行输出对应矩阵行元素 ...
- 求一个N阶方阵右下三角元素的和
编写程序求一个N阶方阵右下三角元素的和(包括副对角线上的元素),用符号常量定义N为5,从键盘输入这个N阶方阵. #include <stdio.h>#define N 5int main( ...
- 求一个集合的所有子集问题实现
**问题描述 已知N个大于0的整数构成一个集合,即{1,2,3,--,N},求其所有的非空且元素不相邻的子集,计算所有子集的乘积的平方的和. 例如:集合{1,2,3,4},其所有非空不相邻子集有{1} ...
- 求一个集合的子集个数的方法
假设一个集合包含n个元素,要求计算该集合的子集个数. 该集合的所有子集,也叫该集合的幂集,比如集合{1,2,3}的所有子集为 空集,{1},{2},{3},{1,2},{1,3},{2,3},{1,2 ...
- 求一个集合的所有子集问题
一个包含n个元素的集合,求它的所有子集.比如集合A= {1,2,3}, 它的所有子集是: { {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}, @}(@表示空集 ...
最新文章
- http权威指南-http连接管理
- 人工智能应用需要高可信性(180806)
- leetcode-找出数组中重复的数字
- 【转】DataGridView新特色(vs2005)
- 在没有数据集的情况下使用数据表
- php采集单线程卡死,php - 为什么我这段curl采集,单线程比多线程还快?
- sdk 今日头条_Unity接入今日头条广告(激励广告)
- 完整的Java软件开发学习路线
- 提权、渗透、经验、技巧总结大全三
- mysql 主键和候选键_2.2.2 候选键与主键
- gds文件 导出_将gds导入virtuoso以后,再将该gds导出,为什么元素顺序就变了?谢谢...
- 非线性规划与KTT(一)
- IT培训机构如何选择?选择IT培训机构3大误区
- CRC32 tools in Ubuntu /fedora
- Java虚拟机如何运行Java字节码?
- RTP PS PES ES H264协议学习
- 敏捷开发团队 项目分工_如何为您的软件开发项目建立敏捷团队
- 联想ghost重装系统_一键ghost官网,图文详解一键ghost怎么重装系统
- 用友uap nc65 如何实现一个下拉框(枚举类型实体)
- Windows 启用 IIS