GS1121B02-谢添-计算机中的组合数学
组合数学简介

映射的个数
n元集上的幂等映射的个数 n元集上的部分映射的个数
n
C
k n
k
n
k
k 1
n
Cnk nk (1 n)n
k 0
例题
• 问题一:对三角形的三个顶点u,v,w染以红、蓝两 种颜色,求不同的染色方案数。
• 问题二:求集合{u,v,w}到集合{r,b}的映射的数目。
例题
• 问题1:求n元集合上有多少个不同的自反关系?
组合数学 Combinatorics
教材
课程安排
• 组合数学简介 • 排列组合公式 • 母函数 • 递推关系 • 容斥原理 • 抽屉原理 • Polya计数
组合数学简介
• 组合数学也称为组合分析或组合学,按研究的对象 归于离散数学家族。
• 早在中国古代的洛书、河图中就有组合数学的思想。 • 组合数学的历史渊源扎根于数学娱乐和游戏中。 • 现代组合数学在纯粹和应用科学上都有重要的价值。 • 组合数学与抽象代数、拓扑学、数学基础、图论、
• 主要内容:把有限集合的元素按一定的规则进行安排。 • 这种安排被考究地称为组态(Configuration)。
解决的问题
• 组态的存在性 • 组态的枚举、分类和计数 • 组态的构造 • 组态的优化
幻方
• 幻方是最古老最流行的一个数学游戏之一。 • 在中世纪时期曾存在与幻方相关的玄想,人们将
幻方佩戴身上辟邪。 • 本杰明·富兰克林就是一个幻方迷,他的论文中包
有m1种不同的方法,在第二类办法中有m2种不同的方法,…,在ห้องสมุดไป่ตู้n类 办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不 同方法。
组合数学在计算机中的应用

目录摘要 (1)1.组合数学概述 (1)2.组合数学在生活中的应用 (1)3.组合数学与计算机软件 (1)3.1 信息时代的组合数学 (2)3.2 组合数学在计算机软件的应用 (2)3.3组合数学与计算机软件的关系 (2)3.4组合数学在国外软件业的发展状况 (2)4 Ramsey 数在计算机科学中的应用 (3)4.1Ramsey 定理和Ramsey 数 (3)4.2信息检索 (3)参考文献 (5)组合数学在计算机中的应用摘要:介绍了组合数学的概念、起源与研究的主要内容,分析了组合数学的特点以及其在生活中的应用,阐述了组合数学与计算机软件的联系,并着重通过两个例子说明了Ramsey 数在计算机科学的信息检索中的重要应用。
关键词:组合数学;组合算法;Ramsey 数;信息检索;1:组合数学概述组合数学,又称为离散数学,但有时人们也把组合数学和图论加在一起算成是离散数学。
组合数学是计算机出现以后迅速发展起来的一门数学分支。
计算机科学就是算法的科学,而计算机所处理的对象是离散的数据,所以离散对象的处理就成了计算机科学的核心,而研究离散对象的科学恰恰就是组合数学。
组合数学的发展改变了传统数学中分析和代数占统治地位的局面。
现代数学可以分为两大类:一类是研究连续对象的,如分析、方程等,另一类就是研究离散对象的组合数学。
组合数学不仅在基础数学研究中具有极其重要的地位,在其它的学科中也有重要的应用,如计算机科学、编码和密码学、物理、化学、生物等学科中均有重要应用。
微积分和近代数学的发展为近代的工业革命奠定了基础。
而组合数学的发展则是奠定了本世纪的计算机革命的基础。
计算机之所以可以被称为电脑,就是因为计算机被人编写了程序,而程序就是算法,在绝大多数情况下,计算机的算法是针对离散的对象,而不是在作数值计算。
正是因为有了组合算法才使人感到,计算机好象是有思维的。
2:组合数学在生活中的应用在日常生活中我们常常遇到组合数学的问题。
计算机应用数学-(组合数学)-答案哈工大

