`
山有峰则灵
  • 浏览: 28217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排列与组合

阅读更多
试想这样一个问题
一组数比如{1,3,4,7} 任取其中的三边,会构成多少种不同的三角型
又或者{2,2,4,5,10,12}任取其中四边,会构成多少种不同的多边形?如果取三边,或五边又如何?

在一些情况下,我们需要解决处理排列和组合数的问题
先来看一下排列的情况
          abcd
下标  1234

联系我们的问题再观察这个数组,其实我们需要做的就是在比方说1的位置,让a,b,c,d轮流出现1次,然后在2的位置,让abcd再次轮流出现,以此类推,直到最后2位处理完成之后。返回上级程序

解决一个数组平移的问题并不难
abcd 向左移动4次,就可以满足在1的位置上都出现一次。
那么紧接着下一步,如何让2的位置再次轮流出现abcd也仍然是使用相同的方法
每次移动一位后,查看右边的n个数,然后把问题抛给子问题
递归,分治法,是计算机解决问题的一个主要的手段
我们从问题中发现相似的处理方法,然后递归调用自身

int[] a = { 1, 2, 3, 4 };
// level start at 0
public void rotate(int level) {
         //it's last number
	if (level == a.length - 1)  return;
	int in = level + 1;
	for (int i = level; i < a.length; i++) {
		if (i == 0)
                  //print the number
		    log(a);
		Int t = a[level];
           //move the list
	         for (int j = level; j < a.length - 1; j++) 
			a[j] = a[j + 1];
		a[a.length - 1] = t;

		if (i != a.length - 1)
			log(a);
                  //Go into the subquestion
		rotate(in);
		}
	}



实际上我们做的就是旋转整个数组,当开始旋转N个数中的第一个数时,首先询问右边N-1个数是否已经旋转完成?如果没有则进入旋转右边的N-1个数的方法中,同理进入这个方法后再次询问右边N-2个数是否旋转完成?一直到最后1个数或是最后2个数已经旋转完成时,跳回到上级方法中继续执行。


组合:解决了排列的问题后,再来看组合就容易了许多,我们取C(4,2)的组合。红色代表取到的数
【1】
abcd
【2】
abcd
【3】
abcd
【4】
abcd
【5】
abcd
【6】
abcd

同排列,我们也在不断的遍历整个数组,每次询问是否子问题已经解决,即N+1位后的数是否已经全部遍历了?然后决定是否进入子问题。这里由于组合数取的范围,我们需要不断向右移动。在【4】【6】中,移动了红色编号的起始位置

解决了组合问题后,之前的多边型的题目就很简单了,在这里我们没有列举诸如2边相同的情况如{2,2,2,2,2}取其中3变可以构成多少个三角型,实际只有2,2,2 一种。因为所有的边都是相同的,因此还需要一些判断。另外一个多边型的任何一边必须小于其它所有边相加。

组合与排列代码:
public class Polygons{

	int[] a = { 1, 2, 3, 4 };
	int[] b = new int[4];
	
	//x为起始位置,设为0表从数组的第一个位置开始循环
	public void rotate1(int x) {
		if (x == a.length - 1) return;
		int in = x + 1;
		for (int i = x; i < a.length; i++) {
			if (i == 0)
				log(a);
			int t = a[x];
			for (int j = x; j < a.length - 1; j++) 
				a[j] = a[j + 1];
			a[a.length - 1] = t;
			if (i != a.length - 1)
				log(a);
			rotate1(in);
		}
	}
	/*
	 * x为0,意为从数组0的位置开始
	 * level为-1,描述循环层数
	 * y为取数组中的几个数作为组合,如取1则表示数组中的任意2个数的组合
	 */
	public void rotate2(int x, int y, int level) {
		if (level == y)
			return;
		level++;
		int in = x+1;
		for (int i = x; i < a.length; i++, in++) {
			b[level] = a[i];
			rotate2(in, y, level);
			if (level == y)
				log(b);
		}
	}

	public void log(int[] b) {
		for (int i : b) {
			System.out.print(i + " ");
		}
		System.out.println("");
	}

	public static void main(String[] args) {
		System.out.println("=====排列=====");
		new Polygons().rotate1(0);
		System.out.println("=====组合=====");
		new Polygons().rotate2(0, 2, -1);
	}
}

3
0
分享到:
评论

相关推荐

    高中数学排列与组合PPT课件.pptx

    高中数学排列与组合知识点 ...3. 组合与排列有联系吗? 结论 排列和组合是高中数学中两个重要的概念,它们之间有着密切的联系,但又有着很大的不同。理解和掌握排列和组合的概念对数学学习非常重要。

    数学排列与组合PPT课件.pptx

    思考三:组合与排列有联系吗?回答:是的,组合是选择的结果,排列是选择后再排序的结果。 判断下列问题是组合问题还是排列问题: 1. 设集合A={a,b,c,d,e},则集合A的含有3个元素的子集有多少个?(组合问题) 2. ...

    高中数学选修排列与组合排列与排列数PPT课件.pptx

    排列与组合 排列是高中数学选修中的一项重要内容,通过本课件的学习,学生可以了解排列的定义、掌握排列数公式及推导方法,并能用“树形图”写出一个排列问题的所有的排列,并能运用排列数公式进行计算。 一、 ...

    高中数学选修 排列与组合 排列与排列数PPT课件.pptx

    排列与组合是高中数学选修中的重要概念,主要涉及如何有序地选取和组织元素。排列是将一组不同的元素按照特定顺序进行排列的方式。在排列问题中,元素的顺序至关重要,因为改变顺序会得到一个不同的排列。 1. 排列...

    排列与组合.doc

    排列与组合是概率论、统计学以及数学竞赛中常见的概念,它们在解决涉及选择和排列问题时起到关键作用。在中学阶段,我们会学习到乘法原理和加法原理,这两个基本原理是理解排列与组合的基础。 乘法原理指出,如果...

    排列与组合课件.ppt

    排列与组合是数学中基础且重要的概念,它们在解决实际问题和理论研究中都有广泛应用。在本课件中,黄玉霞老师通过一系列...此外,通过反思自己的表现,学生可以自我评估对排列组合概念的理解程度,并寻找提升的空间。

    排列与组合同步练习.docx

    13. 数字问题与排列组合的结合:如题目中组成的数字要大于20000且百位不是3,可以通过排除法结合排列组合计算。 14. 比例关系:题目中m:n=13:2,可以通过比例关系解出班级人数。 15. 连接问题:构建道路连接多个点...

    2015高中数学1.2排列与组合教材分析新人教A版选修2_3

    此外,排列与组合与二项式定理紧密相关,对提高学生综合素质有着深远的影响。 其次,教材在内容处理上,注重了情感、态度和价值观的培养。随着课程的深入,目标逐渐提升,内容的丰富性和难度也呈现出递增趋势。教材...

    三年级数学广角排列与组合PPT学习教案.pptx

    在这个阶段引入排列与组合的概念,不仅能够培养学生的逻辑思维能力和有序思考的方法,还能够帮助他们理解数学的组合性和多样性。接下来,我将根据所提供的概要内容,详细地描述三年级数学广角排列与组合PPT学习教案...

    2015高中数学1.2排列与组合课后反思新人教A版选修2_3

    在高中数学的教学中,排列与组合是重要的一环,尤其对于新人教A版选修2-3的课程,这部分内容常常让许多学生感到困难。排列与组合的概念与解题方式有其独特性,不同于传统的数学问题,这使得初次接触的学生需要时间...

    排列与组合专题教案设计.doc

    排列与组合专题教案设计 排列与组合是概率论与数理统计中基本的计数方法,是数学领域中重要的基础知识点。本专题教案设计的核心在于帮助学生深入理解排列的定义及其计算方法,以便于他们能准确掌握如何从一定数量的...

    排列与组合答案.doc

    在提供的文档中,题目涉及了多个排列组合的具体应用,包括抽取不同元素、任务分配、概率计算等。 1. 第一题是关于素数的选择问题,其中涉及到组合的概念。从10个不同的素数中选取两个不同的数,根据组合公式C(n, k)...

    高考数学(理)一轮复习讲义 10.2 排列与组合.docx

    掌握排列组合的知识,不仅仅是要记住公式和区别,更重要的是培养解决排列组合问题的能力。学生需要学会运用分类讨论、分析问题的能力,以及分步解决问题的策略。在实际问题中,比如多人就座或物品排列问题,常常需要...

    二年级 排列与组合PPT学习教案.pptx

    排列与组合是数学中的基本概念,特别是在概率论和统计学中有着广泛的应用。这个PPT学习教案主要针对二年级的学生,旨在通过实例帮助他们理解这两个概念。排列是有序的组合,而组合则是无序的。在教学过程中,通过...

    高中数学排列与组合59796PPT课件.pptx

    排列与组合是高中数学中的重要概念,主要涉及从一定数量的元素中选择或安排元素的方法。在实际问题中,这两个概念经常被用来解决各种选择和排列的问题。 首先,我们要理解排列和组合的基本定义。排列是从n个不同...

    排列与组合_1.docx

    ### 排列与组合知识点解析 #### 一、教学背景及目标 本次教学内容选自人教版《义务教育课程标准实验教科书数学(二年级上册)》第100页,主要针对二年级学生的认知特点设计。通过具体情境引入,激发学生的学习兴趣...

    一年级数学排列与组合PPT课件.pptx

    一年级数学排列与组合PPT课件.pptx

    新课标2016高考数学大一轮复习第10章第2节排列与组合课件理

    这需要计算所有可能的组合,考虑到题目具有放回性质,因此需结合排列组合知识进行解答。 总的来说,排列与组合是高中数学中的核心概念,不仅要求学生熟练掌握计算规则,更需要他们具备灵活应用这些规则解决实际问题...

Global site tag (gtag.js) - Google Analytics