组合数学在计算机中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

组合数学在计算机中的应用

组合数学,又称为离散数学,但有时人们也把组合数学和图论加在一起算成是离散数学。组合数学是计算机出现以后迅速发展起来的一门数学分支。计算机科学就是算法的科学,而计算机所处理的对象是离散的数据,所以离散对象的处理就成了计算机科学的核心,而研究离散对象的科学恰恰就是组合数学。随着计算机科学的发展,组合数学也在迅猛发展,而组合数学在理论方面的推进也促进计算机科学的发展。计算机软件空前发展的今天要求有相应的数学基础,组合数学作为大多数计算机软件设计的理论基础,它的重要性也就不言而喻。

就从目前我们在学习c++等语言进行编程解决问题看,组合数学的一些知识就能得到运用。例如Hannoi塔问题。用刚刚学的递推关系分析,设h(n)为n个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a柱上的盘子直接移动到c柱就可以了,故h(1)=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c柱;最后,将b柱上的小盘子移到c柱上,共计3个盘次,故h(2)=3。以此类推,当a柱上有n(n>=2)个盘子时,总是先借助c柱把上面的n-1个盘移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总共移动h(n-1)+1+h(n-1)个盘次。所以:h(n)=2h(n-1)+1 (边界条件:h1=1)。而一旦得出了这个递推关系式,就很容易运用递归算法来解决这样一个问题,递归算法因为是运用栈的方式进行加深与回溯,这个栈是系统给出的,故大大减少代码量。因此利用组合数学中的知识很容易抽象出数学模型再用相应的编程技巧来解决问题。

另外,我们最近数据结构正好学到了图这一章节。图是一种非常重要的数据存储结构,而在图的建立,遍历,生成树等问题的解决算法上基本都运用了组合数学中的知识。例如在最小生成树算法中间需要判断是否有环的问题,中间算法思想中就包含了欧拉图判定定理,(1) 无向连通图G是欧拉图=>G不含奇数度的结点(即G的所有结点的度均为偶数(0视为偶数));(定理1)

(2) 非0平凡图G有欧拉通路=>G最多有两个奇数度的结点;(定理1的推论)

(3) 有向图D是欧拉图=>D连通且D的所有结点的入度等于出度。有向连通图有欧拉通路=>除两个结点外,其余结点的出度均等于入度,且这两点deg-(v)-deg+(v)=±1。(定理2) 除此之外,在那些我们还没有接触的计算机领域中,处处也有组合数学的身影。如:信息检索是计算机科学中一个基本而又重要的问题。如何组织数据,使用什么样的查找方法,对检索的效率有很大的影响。所熟知的在有序表结构上的二分搜索算法是一种很有效的方法,那么二分搜索是最好的算法吗?Yao利用Ramsey数对这一问题作了肯定的回答。

具体地讲,假设一个表有n个不同的项,其元素取自键空间M={1,2,,, m } ,希望找到在表中存储M的任意n元子集S的方法,使得容易回答下述询问: X在S中吗?如何存储M的n元子集的规则称为一个表结构或( m , n)-表结构。最简单的表结构是有序表结构,它是按上升序列出S中的元素。更一般的是按置换排序的表结构,其方法是固定{1,2,,, n}的一个置换,根据比置换的次序列出S中的元素。

信息检索的计算复杂性依赖于表结构和搜索策略。复杂性的度量是最坏情形下确定x

是否在S中所需要的询问次数。例如,对有序表结构,如果用二分搜索,所需要的询问次数是[log2( n+ 1) ]。复杂性f ( m , n )定义为所有的( m , n)-表结构和搜索策略下的复杂性的最小值。关于f ( m , n ), Yao证明了:

定理1 对每个n ,存在数N ( n) 使得f ( m , n) = [log2 ( n +1 ) ]对所有m>=N ( n) 成立。据此定理,对充分大的m ,就信息检索来说,用有序表结构是最有效的方法。

利用下述两个引理,立即可得此定理的证明。

引理1 若m >=2 n -1 , n >=2 ,对于按置换排序的表结构。无论采用何种策略,在最坏情形

下要确定x 是否在S 中至少需要[log2 ( n +1 ) ]次检查。

引理2 给定n ,存在数N ( n) 具有下述性质:若m >=N ( n) ,且给定一个( m , n) 2表结构,则存在有2 n -1个键的集合K ,使得对应于K 的n 元子集的表形成按置换排序的表结构。

对一个给定的( m , n )表结构和搜索策略以及mEN ( n) ,可找到满足引理2的集合K ,再由引理1,即使限制在集合K上,在最坏情况下至少需要[log 2( n+ 1) ]检查。因而f( m ,n)E[log2( n+ 1) ]。但有序表上的二分搜索的最坏情形复杂性是[log2( n+ 1) ] ,故有f ( m , n)=[log2( n+ 1) ],这就证明了定理1,从而知道二分搜索对大的键空间是最好的检索方法。

总而言之,组合数学在计算机领域的应用是非常广泛的,可以说两者发展是相辅相成的。要成为一名合格的计算机系学生,组合数学必慎待之。

注:最后一个对于信息检索分析过程摘自 A. C. Yao. Should T ables Be Sorted[ J]. ACM, 1981, 28 相应中文版本

相关文档
最新文档