求指定数据的组合,这里的指定数据用一个数组模拟所有可以选择的数据
这个问题与背包问题解法相似,在任何一个时间点上可以将此问题划分为两个类似的子问题:组合中包含当前数据的,和组合中不包含当前数据的。
组合中包含当前数据的:在剩下的可选数据求得可能的n-1个元素的组合。
组合中不包含当前数据的:在剩下的可选数据求得可能的n个元素的组合。
组合可以看成另外一种背包问题,见递归-背包问题
。
代码如下:求得5个数字中两个数字的组合。
class Combination {
public static void main(String[] args) {
int[] src = {2,4,8,6,10};
select(src, 0, new int[src.length],2);
}
private static void select(int [] src, int offset, int[] bag,int n) {
if(0 == n) { //如果不需要寻找,则打印结果集合
print(bag);
return;
}
if(offset == src.length){ //如果没有寻找的范围,则直接退出
return;
}
select(src,offset+1,bag.clone(),n); //在剩下的数字中找不包含当前位置的数据的组合
select(src,offset+1,put(bag,src[offset]),n-1); //在剩下的数字中找包含当前位置的数据的组合
}
private static int[] put(int[] bag, int n) { //将数字放入结果集合中
int pos = -1;
while(bag[++pos] > 0); //找到结果集合中第一个数字为0的位置
bag[pos] = n;
return bag;
}
private static int getCount(int[] bag) {
int result = bag.length;
for(int i=bag.length - 1; i>=0; i--) {
if(bag[i] == 0) result--;
else return result;
}
return result;
}
private static void print(int[] bag) { //打印结果集合中的数字
System.out.print("bag: ");
for(int n: bag) {
if(n == 0) break;
System.out.print(n + " ");
}
System.out.println();
}
}
分享到:
相关推荐
#### 标题:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 描述:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 标签:无 #### 部分内容概述: 本次课程主要围绕着“程序与递归”的主题展开讨论,具体...
分治策略是一种算法设计范式,它将复杂的问题分解为多个较小的子问题,然后递归地解决这些子问题,最后将子问题的解组合得到原问题的解。典型的分治算法包括大整数乘法的Karatsuba算法、归并排序和快速排序等。分治...
递归是程序构造的重要手段之一,它涉及到计算系统与程序的关系,以及如何通过基本动作的组合来实现复杂的计算。 递归是一种自包含的解决问题的方法,其中一个问题的解决方案依赖于较小规模相同问题的解决方案。原始...
回溯法常用于组合优化问题,如八皇后问题、旅行商问题等。 在上述的狡兔三窟问题中,狼的跳跃模式可以看作是一种递推关系,通过对跳跃模式的分析,我们可以确定兔子的安全洞穴。如果狼的跳跃路径形成一个循环,且这...
组合的递归算法(递归求*组合*),很简洁。
本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...
此段程序用了递归算法计算组合数在相应表中的序数。
"递归-组合.txt"可能涉及的是递归在解决组合问题中的应用,如组合计数、组合排列等问题。递归是一种强大的编程技术,它通过函数自身调用来解决问题,通常用于解决具有重复子问题的问题。 7. **希尔排序**: 希尔...
本主题将详细探讨如何从N个不同的元素中选择M个元素的所有可能组合,同时提供递归和非递归两种实现方式。 首先,我们来理解组合的概念。组合是指在不考虑顺序的情况下,从N个不同元素中选择M个元素的方法数。在数学...
基于递归模糊小波神经网络的INS-GNSS组合导航算法 本文提出了一种基于递归模糊小波神经网络(Recurrent Fuzzy Wavelet Neural Network, RFWNN)的INS-GNSS组合导航算法,以提高GNSS中断期间的精度。该算法利用RFWNN...
### 递归算法实现组合(C语言实现) #### 背景与意义 组合问题在计算机科学中占有重要地位,特别是在算法设计、数据结构优化以及软件工程等领域有着广泛的应用。组合问题是研究如何从一个给定的集合中选取部分元素...
递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...
组合递归算法是一种在计算机科学中广泛使用的算法设计策略,它结合了递归的思想和组合的概念。递归是指一个函数或过程在其定义中调用自身,而组合则是指将小问题的解决方案组合起来以解决大问题。在本案例中,我们...
这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...
1010 - STAMPS问题可能是一个组合优化问题,可以利用递归或者动态规划求解最优化的邮票组合。在实际编程中,递归和分治往往结合使用,以达到更高效的问题解决。 总之,递归与分治是ACM竞赛中不可或缺的工具,它们能...
2021年秋季235递归项目 姓: 名: GitHub用户名: 笔记: 截止时间:周一2/22 8:00 am 一般说明: 在顶部填写您的姓名和GitHub用户名。 解决以下三个问题之一 您必须使用Makefile来构建项目。 可执行文件应命名为...
### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...
递归关系是组合数学中的另一个重要概念,它可以描述序列中每一项与前一项或前几项之间的关系。解递归关系通常需要找到递归的初始条件和递推公式,并通过数学归纳法或生成函数法等方法求出通项公式。 7. 多个约束...
- **回溯法**:在解决组合优化问题,如八皇后问题、N皇后问题、迷宫问题时,递归结合回溯可以找出所有可能的解决方案。 递归算法在使用时需要注意几个关键点: - **效率**:递归可能导致大量的函数调用,增加内存...
- **递归结构**:组合模式常常涉及到递归调用,需要合理处理递归边界条件,避免无限循环。 结合提供的博客链接,你可以在那里找到更详细的实例和解释,深入理解如何在iOS平台上运用组合模式。通过学习和实践,你会...