离散数学 最小生成树
- 格式:doc
- 大小:43.00 KB
- 文档页数:7
离散数学知识点总结总结离散数学知识点第二章命题逻辑1.→,前键为真,后键为假才为假;,相同为真,别同为假;2.主析取范式:极小项(m)之和;主合取范式:极大项(M)之积;3.求极小项时,命题变元的确信为1,否定为0,求极大项时相反;4.求极大极小项时,每个变元或变元的否定只能浮现一次,求极小项时变元别够合取真,求极大项时变元别够析取假;5.求范式时,为保证编码别错,命题变元最好按P,Q,R的顺序依次写;6.真值表中值为1的项为极小项,值为0的项为极大项;7.n个变元共有n2个极小项或极大项,这n2为(0~n2-1)刚好为化简完后的主析取加主合取;8.永真式没有主合取范式,永假式没有主析取范式;9.推证蕴含式的办法(=>):真值表法;分析法(假定前键为真推出后键为真,假定前键为假推出后键也为假)10.命题逻辑的推理演算办法:P规则,T规则①真值表法;②直截了当证法;③归谬法;④附加前提法;第三章谓词逻辑1.一元谓词:谓词惟独一具个体,一元谓词描述命题的性质;多元谓词:谓词有n个个体,多元谓词描述个体之间的关系;2.全称量词用蕴含→,存在量词用合取^;3.既有存在又有全称量词时,先消存在量词,再消全称量词;第四章集合1.N,表示自然数集,1,2,3……,别包括0;2.基:集合A中别同元素的个数,|A|;3.幂集:给定集合A,以集合A的所有子集为元素组成的集合,P(A);4.若集合A有n个元素,幂集P(A)有n2个元素,|P(A)|=||2A=n2;5.集合的分划:(等价关系)①每一具分划基本上由集合A的几个子集构成的集合;②这几个子集相交为空,相并为全(A);6.集合的分划与覆盖的比较:分划:每个元素均应浮现且仅浮现一次在子集中;覆盖:只要求每个元素都浮现,没有要求只浮现一次;第五章关系1.若集合A有m个元素,集合B有n个元素,则笛卡尔A×B的基2种别同的关系;数为mn,A到B上能够定义mn2.若集合A有n个元素,则|A×A|=2n,A上有22n个别同的关系;3.全关系的性质:自反性,对称性,传递性;空关系的性质:反自反性,反对称性,传递性;全封闭环的性质:自反性,对称性,反对称性,传递性;4.前域(domR):所有元素x组成的集合;后域(ranR):所有元素y组成的集合;5.自反闭包:r(R)=RUI;x对称闭包:s(R)=RU1-R;传递闭包:t(R)=RU2R U3R U……6.等价关系:集合A上的二元关系R满脚自反性,对称性和传递性,则R 称为等价关系;7.偏序关系:集合A上的关系R满脚自反性,反对称性和传递性,则称R 是A上的一具偏序关系;8.covA={|x,y属于A,y盖住x};9.极小元:集合A中没有比它更小的元素(若存在也许别唯一);极大元:集合A中没有比它更大的元素(若存在也许别唯一);最小元:比集合A中任何其他元素都小(若存在就一定唯一);最大元:比集合A中任何其他元素都大(若存在就一定唯一);10.前提:B是A的子集上界:A中的某个元素比B中任意元素都大,称那个元素是B的上界(若存在,也许别唯一);下界:A中的某个元素比B中任意元素都小,称那个元素是B的下界(若存在,也许别唯一);上确界:最小的上界(若存在就一定唯一);下确界:最大的下界(若存在就一定唯一);第六章函数2种别同的关系,有m n种别同的函1.若|X|=m,|Y|=n,则从X到Y有mn 数;2.在一具有n个元素的集合上,能够有22n种别同的关系,有n n种别同的函数,有n!种别同的双射;3.若|X|=m,|Y|=n,且m,满脚f(a*b)=f(a)^f(b),则f为由到的同态映射;若f是双射,则称为同构;第八章群1.广群的性质:封闭性;半群的性质:封闭性,结合律;含幺半群(独异点):封闭性,结合律,有幺元;群的性质:封闭性,结合律,有幺元,有逆元;2.群没有零元;3.阿贝尔群(交换群):封闭性,结合律,有幺元,有逆元,交换律;4.循环群中幺元别能是生成元;5.任何一具循环群必然是阿贝尔群;第十章格与布尔代数1.格:偏序集合A中任意两个元素都有上、下确界;2.格的基本性质:1) 自反性a≤a 对偶: a≥a2) 反对称性a≤b ^ b≥a => a=b对偶:a≥b ^ b≤a => a=b3) 传递性a≤b ^ b≤c => a≤c对偶:a≥b ^ b≥c => a≥c4) 最大下界描述之一a^b≤a 对偶avb≥aA^b≤b 对偶avb≥b5)最大下界描述之二c≤a,c≤b => c≤a^b对偶c≥a,c≥b =>c≥avb6) 结合律a^(b^c)=(a^b)^c对偶 av(bvc)=(avb)vc7) 等幂律a^a=a 对偶 ava=a8) 汲取律a^(avb)=a 对偶 av(a^b)=a9) a≤b a^b=a avb=b10) a≤c,b≤d => a^b≤c^d avb≤cvd11) 保序性b≤c => a^b≤a^c avb≤avc12)分配别等式av(b^c)≤(avb)^(avc) 对偶a^(bvc)≥(a^b)v(a^c)13)模别等式a≤c av(b^c)≤(avb)^c3.分配格:满脚a^(bvc)=(a^b)v(a^c)和av(b^c)=(avb)^(avc);4.分配格的充要条件:该格没有任何子格与钻石格或五环格同构;5.链格一定是分配格,分配格必然是模格;6.全上界:集合A中的某个元素a大于等于该集合中的任何元素,则称a为格的全上界,记为1;(若存在则唯一)全下界:集合A中的某个元素b小于等于该集合中的任何元素,则称b为格的全下界,记为0;(若存在则唯一)7.有界格:有全上界和全下界的格称为有界格,即有0和1的格;8.补元:在有界格内,假如a^b=0,avb=1,则a和b互为补元;9.有补格:在有界格内,每个元素都至少有一具补元;10.有补分配格(布尔格):既是有补格,又是分配格;11.布尔代数:一具有补分配格称为布尔代数;第十一章图论1.邻接:两点之间有边连接,则点与点邻接;2.关联:两点之间有边连接,则这两点与边关联;3.平庸图:惟独一具孤立点构成的图;4.简单图:别含平行边和环的图;5.无向彻底图:n个节点任意两个节点之间都有边相连的简单无向图;有向彻底图:n个节点任意两个节点之间都有边相连的简单有向图;6.无向彻底图有n(n-1)/2条边,有向彻底图有n(n-1)条边;7.r-正则图:每个节点度数均为r的图;8.握手定理:节点度数的总和等于边的两倍;9.任何图中,度数为奇数的节点个数必然是偶数个;10.任何有向图中,所有节点入度之和等于所有节点的出度之和;11.每个节点的度数至少为2的图必然包含一条回路;12.可达:关于图中的两个节点v,j v,若存在连接i v到j v的路,则称iv与j v相互可达,也称i v与j v是连通的;在有向图中,若存在i v到j v i的路,则称v到j v可达;i13.强连通:有向图章任意两节点相互可达;单向连通:图中两节点至少有一具方向可达;弱连通:无向图的连通;(弱连通必然是单向连通)14.点割集:删去图中的某些点后所得的子图别连通了,假如删去其他几个点后子图之间仍是连通的,则这些点组成的集合称为点割集;割点:假如一具点构成点割集,即删去图中的一具点后所得子图是别连通的,则该点称为割点;15.关联矩阵:M(G),m是i v与j e关联的次数,节点为行,边为列;ij无向图:点与边无关系关联数为0,有关系为1,有环为2;有向图:点与边无关系关联数为0,有关系起点为1终点为-1,关联矩阵的特点:无向图:①行:每个节点关联的边,即节点的度;②列:每条边关联的节点;有向图:③所有的入度(1)=所有的出度(0);16.邻接矩阵:A(G),a是i v邻接到j v的边的数目,点为行,点为ij列;17.可达矩阵:P(G),至少存在一条回路的矩阵,点为行,点为列;P(G)=A(G)+2A(G)+3A(G)+4A(G)可达矩阵的特点:表明图中任意两节点之间是否至少存在一条路,以及在任何节点上是否存在回路;A(G)中所有数的和:表示图中路径长度为1的通路条数;2A(G)中所有数的和:表示图中路径长度为2的通路条数;3A(G)中所有数的和:表示图中路径长度为3的通路条数;4A(G)中所有数的和:表示图中路径长度为4的通路条数;P(G)中主对角线所有数的和:表示图中的回路条数;18.布尔矩阵:B(G),v到j v有路为1,无路则为0,点为行,点为i列;19.代价矩阵:邻接矩阵元素为1的用权值表示,为0的用无穷大表示,节点自身到自身的权值为0;20.生成树:只拜访每个节点一次,通过的节点和边构成的子图;21.构造生成树的两种办法:深度优先;广度优先;深度优先:①选定起始点v;②挑选一具与v邻接且未被拜访过的节点1v;③从v动身按邻接方向接着拜访,当遇到一具节点所有邻接1点均已被拜访时,回到该节点的前一具点,再寻求未被拜访过的邻接点,直到所有节点都被拜访过一次;广度优先:①选定起始点v;②拜访与v邻接的所有节点1v,2v,……,k v,这些作为第一层节点;③在第一层节点中选定一具节点v为起点;1④重复②③,直到所有节点都被拜访过一次;22.最小生成树:具有最小权值(T)的生成树;23.构造最小生成树的三种办法:克鲁斯卡尔办法;管梅谷算法;普利姆算法;(1)克鲁斯卡尔办法①将所有权值按从小到大罗列;②先画权值最小的边,然后去掉其边值;重新按小到大排序;③再画权值最小的边,若最小的边有几条相同的,挑选时要满脚别能浮现回路,然后去掉其边值;重新按小到大排序;④重复③,直到所有节点都被拜访过一次;(2)管梅谷算法(破圈法)①在图中取一回路,去掉回路中最大权值的边得一子图;②在子图中再取一回路,去掉回路中最大权值的边再得一子图;③重复②,直到所有节点都被拜访过一次;(3)普利姆算法①在图中任取一点为起点v,连接边值最小的邻接点2v;1②以邻接点v为起点,找到2v邻接的最小边值,假如最小边值2比v邻接的所有边值都小(除已连接的边值),直截了当连接,否则退回1。
离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。
实验11实验内容(1)求任意一个命题公式的真值表。
(2)利用真值表求任意一个命题公式的主范式。
(3)利用真值表进行逻辑推理。
注:(2)和(3)可在(1)的基础上完成。
2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。
例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。
本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。
目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。
3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。
真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。
n个命题变元的每组赋值的生成算法可基于这种思想。
含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。
为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。
算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。
算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。
实验21实验内容(1)求任意两个集合的交集、并集、差集。
(2)求任意一个集合的幂集。
离散数学最小生成树例题
离散数学最小生成树例题是:
给定一个带权无向图G,其中顶点集V={1,2,3,4,5},边集E={(1,2),(1,3),(1,4),(2,5),(3,5)},权值集合W={1,2,3,4,5}。
用Kruskal算法求最小生成树。
首先对边集E和权值集合W按照边的权值从小到大进行排序;然后初始化一个空的并查集和一个空的森林;将并查集的根节点设置为第一个顶点,森林中添加这个顶点;对于每一条边,如果它的两个顶点不在同一个集合中,将这条边添加到森林中,并将这两个顶点合并到同一个集合中;最后森林中的边就是最小生成树。
- - 优质资料编号 题目答案题型 分值大纲难度 11 设集合A={a ,b ,c ,d}上的关系R={<a , b > ,< b , a > ,< b, c > , < c ,d >}用矩阵运算求出R 的传递闭包t (R)。
答: ⎪⎪⎪⎪⎪⎭⎫⎝⎛=0000100001010010R M , ⎪⎪⎪⎪⎪⎭⎫⎝⎛==00000000101001012R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛==000000000101101023R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛==000000001010010134R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛=+++=0000100011111111432)(R R R R R t M M M M M∴t (R)={<a , a> , <a , b> , < a , c> , <a , d > , <b , a > , < b ,b > , < b , c . > , < b , d > , < c , d > }简答题8 4.332如下图所示的赋权图表示某七个城市721,,,v v v 及预先算出它们之间的一些直接通信线路造价,试给出一个设计方案,使得各城市之间能够通信而且总造价答: 用Kruskal 算法求产生的最优树。
算法略。
结果如图:树权C(T)=23+1+4+9+3+17=57即为总造价。
简答题8 7.2 3- - 优质资料最小。
3设<Z 6,+6>是一个群,这里+6是模6加法,Z 6={[0 ],[1],[2],[3],[4],[5]},试求出<Z 6,+6>的所有子群。
答: 子群有<{[0]},+6>;<{[0],[3]},+6>;<{[0],[2],[4]},+6>;<{Z 6},+6>简答题8 8.3 34权数1,4,9,16,25,36,49,64,81,100构造一棵最优二叉树。
实验一油管铺设
实验准备
最小生成树问题,求最小生成树的Prim算法
实验目的
运用最小生成树思想和求最小生成树程序解决实际问题
实验过程
八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。
问从海岸经1号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?
实验二最短路问题
实验准备
图的邻接矩阵,求最短路的Dijkstra算法
实验目的
运用最短路思想和求最短路程序解决实际问题
实验过程
某建筑公司签订了一项合同,要为一家制造公司建造一座新的加工厂。
合同规定工厂的完工期限为12个月。
要是工厂不能在一年内完工,就要赔款,因此建筑公司认真分析,找出建筑工厂必须完成的各道工序和这些工序之间的先后关系,并估计出它们延续的时间,如下表所示。
为建筑公司制定工程完工计划提供理论依据。
实验三中国邮递员问题
实验准备
欧拉图,中国邮递员问题(G是欧拉图;G不是欧拉图:G正好有两个奇次顶点,G有2n 个奇次顶点n≥2)
实验目的
通过程序实现中国邮递员问题,强化其基本思想和实际应用
实验过程
针对下图所示加权图G,给出中国邮递员问题的解决方案。
实验四旅行推销商问题
实验准备
哈密顿图,旅行推销商问题
实验目的
通过程序实现旅行推销商问题,强化其基本思想和实际应用,并初步了解NP-难题。
实验过程
自拟一加权连通图,求出具有充分小权的哈密顿回路。
编号 题目答案题型 分值 大纲难度 11 设集合A={a ,b ,c ,d}上的关系R={<a , b > ,< b , a > ,< b, c > , <c ,d >}用矩阵运算求出R 的传递闭包t (R)。
答: ⎪⎪⎪⎪⎪⎭⎫⎝⎛=0000100001010010R M , ⎪⎪⎪⎪⎪⎭⎫⎝⎛==00000000101001012R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛==000000000101101023R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛==000000001010010134R R R M M M ⎪⎪⎪⎪⎪⎭⎫⎝⎛=+++=0000100011111111432)(R R R R R t M M M M M∴t (R)={<a , a> , <a , b> , < a , c> , <a , d > , <b , a > , < b ,b > , < b , c . > , < b , d > , < c , d > }简答题8 32如以下图所示的赋权图表示某七个城市721,,,v v v 及预先算出它们之间的一些直接通信线路造价,试给出一个设计方案,使得各城市之间能够通信而且总造价最小。
答: 用Kruskal 算法求产生的最优树。
算法略。
结果如图:树权C(T)=23+1+4+9+3+17=57即为总造价。
简答题833设<Z6,+6>是一个群,这里+6是模6加法,Z6={[0 ],[1],[2],[3],[4],[5]},试求出<Z6,+6>的所有子群。
答: 子群有<{[0]},+6>;<{[0],[3]},+6>;<{[0],[2],[4]},+6>;<{Z6},+6> 简答题8 34权数1,4,9,16,25,36,49,64,81,100构造一棵最优二叉树。
详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)1.最小生成树:无向连通图的所有生成树中有一棵边的权值总和最小的生成树1.1 问题背景:假设要在n个城市之间建立通信联络网,则连通n个城市只需要n—1条线路。
这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。
在每两个城市之间都可以设置一条线路,相应地都要付出一定的经济代价。
n个城市之间,最多可能设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢?1.2 分析问题(建立模型):可以用连通网来表示n个城市以及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价。
对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以是一个通信网。
即无向连通图的生成树不是唯一的。
连通图的一次遍历所经过的边的集合及图中所有顶点的集合就构成了该图的一棵生成树,对连通图的不同遍历,就可能得到不同的生成树。
图G5无向连通图的生成树为(a)、(b)和(c)图所示:G5G5的三棵生成树:可以证明,对于有n 个顶点的无向连通图,无论其生成树的形态如何,所有生成树中都有且仅有n-1 条边。
1.3最小生成树的定义:如果无向连通图是一个网,那么,它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称为最小生成树。
最小生成树的性质:假设N=(V,{ E}) 是个连通网,U是顶点集合V的一个非空子集,若(u,v)是个一条具有最小权值(代价)的边,其中,则必存在一棵包含边(u,v)的最小生成树。
1.4 解决方案:两种常用的构造最小生成树的算法:普里姆(Prim)和克鲁斯卡尔(Kruskal)。
他们都利用了最小生成树的性质1.普里姆(Prim)算法:有线到点,适合边稠密。
时间复杂度O(N^2)假设G=(V,E)为连通图,其中V 为网图中所有顶点的集合,E 为网图中所有带权边的集合。
离散数学期末复习要点与重点离散数学是计算机科学及其他相关学科中的一门重要的基础课程。
它主要研究离散的结构和对象,以及它们之间的关系和性质。
离散数学的核心内容包括集合论、关系、图论、布尔代数和逻辑等。
下面是离散数学期末复习的要点与重点。
一、集合论1.集合的基本概念,包括元素、子集、幂集、集合的运算等。
2.集合的性质,如交换律、结合律、分配律等。
3.集合的表示方法,包括列举法、描述法、特征函数法等。
4.集合的运算,如并、交、差、对称差等。
5.集合的关系,包括子集关系、相等关系、真子集关系等。
二、关系1.关系的基本概念,包括序偶、笛卡尔积、关系的定义等。
2.关系的性质,如自反性、对称性、传递性等。
3.关系的表示方法,包括关系矩阵、关系图、关系表等。
4.关系的运算,如复合、逆、幂等等。
5.等价关系和偏序关系的特性和性质。
6.关系的闭包,包括自反闭包、对称闭包、传递闭包等。
三、图论1.图的基本概念,包括顶点、边、路径、环等。
2.不同类型的图,包括无向图、有向图、简单图、多重图等。
3.图的表示方法,包括邻接矩阵、邻接表等。
4.图的遍历算法,包括深度优先(DFS)和广度优先(BFS)。
5. 最小生成树算法,包括Prim算法和Kruskal算法。
6. 最短路径算法,包括Dijkstra算法和Floyd-Warshall算法。
四、布尔代数1.布尔代数的基本运算,包括与、或、非等。
2.布尔函数的最小项和最大项表示方法。
3.布尔函数的化简,包括代数化简和卡诺图化简。
4.布尔函数的特性,包括恒等律、零律、单位律等。
5.布尔函数的逻辑门电路实现,包括与门、或门、非门等。
五、逻辑1.命题逻辑的基本概念,包括命题、命题变量、逻辑联结词等。
2.命题逻辑的语法,包括命题公式的形式化定义和语法规则。
3.命题逻辑的证明方法,包括直接证明、间接证明、反证法等。
4.谓词逻辑的基本概念,包括谓词、量词、合取范式等。
5.谓词逻辑的语义,包括赋值、满足关系等。
最小生成树课程设计一、课程目标知识目标:1. 学生能够理解最小生成树的概念,掌握其定义和性质;2. 学生能够掌握两种常见的最小生成树算法:普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法;3. 学生能够运用最小生成树解决实际问题,如网络设计、电路设计等。
技能目标:1. 学生能够运用图论知识,分析并解决最小生成树问题;2. 学生能够编写和调试实现最小生成树的算法程序;3. 学生能够通过小组合作,共同探讨并解决最小生成树相关问题。
情感态度价值观目标:1. 学生通过学习最小生成树,培养对图论的兴趣,激发探索数学问题的热情;2. 学生在合作解决问题的过程中,学会沟通、协作,培养团队精神;3. 学生能够认识到数学知识在实际生活中的广泛应用,增强学习的积极性和主动性。
课程性质:本课程为计算机科学、信息技术等相关专业的高年级学生设计,旨在帮助学生掌握最小生成树的基本原理和算法,提高解决实际问题的能力。
学生特点:学生已经具备一定的图论基础,熟悉基本的算法和数据结构,具有一定的编程能力。
教学要求:通过讲解、示例、练习和小组讨论等形式,使学生掌握最小生成树的相关知识,提高编程实践能力和解决问题的能力。
同时,注重培养学生的团队合作精神和数学思维。
二、教学内容1. 最小生成树概念与性质- 定义、性质和判定条件- 最小生成树的应用场景2. 普里姆(Prim)算法- 算法原理与步骤- 代码实现与调试- 算法性能分析3. 克鲁斯卡尔(Kruskal)算法- 算法原理与步骤- 代码实现与调试- 算法性能分析4. 最小生成树算法比较与应用- 普里姆与克鲁斯卡尔算法的优缺点对比- 实际问题中的应用案例分析5. 小组讨论与练习- 分组讨论最小生成树相关算法及应用- 编写和调试最小生成树算法程序- 解决实际问题,如网络设计、电路设计等教学内容安排与进度:第一周:最小生成树概念与性质,普里姆算法原理与实现第二周:普里姆算法性能分析,克鲁斯卡尔算法原理与实现第三周:克鲁斯卡尔算法性能分析,最小生成树算法比较与应用第四周:小组讨论与练习,解决实际问题教材章节:《离散数学及其应用》第6章:图论《数据结构与算法分析》第9章:图论算法《计算机算法设计与分析》第4章:最小生成树与最短路径三、教学方法本课程将采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:教师通过生动的语言、形象的比喻和具体的案例,讲解最小生成树的概念、性质和算法原理,使学生系统掌握理论知识。
命题:称能判断真假的陈述句为命题。
命题公式:若在复合命题中,p、q、r等不仅可以代表命题常项,还可以代表命题变项,这样的复合命题形式称为命题公式。
命题的赋值:设A为一命题公式,p ,p ,…,p 为出现在A中的所有命题变项。
给p ,p ,…,p 指定一组真值,称为对A的一个赋值或解释。
若指定的一组值使A的值为真,则称成真赋值。
真值表:含n(n≥1)个命题变项的命题公式,共有2^n组赋值。
将命题公式A在所有赋值下的取值情况列成表,称为A的真值表。
命题公式的类型:(1)若A在它的各种赋值下均取值为真,则称A为重言式或永真式。
(2)若A在它的赋值下取值均为假,则称A为矛盾式或永假式。
(3)若A至少存在一组赋值是成真赋值,则A是可满足式。
主析取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合取式全是极小项,则称该析取范式为A的主析取范式。
主合取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合析式全是极大项,则称该析取范式为A的主析取范式。
命题的等值式:设A、B为两命题公式,若等价式A↔B是重言式,则称A与B是等值的,记作A<=>B。
约束变元和自由变元:在合式公式∀x A和∃x A中,称x为指导变项,称A为相应量词的辖域,x称为约束变元,x的出现称为约束出现,A中其他出现称为自由出现(自由变元)。
一阶逻辑等值式:设A,B是一阶逻辑中任意的两公式,若A↔B为逻辑有效式,则称A与B是等值的,记作A<=>B,称A<=>B为等值式。
前束范式:设A为一谓词公式,若A具有如下形式Q1x1Q2x2Q k…x k B,称A为前束范式。
集合的基本运算:并、交、差、相对补和对称差运算。
笛卡尔积:设A和B为集合,用A中元素为第一元素,用B中元素为第二元素构成有序对组成的集合称为A和B的笛卡尔积,记为A×B。
二元关系:如果一个集合R为空集或者它的元素都是有序对,则称集合R是一个二元关系。
实验五实验名称:得到最小生成树实验目的:1.熟悉地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
2.掌握图论中的最小生成树及Prim 和 Kruskal 算法等,进一步能用它们来解决实际问题。
实验内容:输入一个图的权矩阵,得到该图的生成树,用Kruskal算法的最小生成树,用Prim算法的最小生成树。
Kruskal算法假设T中的边和顶点均涂成红色,其余边为白色。
开始时G中的边均为白色。
1)将所有顶点涂成红色;2)在白色边中,挑选一条权最小的边,使其与红色边不形成圈,将该白色边涂红;3)重复2)直到有n-1条红色边,这n-1条红色边便构成最小生成树T的边集合。
Prim算法假设V是图中顶点的集合,E是图中边的集合,TE为最小生成树中的边的集合,则prim算法通过以下步骤可以得到最小生成树:1)初始化:U={u 0},TE={f}。
此步骤设立一个只有结点u 0的结点集U和一个空的边集TE作为最小生成树的初始形态,在随后的算法执行中,这个形态会不断的发生变化,直到得到最小生成树为止。
2)在所有u∈U,v∈V-U的边(u,v)∈E中,找一条权最小的边(u 0,v 0),将此边加进集合TE中,并将此边的非U中顶点加入U中。
此步骤的功能是在边集E中找一条边,要求这条边满足以下条件:首先边的两个顶点要分别在顶点集合U和V-U 中,其次边的权要最小。
找到这条边以后,把这条边放到边集TE中,并把这条边上不在U中的那个顶点加入到U中。
这一步骤在算法中应执行多次,每执行一次,集合TE和U都将发生变化,分别增加一条边和一个顶点,因此,TE和U是两个动态的集合,这一点在理解算法时要密切注意。
3)如果U=V,则算法结束;否则重复步骤2。
可以把本步骤看成循环终止条件。
我们可以算出当U=V时,步骤2共执行了n-1次(设n为图中顶点的数目),TE中也增加了n-1条边,这n-1条边就是需要求出的最小生成树的边。
附:程序源代码:#include<iostream.h>#include<string.h>main(){system("color 9c");cout<<"请输入图的点数:\n";int n;cin>>n;char c1='a';cout<<"系统自动生成点为:\n";int i,j,k;cout<<c1;for(i=1;i<n;i++)cout<<","<<(char)(c1+i);int a[n][n];cout<<"\n请输入图的权矩阵:\n";for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>a[i][j];cout<<"\n\n此图的邻接矩阵为:\n ";for(i=0;i<n;i++)cout<<(char)(c1+i)<<" ";cout<<endl;for(i=0;i<n;i++){cout<<(char)(c1+i)<<" ";for(j=0;j<n;j++)if(a[i][j])cout<<"1"<<" ";elsecout<<"0"<<" ";cout<<endl;}int m=0;k=0;for(i=0;i<n;i++)for(j=0;j<n;j++)if(a[i][j]&&i<j)m++;int b[m][3];for(i=0;i<n;i++) //找出边和权 for(j=0;j<n;j++)if(a[i][j]&&i<j){b[k][0]=i;b[k][1]=j;b[k++][2]=a[i][j];}int t;for(i=0;i<m-1;i++) //排序for(j=i+1;j<m;j++)if(b[i][2]>b[j][2])for(k=0;k<3;k++){t=b[i][k];b[i][k]=b[j][k];b[j][k]=t;}for(i=0;i<m;i++)cout<<"("<<(char)(c1+b[i][0])<<","<<(char)(c1+b[i][1])<<","<<b[i][2]< <")";cout<<endl;int c[n-1][3],d[n];for(k=0;k<3;k++)c[0][k]=b[0][k];d[0]=b[0][0];d[1]=b[0][1];k=1;int k1=2,k2,k3,m1=0;for(i=1;i<m;i++){for(j=0;j<3;j++)c[k][j]=b[i][j];k++;k3=k1;for(k2=0;k2<k1;k2++)if(b[i][0]==d[k2])m1++;if(!m1)d[k1++]=b[i][0];elsem1=0;for(k2=0;k2<k1;k2++)if(b[i][1]==d[k2])m1++;if(!m1)d[k1++]=b[i][1];elsem1=0;if(k>=k1){k--;k1=k3;}if(k==n)break;}cout<<"用Kruskal算法得到的最小生成树为:\n{";int count=0;for(i=0;i<n-2;i++){cout<<"("<<(char)(c1+c[i][0])<<","<<(char)(c1+c[i][1])<<"),";count+=c[i][2];}cout<<"("<<(char)(c1+c[n-1][0])<<","<<(char)(c1+c[n-1][1])<<")}\n"; count+=c[n-1][2];cout<<"最小权和为:"<<count<<endl<<endl;for(k=0;k<3;k++)c[0][k]=b[0][k];b[0][2]=0;d[0]=b[0][0];d[1]=b[0][1];k1=2;k2=0;k3=0,m1=1;while(k1<=n){for(i=1;i<m;i++)if(b[i][2]){for(j=0;j<k1;j++)if(b[i][0]==d[j])k2++;for(j=0;j<k1;j++)if(b[i][1]==d[j])k3++;if(k2&&!k3){d[k1++]=b[i][1];for(k=0;k<3;k++)c[m1][k]=b[i][k];b[i][2]=0;m1++;k2=0;goto h;}else if(!k2&&k3){d[k1++]=b[i][0];for(k=0;k<3;k++)c[m1][k]=b[i][k];b[i][2]=0;m1++;k3=0;goto h;}else{k2=k3=0;}}h:;}cout<<"用Prim算法得到的最小生成树为:\n{";count=0;for(i=0;i<n-2;i++){cout<<"("<<(char)(c1+c[i][0])<<","<<(char)(c1+c[i][1])<<"),";count+=c[i][2];}cout<<"("<<(char)(c1+c[n-1][0])<<","<<(char)(c1+c[n-1][1])<<")}\n"; count+=c[n-1][2];cout<<"最小权和为:"<<count<<endl<<endl;system("pause");}。