1,证明,如果从集合{1,2,...,2n}中选择n+1整数,那么总存在两个整数,它们之间相差为1.2,用鸽巢原理证明,有理数m/n展开的十进制小数最终是要循环的。
例如,34 478/99 900=0.345 125 125 125 125 12...3,一间屋内有10个人,他们当中没有人超过60岁(年龄只能以整数给出)但又至少不低于1岁。
证明,总能够找出两组人(两组不含相同人),各组人的年龄和是相同的。
题中的数10能换成更小的数吗?4,一只袋子装了100个苹果、100个香蕉、100个橘子和100个梨。
如果我每分钟从袋子里了出1种水果,那么需要多少时间我就能肯定至少已拿出了1打相同种类的水果?5,i)证明,在边长为1的等边三角形内任意选择5个点,存在2个点,其间距离至多为1/2。
ii)证明,在边长为1的等边三角形内任意选择10个点,存在2个点,其间距离至多为1/3。
iii)确定一个整数m小n,使得如果在边长为1的等边三角形内任意选择的m小n个点,则存在2个点,其间距离至多为1/n.6,下列各数各有多少互异正因子?i)3的4次方X 5的2次方X 7的6次方X 11ii)620iii)10的10次方7,确定下列类型的一手牌(5张牌)的数目。
i)full houses (3张一样大小的牌及2张相同点数的另外大小的牌)。
ii)顺牌(5张点数相连的牌)。
iii)同花(5张一样花色的牌)。
iv)同花顺(5张点数相连的同样花色的牌)。
v)恰好两个对(一对同样大小,另一对另外点数同样大小,再有一张另外大小的5张牌)。
vi)恰好一个对(一对同样大小,另外三张另外大小且互异点数的牌)。
8,从拥有10名男会员和12名女会员的一个俱乐部选出一个5人委员会。
如果至少要包含2位女士,能够有多少种方法形成这个委员会?此外,如果俱乐部还有一位特定的男士和一们特定的女士拒绝进入该委员会一起工作,形成委员会的方式又有多少?9,学校有100名学生和3个宿舍A,B和C,它们分别容纳25,35和40人。
组合数学解析

组合数学解析在数学领域中,组合数学是研究离散结构的一门学科,它主要关注于物体的集合以及它们之间的排列、组合和选择方式。
组合数学广泛应用于计算机科学、信息技术、统计学、天文学等多个领域,在许多实际问题的建模和解决中都起到了重要的作用。
一、组合数学的基本概念1. 排列与组合在组合数学中,排列和组合是两个基本的概念。
排列是指一组对象按照一定顺序进行排列的方式,而组合则是指从一组对象中选取一部分对象进行组合的方式。
排列和组合的计算公式为:排列公式:P(n,m) = n!/(n-m)!组合公式:C(n,m) = n!/[(n-m)! * m!]其中,n表示对象的总数,m表示要排列或组合的对象的数量,n!表示n的阶乘。
2. 二项式系数在组合数学中,二项式系数表示的是两个数的二项式展开系数,它也是组合数学中的重要概念。
二项式系数的计算公式为:C(n,m) = n!/[(n-m)! * m!]二项式系数在组合数学中起到了非常重要的作用,它们具有许多重要的性质和应用。
二、组合数学的应用领域1. 组合数学在计算机科学中的应用在计算机科学中,组合数学是一门非常重要的学科。
组合数学的许多概念和方法被广泛应用于算法设计、图论、密码学、数据压缩等领域。
例如,在算法设计中,对于排列和组合的问题,组合数学可以提供有效的算法和优化策略。
在密码学中,组合数学的概念被用于设计和分析密码算法的安全性。
2. 组合数学在信息技术中的应用在信息技术领域中,组合数学也扮演着重要的角色。
例如,编码理论中的纠错码和压缩码的设计就依赖于组合数学的概念和方法。
另外,在网络优化、通信网络设计等问题中,组合数学的知识也能够提供宝贵的解决思路。
3. 组合数学在统计学中的应用在统计学中,组合数学可以用于描述和统计样本空间以及事件的可能性。
组合数学中的概率论和统计学概念有紧密的联系,例如样本空间的总数、事件的发生概率等都可以通过组合数学的方法进行计算和分析。
此外,组合数学还在实验设计、随机模型等方面发挥着重要作用。
初见组合数理及其应用

