组合数学在软件领域的运用

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

 

关键词: 组合数学;计算机;软件;算法

 

引言 就从目前我们在学习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 数据结构-图

图是一种非常重要的数据存储结构,而在图的建立,遍历,生成树等问题的解决算法上基本都运用了组合数学中的知识。例如在最小生成树算法中间需要判断是否有环的问题,中间算法思想中就包含了欧拉图判定定理,(1) 无向连通图G是欧拉图=>G不含奇数度的结点(即G的所有结点的度均为偶数(0视为偶数));(定理1)
(2) 非0平凡图G有欧拉通路=>G最多有两个奇数度的结点;(定理1的推论)
(3) 有向图D是欧拉图=>D连通且D的所有结点的入度等于出度。有向连通图有欧拉通路=>除两个结点外,其余结点的出度均等于入度,且这两点deg-(v)-deg+(v)=±1。 (定理2)

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,从而知道二分搜索对大的键空间是最好的检索方法。

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

 

 

3 Ramsey 数在计算机科学中的应用

众所周知,若有 I + l 只鸽子同时飞进 I 个鸽巢中,则一定有某个鸽巢中至少飞进两只鸽,这就是有名的鸽 巢原理(也叫抽屉原理)。它非常简单,其正确性也显而易见,但却有很广泛的应用。鸽巢原理有如下重要的推 广:

Ramsey 定理 设 gl,g2,…,gI;t 是正整数,且 gi!(t i = l,2,…,I),则存在最小的正整数 (r 记作 (r gl,g2, … gI;t)使得:对任意 m 元集合 S,若 m! r,当把 S 的所有 t 元子集放到 I 个盒子里时,那么存在某个 (i l" i" I) 和某 gi 个元素,它的所有 t 元子集都在第 i 个盒子里。这是称 (r gl,g2,… gI;t)为 Ramsey 数。 上述定理是 Ramsey l930 年提出并给出证明。

当 t = l 时,Ramsey 定理就是加强形式的鸽巢原理,且容易求出

(r gl,g2,… gI;l)= # I i = l gi - I + l

Ramsey 定理是组合论中一个重要的存在性定理,它的发表推动了组合论等数理科学的发展,而且关于 Ramsey 定理和 Ramsey 数自身的研究目前已成为组合学中一个重要的分支——— I + l———Ramsey 理论。但是,Ramsey 定理只保证了 Ramsey 数的存在性,并没有给出计算 Ramsey 数的有效方法。目前,确定 Ramsey 数的问题仍是一 个尚未解决的大难题,要找到一个很小的 Ramsey 数是很困难的。虽然如此,由于其重要的理论价值和广泛的应 用价值,确定 Ramsey 数是很有意义的。下面用两个例子说明 Ramsey 数在信息检索、分组交换网设计等计算机科学领域中的重要应用。

 

 

4 分组交换网的设计

网络是当今计算机发展的一个特点,是进入信息社会的巨大推动力。分组交换网是采用分组交换技术的网 络,它从终端或计算机接收报文,把报文分割成分组,并按某种策略选择最佳路径在网中传输,到达目的地后再 将分组合并成报文交给目的终端或计算机。分组交换技术在网络设计中被广泛采用S . Boyles 和 G . EXoo在一 个称作 Bell System Singnaling Network(Bell 系统信令网络的分组交换网设计中用到了 Ramsey 数。 用顶点表示通信设备、用边表示通信链路,这样得到一个图。假定该图是完全图,即任意两点间都有一条边 相连。

在某些应用场合,顶点两两配合对作为个整体。保证在某些链路出故障不能使用时,任两对配对顶点 间都至少有一条链路畅通无阻,设顶点 xl,x2 组成一对,yl,y2 为一对,zl,z2 为一对,且故障 发生在诸如微波塔、中继站等中间设施上。在此类设施上的故障 将影响所有共享该设施的链路。对共享同一个中间设施的链路, 用同一种颜色来标记它们,如图 l 表示一个有 3 种中间设施的通 信网络。在图 l 中,若标记红色的中间设施出了故障,那么在顶点 对 xl,x2 和顶点 对 zl,z2 之 间 没 有 可 用 的 链 路,而 这 对 于 下 列 事 实:4 条边( xi,zi)构成一个单色的 C(4 4 个顶点的回路)。一般来 说,设计一个网络需决定中间设施的数量以及哪个链路使用哪个 设施。此外,在任何一个中间设施损坏时,希望所设计的网络中任 两对配对顶点间有一个可使用的链路。根据上面的讨论,应该避 免出现单色的 C4。

已证 Ramsey 数 (r C4,C4)= 6。因此,如果只有两个中间设 施,那么存在一个 5 个顶点的网络使得可以安排一种不出现单色 C4 的连接方式。在文献[3,6]中证明了 Ramsey 数 (r C4,C4,C4)= ll,所以存在一个 l0 个顶点的网络,它使用 3 个中间设施且没有单色的 C4。 前面说过,设计一个网络需要决定中间设施的数量以及哪个链路使用哪个设施。中间设施是很昂贵的,因 而希望使其数量尽可能地少。所以,人们自然要问:如果有一个 I 个顶点的网络,在不出现单色 C4 条件下中 间设施的最少个数是多少?换句话说,满足 (r C4,C4,…,C4)> I 的最小的 r 是多少比如对图 l 有 I = 6,由于 (r C4,C4)= 6,(r C4,C4,C4)= ll,所以 r = 3,即需要 3 个间设施。Boyles 和 EXoo 指出,在他们使用的场合,利 用 Erdos的下述结果足以估计 r 的值:一个 I 顶点图至少有 l 2 I3. 2 + l 4 I 条边,则它总包含有 C4。若 I 顶点

 

5 组合数学在密码学中的应用

随着组合数学的应用,密码领域开始出现新的变革,开始改变传统 RAS 体制,这种新变革以幂剩余函数为和,对毕达哥斯进行加密和解密的变化,改变了传统 RAS 体不能被直接破译的现状。 用组合函数进行论证表明,这种最新密码体制以最大质子因素的合数的因子分解为基础,安全性较高,远远高于传统的 RAS 机制的密码机制。

总结

组合数学和离散数学还有计算机都是研究的都是同样的一个东西,离散的对象。初学计算机会发现计算机是一个由各种“规则”组成的东西,你要去记住编程的模式,记住某些特定的算法,记住怎么去写递归,记住怎么听懂别人口里陌生的名词,记住怎么把它们规范的说出来,然后形成经验,你可能不知道它们的真正原理。但我们总是趋向于去描述事物的本质,所以会产生数学的这样的东西。从本质出发,不仅能够精准的解释那些已有的“规则”,还说不定可以根据推论,有更多的发现。比如一个学完数据结构的同学,可以分分钟写出来dijkstra算法,但是他或许就不知道这个算法本质是动态规划,可能连动态转移方程都写不出来。但是他也不需要知道这些,很多原理不去深究也不会妨碍你成为一个伟大的人。但学些数学又是非常有趣的不是吗,我们总有一颗究根结底的心。组合数学会告诉你很多东西的原理,比如递归,比如鸽笼原理和一大堆你可能想不到的推论,根据这些推论又可以产生一些新的算法。在最开始接触树这个概念的时候,我还很小,那时候我只知道怎么去描述它,怎么去用它,怎么去构造它。后来我不止一次问自己,它说到底是什么东西,怎么用数学语言去解释呢,怎么用一个统一的框架去覆盖它们,并且我能够使用数学运算的方法去取代我的经验法。所以这就是这两种数学诞生的一个重要原因。组合数学和离散数学是两个互相渗透,又互相分割的部分吧。都是由关联性不是很强的部分组成(比如第一章学的不好并不会影响后面的学习),这些组成两者有很多的交叉(比如学完离散再看组合发现很多东西都很眼熟)。这两个感觉完全就是在一个成熟的体系中建立的。

 

 

参考文献

[1] 陈家,杨光崇.组合数学在计算机科学中的应用[J].成都信息工程学院学报,2006(S1):94-9

[2] 杨策.探究软件工程领域中组合数学的应用[J].通讯世界,2015(24):320-321.

[3] 郭燕莎. 组合算法的研究与实现[D].天津工业大学,2008.

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值