`
shenyu
  • 浏览: 122956 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

递归-组合

 
阅读更多

求指定数据的组合,这里的指定数据用一个数组模拟所有可以选择的数据

这个问题与背包问题解法相似,在任何一个时间点上可以将此问题划分为两个类似的子问题:组合中包含当前数据的,和组合中不包含当前数据的。

组合中包含当前数据的:在剩下的可选数据求得可能的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();
	}
}
 
4
0
分享到:
评论

相关推荐

    大学计算机第3讲-程序与递归-组合-抽象与构造.ppt

    #### 标题:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 描述:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 标签:无 #### 部分内容概述: 本次课程主要围绕着“程序与递归”的主题展开讨论,具体...

    栈与递归--含分治与回溯.zip

    分治策略是一种算法设计范式,它将复杂的问题分解为多个较小的子问题,然后递归地解决这些子问题,最后将子问题的解组合得到原问题的解。典型的分治算法包括大整数乘法的Karatsuba算法、归并排序和快速排序等。分治...

    《大学计算机-计算思维导论》19-20学时-递归-ding-20201

    递归是程序构造的重要手段之一,它涉及到计算系统与程序的关系,以及如何通过基本动作的组合来实现复杂的计算。 递归是一种自包含的解决问题的方法,其中一个问题的解决方案依赖于较小规模相同问题的解决方案。原始...

    递推-递归-分治-回溯.docx

    回溯法常用于组合优化问题,如八皇后问题、旅行商问题等。 在上述的狡兔三窟问题中,狼的跳跃模式可以看作是一种递推关系,通过对跳跃模式的分析,我们可以确定兔子的安全洞穴。如果狼的跳跃路径形成一个循环,且这...

    组合 递归算法(递归求组合)

    组合的递归算法(递归求*组合*),很简洁。

    易语言递归法取排列组合例程

    本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...

    递归求组合序数

    此段程序用了递归算法计算组合数在相应表中的序数。

    算法程序.rar (常用算法)

    "递归-组合.txt"可能涉及的是递归在解决组合问题中的应用,如组合计数、组合排列等问题。递归是一种强大的编程技术,它通过函数自身调用来解决问题,通常用于解决具有重复子问题的问题。 7. **希尔排序**: 希尔...

    N选M的所有组合(递归与非递归实现)

    本主题将详细探讨如何从N个不同的元素中选择M个元素的所有可能组合,同时提供递归和非递归两种实现方式。 首先,我们来理解组合的概念。组合是指在不考虑顺序的情况下,从N个不同元素中选择M个元素的方法数。在数学...

    基于递归模糊小波神经网络的INS-GNSS组合导航算法.pdf

    基于递归模糊小波神经网络的INS-GNSS组合导航算法 本文提出了一种基于递归模糊小波神经网络(Recurrent Fuzzy Wavelet Neural Network, RFWNN)的INS-GNSS组合导航算法,以提高GNSS中断期间的精度。该算法利用RFWNN...

    递归算法实现组合(c语言实现,平台:Automation Studio@AR system)

    ### 递归算法实现组合(C语言实现) #### 背景与意义 组合问题在计算机科学中占有重要地位,特别是在算法设计、数据结构优化以及软件工程等领域有着广泛的应用。组合问题是研究如何从一个给定的集合中选取部分元素...

    递归法取排列组合易语言源码例程.rar

    递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...

    组合递归算法【原创】

    组合递归算法是一种在计算机科学中广泛使用的算法设计策略,它结合了递归的思想和组合的概念。递归是指一个函数或过程在其定义中调用自身,而组合则是指将小问题的解决方案组合起来以解决大问题。在本案例中,我们...

    案例排列组合(递归)

    这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...

    递归与分治--acm竞赛资料

    1010 - STAMPS问题可能是一个组合优化问题,可以利用递归或者动态规划求解最优化的邮票组合。在实际编程中,递归和分治往往结合使用,以达到更高效的问题解决。 总之,递归与分治是ACM竞赛中不可或缺的工具,它们能...

    Spring2021-235-递归-kartikk221:Spring2021-235-递归-kartikk221由GitHub Classroom创建

    2021年秋季235递归项目 姓: 名: GitHub用户名: 笔记: 截止时间:周一2/22 8:00 am 一般说明: 在顶部填写您的姓名和GitHub用户名。 解决以下三个问题之一 您必须使用Makefile来构建项目。 可执行文件应命名为...

    基于hadoop用并行递归实现排列组合运算

    ### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...

    电子科技大学 - 组合数学 - 卢光辉\杨国武 -2017期末试卷

    递归关系是组合数学中的另一个重要概念,它可以描述序列中每一项与前一项或前几项之间的关系。解递归关系通常需要找到递归的初始条件和递推公式,并通过数学归纳法或生成函数法等方法求出通项公式。 7. 多个约束...

    .net 递归算法 .net 递归算法.net 递归算法

    - **回溯法**:在解决组合优化问题,如八皇后问题、N皇后问题、迷宫问题时,递归结合回溯可以找出所有可能的解决方案。 递归算法在使用时需要注意几个关键点: - **效率**:递归可能导致大量的函数调用,增加内存...

    设计模式-组合模式

    - **递归结构**:组合模式常常涉及到递归调用,需要合理处理递归边界条件,避免无限循环。 结合提供的博客链接,你可以在那里找到更详细的实例和解释,深入理解如何在iOS平台上运用组合模式。通过学习和实践,你会...

Global site tag (gtag.js) - Google Analytics