初见组合数理及其应用组合数学是数学中的一门重要学科,涉及到离散的、有限的、不相关的对象的研究。
它的理论基础和方法在现代数学和应用中具有广泛的应用。
本文将介绍组合数理的基本概念、方法和应用领域。
一、基础概念组合数学的基础概念主要包括组合、排列和选择。
1.1 组合在组合数学中,组合是指从给定的n个不同元素中选取k个元素的方式数目,记作C(n,k)。
组合数的计算公式为:C(n,k) = n! / (k!(n-k)!)其中,n!表示n的阶乘,即n! = n*(n-1)*(n-2)*...*2*1。
1.2 排列排列是指从给定的n个不同元素中选取k个元素并按照一定顺序排列的方式数目,记作P(n,k)。
排列数的计算公式为:P(n,k) = n! / (n-k)!1.3 选择选择是指从给定的n个不同元素中选取0个或多个元素的方式数目,记作2^n。
二、常用组合数理方法组合数学包含一系列常用的方法,常见的有容斥原理、递推关系、生成函数和图论等。
2.1 容斥原理容斥原理是组合数学中一种计算交集和并集元素个数的方法。
它的核心思想是通过相减来排除重复计数。
容斥原理在概率论、数论和组合优化等领域有广泛的应用。
2.2 递推关系递推关系是指通过已知的初始条件和递推公式来计算组合数的方法。
常见的递推关系有杨辉三角形和斯特林数。
递推关系在组合计数和计算复杂度等方面有重要的应用。
2.3 生成函数生成函数是将数列表示为形式幂级数的方法,使得数列的运算可以转化为幂级数的运算。
生成函数常用于求解组合数学中的递推关系、计数问题和概率问题等。
2.4 图论图论是组合数学的一个重要分支,研究由结点和边构成的图的性质和关系。
图论在计算机科学、网络分析和运筹学等领域有广泛的应用。
三、组合数学的应用领域组合数学作为一门基础学科,广泛应用于各个领域。
3.1 计算机科学在计算机科学中,组合数学的方法和思想被广泛用于算法设计、图像处理、密码学和数据压缩等领域。
计算机数学基础-数值分析与组合数学第二版下册教学设计

计算机数学基础-数值分析与组合数学第二版下册教学设计一、教学目标本教材是计算机数学基础的一部分,主要介绍数值分析与组合数学的相关知识。
通过本课程的学习,学生应该能够:1.掌握数值分析的基本原理和方法;2.熟练应用常用数值分析算法,如牛顿迭代法、二分法等;3.熟悉组合数学的基本概念和方法;4.掌握排列、组合、多重集合等概念,并能够应用到实际问题中。
二、教学内容与进度安排1. 数值分析第1章引言第2章非线性方程的数值解法第3章线性方程组的数值解法第4章差分法第5章插值法第6章数值微积分第7章数值积分第8章常微分方程的初值问题2. 组合数学第1章引言第2章排列、组合与离散概率第3章二项式系数第4章多重集合第5章递推关系与生成函数第6章偏序与格3. 实践环节在课程中,我们将通过各种实例和案例让学生更好地理解和掌握所学知识。
同时,实践环节也是促进学生思考和创新的一个重要机会。
三、教学方法与评价方法1. 教学方法本课程主要采用“讲授+实践”的教学模式。
具体包括:1.讲授:由教师进行讲述和解释;2.实践:通过项目、应用案例等实践环节,让学生积累实际经验,加深自己的理解;3.评价:通过每次课程作业和期末考试等多个环节对学生进行评价和反馈。
2. 评价方法对于学生的学习成果,我们将主要采用以下方法进行评价:1.课程作业:每周布置一定量的作业,检验学生掌握情况;2.课堂测试:随时进行小测验,帮助学生巩固所学知识;3.期末考试:检验学生对整个课程的综合掌握情况。
四、参考书目1.《数值分析》(第2版),北京:高等教育出版社,2014年;2.《组合数学》(第2版),北京:高等教育出版社,2011年;3.《计算机数学基础》(第3版),北京:清华大学出版社,2015年。
五、教学团队本课程由清华大学计算机科学与技术系教师组成的团队授课,教师有多年数值分析和组合数学的教学和研究经验,充分保证了教学质量和水平。
组合数学计算机

组合数学计算机组合数学是一门数学分支,研究的是离散的对象之间的组合关系。
它广泛应用于计算机科学中,尤其在算法设计和分析、概率统计等领域起着重要的作用。
本文将介绍组合数学在计算机科学中的应用,并讨论其中一些经典的问题和算法。
一、排列组合问题在计算机科学中,很多问题都可以归结为排列组合问题。
排列组合问题是指从给定的一组元素中挑选部分元素并进行排列或组合的计数问题。
在解决这类问题时,组合数学提供了严密的理论和有效的算法。
1.选择问题选择问题是指从一个集合中选择出k个元素的问题。
对于选择问题,组合数学中的排列和组合公式可以计算出所有可能的选择数量。
这在算法设计中经常被用于问题、优化问题等。
2.火柴棍问题火柴棍问题是一个经典的排列组合问题,通过排列火柴棍构成数字,计算出能够构成给定数字的不同组合数量。
这个问题可以应用于密码学、密码破解等领域。
二、图论与组合计数图论是计算机科学中一个重要的领域,而组合数学为图论提供了许多有力的工具和技巧。
在图论中,有许多与组合计数有关的问题,如图的着色、生成树计数等。
1.图的着色问题图的着色问题是指给图中的每个顶点分配一个颜色,使得相邻的顶点具有不同的颜色。
这个问题可以应用于任务调度、图像处理等领域。
组合数学中的计数方法可以计算出图的不同着色方案数量,帮助寻找最优解。
2.生成树计数生成树是图论中一个重要的概念,用于描述图中包含所有顶点但没有回路的子图。
生成树计数问题是指计算有n个顶点的无向图的生成树数量。
组合数学中的哈尔特变换和矩阵树定理等方法可以解决这一问题,广泛应用于网络优化、数据压缩等领域。
三、排列组合算法为了解决排列组合问题,计算机科学中有许多高效的算法。
下面介绍几种常见的算法。
1.递归算法递归算法是解决排列组合问题的一种常见方法。
通过将问题不断分解为更小的子问题,递归算法可以计算出所有的组合或排列。
例如,用递归算法计算n个元素的全排列可以通过不断将第一个元素与其他元素进行交换,并对剩余的n-1个元素进行全排列来实现。
组合数学基本概念

组合数学基本概念组合数学是数学的一个分支,主要研究离散对象的组合方法与规律。
在数学和计算机科学等领域中有着广泛的应用。
本文将介绍组合数学的基本概念,包括排列、组合、二项定理和组合恒等式等内容。
一、排列排列是指从一组对象中选取若干个进行排列,所得到的有序数列。
在组合数学中,我们通常用P(n, k)表示从n个不同对象中选取k个对象进行排列的方法数。
其中,n表示对象的个数,k表示选取的对象个数。
二、组合组合是指从一组对象中选取若干个进行组合,所得到的无序子集。
在组合数学中,我们通常用C(n, k)表示从n个不同对象中选取k个对象进行组合的方法数。
其中,n表示对象的个数,k表示选取的对象个数。
排列和组合之间的关系可以通过以下公式来表示:C(n, k) = P(n, k) / k!其中,k!表示k的阶乘。
三、二项式定理二项式定理是组合数学中的一个重要定理,它给出了两个数之和的幂展开的表达式。
二项式定理可以表示如下:(x + y)^n = C(n, 0) * x^n * y^0 + C(n, 1) * x^(n-1) * y^1 + ... + C(n, k) * x^(n-k) * y^k + ... + C(n, n) * x^0 * y^n其中,n为非负整数,x和y为实数。
四、组合恒等式在组合数学中,存在许多有趣的恒等式,它们是各种排列和组合方法之间的等式关系。
以下列举几个常见的组合恒等式:1. Pascal恒等式C(n, k) = C(n-1, k-1) + C(n-1, k)2. 对称性C(n, k) = C(n, n-k)3. 合并C(n, k) + C(n, k+1) = C(n+1, k+1)4. 二项式定理的特例C(n, 0)^2 + C(n, 1)^2 + ... + C(n, n)^2 = C(2n, n)这些组合恒等式在组合计数、概率论、图论等领域中具有广泛的应用,深刻显示了组合数学的美妙之处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业硕士学位论文计算机中的组合数学作者姓名学科专业工程数学指导教师培养院系Application of the Wavelet Analysis in the Fault Diagnosis of Rotating MachinesThe combination of mathematicsin the application of software engineeringCandidate:Supervisor:Beihang University, Beijing, China关于学位论文的独创性声明本人郑重声明:所呈交的论文是本人在指导教师指导下独立进行研究工作所取得的成果,论文中有关资料和数据是实事求是的。
尽我所知,除文中已经加以标注和致谢外,本论文不包含其他人已经发表或撰写的研究成果,也不包含本人或他人为获得北京航空航天大学或其它教育机构的学位或学历证书而使用过的材料。
与我一同工作的同志对研究所做的任何贡献均已在论文中作出了明确的说明。
若有不实之处,本人愿意承担相关法律责任。
学位论文作者签名:日期:年月日学位论文使用授权书本人完全同意北京航空航天大学有权使用本学位论文(包括但不限于其印刷版和电子版),使用方式包括但不限于:保留学位论文,按规定向国家有关部门(机构)送交学位论文,以学术交流为目的赠送和交换学位论文,允许学位论文被查阅、借阅和复印,将学位论文的全部或部分内容编入有关数据库进行检索,采用影印、缩印或其他复制手段保存学位论文。
保密学位论文在解密后的使用授权同上。
学位论文作者签名:日期:年月日指导教师签名:日期:年月日摘要20世纪的大事, 它改变了我们这个世界的面貌, 也带来了组合数学这个古老学科的再度辉煌, 本文从什么是组合数学、组合数学的几个著名问题以及计算机科学中的组合数学几个方面入手, 展示组合数学辉煌的明天…………………关键词:组合数学;离散数学;计算机科学Abstract20th century events, it has changed the face of our world, it also brings a combination of mathematical brilliance of this ancient discipline once again, what this paper is a combination of mathematics, combinatorics, and several well-known problem in combinatorics in computer science a few aspects, showing a brilliant future combinatorics…………………Key words:Combinatorial mathematics; discrete mathematics; Computer Science第一章组合数学的概念有人认为广义的组合数学就是离散数学, 也有人认为离散数学是狭义的组合数学和图论、代数结构、数理逻辑等的总称。
但这只是不同学者在叫法上的区别。
总之, 组合数学是一门研究离散对象的科学, 是计算机出现以后迅速发展起来的一门数学分支。
计算机科学是算法的科学, 而计算机所处理的对象大多是离散的数据, 所以离散对象的处理就成了计算机科学的核心。
现代数学分为两大类: 一类是研究连续对象的, 如分析、方程等, 另一类就是研究离散对象的组合数学。
组合数学是计算机科学、编码和密码学、物理、化学、生物等学科的理论基础, 也在企业管理、交通规划、战争指挥、金融分析、项目开发等领域起着重要作用。
微积分和近代数学的发展为近代工业革命奠定了基础, 而组合数学的发展则是奠定了现代计算机革命的基础。
计算机借助于程序来运行, 而程序就是算法, 计算机算法主要针对的是离散的对象, 正是因为有了组合算法才使计算机能够帮助人们决实际的种种问题, 成为人们生活、工作、研究的重要工具。
狭义的组合数学主要研究符合一定条件的组态对象、计数及构造等方面的问题。
组合数学研究的对象就是离散构形问题, 主要包括:构形是否存在, 即构形的存在性问题;如何做出构形, 即构形的构造性问题;可做出多少种不同的构形,即构形的计数问题;1/4找出最理想的构形, 即构形的最优化问题。
第二章组合数学中的几个著名问题1、地图着色问题地图着色问题即对世界地图着色, 每一种国家使用一种颜色。
如果要求相邻国家的颜色相异, 是否总共只需4种颜色?1852年,毕业于伦敦大学的弗南西斯·格思里(FrancisGuthrie)在一家科研单位从事地图着色工作时,发现“任何一张地图似乎只用四种颜色就能使具有共同边界的国家着上不同的色”。
用数学语言来表示,即“将平面任意地细分为不重迭的区域,每一个区域总可以用1,2,3,4这4个数字之一来标记,而不会使相邻的两个区域得到相同的数字一个多世纪以来,在“四色猜想”的研究证明过程中,由于对象问题复杂且缺乏数学通常的解题规范, 难以由人工直接验证,所以计算机科学工作者开始借助于计算机的帮助。
由此产生不少新的数学理论, 也发展了很多数学计算技巧, 如将地图的着色问题化为图论问题,丰富了图论的内容, 所引进的概念与方法刺激了拓扑学与图论的生长、发展。
不仅如此,“四色猜想”在有效地设计航空班机日程表,设计计算机的编码程序上都起到了推动作用。
1996年, NeilRobertso、Danielsan ders、PaulSeymour和RobinThomas等人使用电脑核查了633种特殊的状态对此问题进行了证明。
地图四色猜想是第一个主要由计算机完成证明的数学难题。
但是人们并不满足于计算机取得的成就,他们认为应该有可能存在一种更加简捷明快的书面证明方法。
所以直到现在,仍然有不少的数学家和众多数学爱好者都在寻找更简洁的证明方法。
2 、船夫过河问题在中小学的数学游戏中,有这样一个问题,一个船夫要把一只狼,一只羊和一棵白菜运过河。
问题是当人不在场时,狼要吃羊,羊要吃白菜,而他的船每趟只能运其中的一个。
他怎样才能把三者都运过河呢? 这就是一个很典型的线性规划的问题3 、中国邮差问题一个邮递员从邮局出发,要走完他所管辖的街道,也就是每一条路至少一次,他应该怎样选择什么样的路径,使路程最短。
这就是著名的“中国邮递员问题”,由中国组合数学家管梅谷教授提出,著名组合数学家J.Edmnds和他的合作者给出了一个解答。
这个问题存在多项式复杂度算法: 即先求出度为奇数的点,用匹配算法算出这些点间的连接方式,然后再用欧拉路径算法求解。
这是图论的问题。
第三章组合数学与计算机软件3.1 信息时代的组合数学现代数学可以分为两大类:一类是研究连续对象,如分析、方程等,另一类就是研究离散对象的组合数学。
计算机科学就是算法的科学,而计算机所处理的对象是离散的数据,研究离散对象的科学恰恰就是组合数学。
因此,在信息时代的今天,组合数学就是信息时代的数学。
3.2 组合数学在计算机软件的应用随着计算机科学的发展,组合数学也在迅猛发展,而组合数学在理论方面的推进也促进计算机科学的发展。
计算机软件空前发展的今天要求有相应的数学基础,组合数学作为大多数计算机软件设计的理论基础,它的重要性也就不言而喻。
组合数学在计算机方面的应用极其广泛。
计算机软件与各种算法的研究分不开,为了衡量一个算法的效率,必须估计用此算法解答具有给定长的输入(问题) 时需要多少步(例如算术运算、二进制比较、程序调用等的次数) 。
这要求对算法所需的计算量及存储单元数进行估算,这就是计数问题的内容,而组合数学分析主要研究内容就是计数和枚举的方法和理论。
3.3 组合数学在国外软件业的发展状况纵观全世界软件产业,美国处于绝对的垄断地位。
造成这种现象的一个根本原因就是计算机科学在美国的飞速发展。
当今计算机科学界的最权威人士很多都是研究组合数学出身的。
美国最重要的计算机科学系(MIT,Princeton,Stanford,Harvard,Yale, ⋯⋯) 都有第一流的组合数学家。
组合数学在国外早已成为十分重要的学科,甚至可以说是计算机科学的基础。
一些大公司,如IBM,A T&T 都有全世界最强的组合研究中心。
美国政府也成立了离散数学及理论计算机科学中心DIMACS (与Princeton 大学,Rut gers 大学,AT&T 联合创办的,设在Rutgers 大学) ,该中心已是组合数学理论计算机科学的重要研究阵地。
第四章计算机化简汉诺塔问题4.1 问题来源汉诺塔( Hanoi tower ) 问题源自一个古老的传说, 相传在古印度的一座神庙前, 有一根串着64 个祭神用的圆盘的柱子, 这些圆盘是按大小顺序叠放的, 大的在下, 小的在上, 僧侣们要将这些圆盘借助一个柱子移到另一个柱子上, 移动过程中一次只能移动一个, 并且要始终保证每个柱子上的圆盘大的在下, 小的在上,什么时候移完,就意味着世界末日的到来。
现我们假定三根柱子A、B、C, 圆盘的数量为n。
问题的图形描述如图1所示:4.2 分析问题当盘子数为2时,只需要将上面的一个盘子从A搬到B上,再将A柱的最下面的盘子从A 搬到C 柱上, 最后把B 上的盘子搬到C 柱上即可, 搬运次数为3次;现我们假定盘子数n时,把A柱上面的n-1盘子看成一个整体, 并设把A柱上的n-1个盘子搬到B上, 设需要的搬运次数为hn-1,则n个盘子的搬运过程类似于2个盘子,即把A柱上的n-1个盘子从A搬到B柱上,搬运次数为hn-1,再把A柱的最下面的盘子从A 搬到C柱上,搬运次数为1次,最后把B上的盘子搬到C柱上,搬运次数同样也为hn-1,总共的搬运次数为hn=2*hn-1+1。
4.3 基于JAVA 的解决方案由公式我们可以利用递推关系解决汉诺塔问题。
以下为程序中的类图。
图中出现了两个类, 类hannut a 主要用于进行递归调用, 谨记要设置递归出口; 类hannuta 1 进行输入、调用类hannut a进行递归、输出显示结果, 其中属性sum1用于存放最终结果, 字符串变量ns 来获取对话框中的字符, 属性n 则存放柱子上的圆盘数。
程序段如下:hannut a hh = new hannut a( ) ; / / 声明一个新类ns= JOpt ionPan e. sh owInp utDialog( "inputa number") ; / / 显示对话框n = Int eger. pars eInt ( n s) ; / / 从对话框获取数据, 并转换成整数sum1= hh.jiajia( n) ; / / 调用方法System.out.println( "sum = "+ sum 1) ; / /输出结果class hannuta/ / 命名类{ long jiajia( int n) / / 定义方法, 实现递归{long sum= 0; / / 存放递归结果if ( n= = 1) / / 递归出口sum = 1;elsesum = 2* jiajia( n- 1) + 1; / / 递归调用return sum; } / / 返回数值}4.4 结合组合数学化简问题上面用递推关系解答了这个计数问题, 现用母函数为工具求得计数序列的通用表达式, 从而化简递推关系。