离散数学实验报告

合集下载

离散数学 实验报告

离散数学 实验报告

离散数学实验报告离散数学实验报告引言:离散数学是一门研究离散结构的数学学科,它对于计算机科学、信息技术等领域具有重要的应用价值。

本实验报告旨在通过实际案例,探讨离散数学在现实生活中的应用。

一、图论在社交网络中的应用社交网络已成为人们日常生活中不可或缺的一部分。

图论作为离散数学的重要分支,对于分析和研究社交网络具有重要意义。

以微信为例,我们可以通过图论的方法,分析微信中的好友关系、群组关系等。

通过构建好友关系图,我们可以计算某个人在社交网络中的影响力,进而预测他的行为模式。

二、布尔代数在电路设计中的应用布尔代数是离散数学中的重要内容,它在电路设计中扮演着重要的角色。

通过布尔代数的运算规则和定理,我们可以简化复杂的逻辑电路,提高电路的可靠性和效率。

例如,我们可以使用布尔代数中的与、或、非等逻辑运算符,设计出满足特定功能需求的逻辑电路。

三、排列组合在密码学中的应用密码学是离散数学的一个重要应用领域。

排列组合是密码学中常用的数学工具之一。

通过排列组合的方法,我们可以设计出强大的密码算法,保障信息的安全性。

例如,RSA加密算法中的大素数的选择,就涉及了排列组合的知识。

四、概率论在数据分析中的应用概率论是离散数学中的一门重要学科,它在数据分析中具有广泛的应用。

通过概率论的方法,我们可以对数据进行统计和分析,从而得出一些有意义的结论。

例如,在市场调研中,我们可以通过抽样调查的方法,利用概率论的知识,对整个市场的情况进行推断。

五、图论在物流规划中的应用物流规划是现代物流管理中的一个重要环节。

图论作为离散数学的重要分支,可以帮助我们解决物流规划中的一些问题。

例如,我们可以通过构建物流网络图,分析货物的流动路径,优化物流的运输效率,降低物流成本。

结论:离散数学作为一门重要的数学学科,在现实生活中具有广泛的应用。

通过对离散数学的学习和应用,我们可以解决实际问题,提高工作效率,推动社会的发展。

希望通过本实验报告的介绍,能够增加对离散数学的兴趣,进一步挖掘离散数学在实际生活中的潜力。

离散数学上机实验报告

离散数学上机实验报告

离散数学上机实验报告《离散数学》实验报告姓名:学号:班级:实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。

熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。

要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。

三.实验环境使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。

四.实验过程1.算法分析:合取:p,q都为1的时候为1,其他为0析取:p,q都为0的时候为0,其他为1蕴含:p为1,q为0时为0,其他为1等价:p,q同真同假2.程序代码:#include<stdio.h>int main()int P,Q,a,b,c,d,p,q;printf(" P的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++)printf("\t%d",P);}printf("\n Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++)printf("\t%d",Q);}printf("\n 非P的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==0)/*判断非P的值*/ p=1;elseprintf("\t%d",p);}}printf("\n 非Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==1)/*判断非Q的值*/q=0;elseq=1;printf("\t%d",q);}}printf("\n P与Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==0||P==0)/*判断P与Q的值*/elsea=1;printf("\t%d",a);}}printf("\n P或Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(Q==1||P==1)/*判断P或Q的值*/ b=1;elseb=0;printf("\t%d",b);}}printf("\nP蕴含Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==1&&Q==0)/*判断P蕴含Q的值*/ c=0;elsec=1;printf("\t%d",c);}}printf("\nP等价Q的值");for(P=0;P<2;P++){for(Q=0;Q<2;Q++){if(P==Q)/*判断P等价Q的值*/d=1;elsed=0;printf("\t%d",d);}}printf("\n");return 0;3.实验数据及结果分析:实验二关系的复合运算及逆运算一.实验目的熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。

离散数学实验报告3

离散数学实验报告3

《离散数学》实验报告学院专业指导教师学号姓名提交日期实验三命题公式的范式一.实验目的熟悉逻辑运算否定、合取、析取、蕴含、等价规则,利用程序语言实现命题公式的真值表运算,求公式的主析取范式及主合取范式。

二.实验内容(一)用真值表法求出下列公式的主析取范式及主合取范式。

p ∧(q ↔r)(二)选课方案某学生要从A、B 、C 三门选修课中选修1~2门,根据学校的排课计划以及该生的实际情况,选择时必须满足以下条件:(1) 若选择A,则必须选择C;(2) 若选择B,则不能选择C;(3) 若不选择C,则可选择A或B。

问该生有几种选择方案。

(三)讨论公司派遣方案:派小李或小张去上海出差。

若派小李去,则小赵要加班。

若派小张去,小王也得去。

但小赵没有加班。

问公司是如何派遣的。

令p:小李去上海q:小张去上海r: 小赵加班s: 小王去上海三. 实验过程(一)求公式的主析取范式及主合取范式。

1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

(二)选课方案- 1 -1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

(三)讨论公司派遣方案:1. 算法分析:列出命题公式,说明程序设计思路。

2. 程序代码:3.实验数据及结果分析列出求解的真值表,并筛选出正确答案。

- 2 -。

离散数学试验报告

离散数学试验报告

学院理学院学生姓名 xxx学号 xxxxxxxxxxx实验:编程二元关系的传递性判别,二元关系闭包方法一.前言引语:二元关系是离散数学中重要的内容。

因为事物之间总是可以根据需要确定相应的关系。

从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。

二.数学原理:1.传递关系:对任意的x,y,z∈A,如果<x,y>∈R且<y,z>∈R,那么<x,z>∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的⇔ (∀x)(∀y)(∀z)[(x ∈A)∧(y∈A)∧(z∈A)∧((<x,y>∈R)∧(<y,z>∈R)→(<x,z>∈R))]=12.自反闭包、对称闭包、传递闭包:设R是定义在A上的二元关系,若存在A 上的关系R′满足:1)R′是自反的(或对称的、或可传递的),2)R⊆ R′,3)对A上任何其它满足1)和2)的关系R〞,都有:R′⊆R〞。

则称R′为R的自反闭包(或对称闭包、或传递闭包),分别记为r(R)、(s(R)和t(R))。

三.实验编程语言:c++四.实验程序源代码:#include<iostream>using namespace std;int cdx(int a[100][100],int n){int b[100][100],i,j;for(i=1;i<=n-1;i++){for(j=1;j<=n;j++){if(a[1][j]==a[i+1][j] && a[1][j]==0)b[i][j]=0;elseb[i][j]=1;}for(j=1;j<=n;j++){if(b[i][j]!=a[1][j])return 0;}}return 1;}void zfbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[i][i]=1;a[j][j]=1;}}}cout<<"自Á?反¤¡ä闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void dcbb(int a[100][100],int n){int i,j;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){a[j][i]=1;}}}cout<<"对?称?闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void cdbb(int a[100][100],int n){int i,j,k;for(j=1;j<=n;j++){for(i=1;i<=n;i++){if(a[i][j]==1){for(k=1;k<=n;k++){a[i][k]=a[i][k]+a[j][k];}}}}cout<<"传ä?递ÌY闭À?包㨹关?系¦Ì矩?阵¨®为a:êo"<<endl;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(a[i][j]>1){a[i][j]=1;cout<<a[i][j]<<" ";}else{cout<<a[i][j]<<" ";}}cout<<""<<endl;}}void main(){int i,j,n,a[100][100],sel,ins;cout<<"请?输º?入¨?二t元a关?系¦Ì矩?阵¨®维?数ºyn"<<endl;cin>>n;cout<<"请?按ã¡äa[1,1],a[1,2]...a[1,n],a[2,1]...a[n.n]的Ì?顺3序¨©输º?入¨?关?系¦Ì矩?阵¨®的Ì?元a素?值¦Ì(ꡧ0,ê?1)ê?"<<endl;for(i=1;i<=n;i++)for(j=1;j<=n;j++){cin>>a[i][j];}INDEX:cout<<"请?输º?入¨?要©a判D定¡§的Ì?性?质¨º:êo"<<endl;cout<<"1、¡é传ä?递ÌY性?"<<endl;cout<<"2、¡é自Á?反¤¡ä闭À?包㨹"<<endl;cout<<"3、¡é对?称?闭À?包㨹"<<endl;cout<<"4、¡é传ä?递ÌY闭À?包㨹"<<endl;cout<<"5、¡é退ª?出?"<<endl;cin>>sel;if(sel==1){ins=cdx(a,n);if(ins==0)cout<<"该?二t元a关?系¦Ì不?具?有®D传ä?递ÌY性?。

离散数学实验报告(两篇)

离散数学实验报告(两篇)

引言:离散数学是一门基础性的数学学科,广泛应用于计算机科学、电子信息等领域。

本文是《离散数学实验报告(二)》,通过对离散数学实验的深入研究和实践,总结了相关的理论知识和应用技巧,希望能够对读者对离散数学有更加深入的理解。

概述:本实验主要涉及离散数学中的集合、关系、图论等基本概念及其应用。

通过对离散数学的实验学习,深入掌握了这些概念和应用,对于在实际问题中的应用和拓展具有重要的意义。

正文内容:一、集合相关概念及应用1.定义:集合是由元素组成的无序的整体。

介绍了集合的基本概念、集合的表示法以及集合的运算。

2.集合的应用:介绍了集合在数学、计算机科学中的应用,如数据库的查询、关系代数等。

二、关系相关概念及应用1.定义:关系是一个元素与另一个元素之间的对应关系。

介绍了关系的基本概念、关系的表示方法及其运算。

2.关系的应用:介绍了关系在图像处理、社交网络分析等领域的应用,如图像中的像素点之间的关系、社交网络中用户之间的关系等。

三、图论基础知识及应用1.定义:图是由顶点和边组成的抽象的数学模型。

介绍了图的基本概念、图的表示方法和图的运算。

2.图论的应用:介绍了图论在路由算法、电子商务等领域的应用,如路由器的路由选择、电子商务中的商品推荐等。

四、布尔代数的概念及应用1.定义:布尔代数是一种基于集合论和逻辑学的代数系统。

介绍了布尔代数的基本概念、布尔表达式及其化简方法。

2.布尔代数的应用:介绍了布尔代数在电路设计、开关控制等方面的应用,如逻辑门电路的设计、开关控制系统的建模等。

五、递归的概念及应用1.定义:递归是一种通过调用自身来解决问题的方法。

介绍了递归的基本原理、递归的应用技巧。

2.递归的应用:介绍了递归在算法设计、树的遍历等方面的应用,如快速排序算法、树结构的遍历等。

总结:通过本次离散数学的实验学习,我深入掌握了集合、关系、图论等基本概念与应用。

集合的应用在数据库查询、关系代数等方面起到了重要的作用。

关系的应用在图像处理、社交网络分析等领域有广泛的应用。

离散数学实验报告求集合的运算——并运算

离散数学实验报告求集合的运算——并运算

【实验目的】通过编程实现求给定集合A和B的并集C(C=A∪B)的运算。

【实验内容】已知所给集合A和B,求A与B 的并集C(C=A∪B)。

【实验原理】因为并集的定义为:C={x|x∈A∨x∈B},所以,只要将集合A与B合在一起就得到了并集C。

但是,在一个集合中,同样的元素没必要出现两次或两次以上,所以,在将集合A送入并集C后,应将集合B中与A中相同的元素删除,再将集合B送入并集C之中。

【程序代码】#include<stdio.h>int main(){int a[101],b[101],c[201]={0};int m,n;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);for(int i=1;i<=m;i++)c[i]=a[i];int i=m+1;int k;for(int j=1;j<=n;j++){int t=1;for(k=1;k<=m;k++){if(a[k]==b[j])t=0;}if(t==1){c[i]=b[j];i++;}}for(int i=1;i<=m+n;i++){if(c[i]!=0)printf("%d ",c[i]);}}【实验结果】【实验心得】首先想到的是数组,先将数组a[],赋值给c[],然后通过两层for循环来判断b[],是否与a[]重复,如若不重复,将b[]赋值给c[]。

在开始的时候由于for循环套错位置出错,后设置一flag来判断b[]和a[]是否有重复的元素。

离散数学实验报告

离散数学实验报告

离散数学实验报告一、实验目的离散数学是现代数学的一个重要分支,它在计算机科学、信息科学、人工智能等领域有着广泛的应用。

本次离散数学实验的目的在于通过实际操作和编程实现,深入理解离散数学中的基本概念、原理和算法,提高解决实际问题的能力,培养逻辑思维和创新能力。

二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。

同时,还使用了一些相关的数学库和工具,如 sympy 库用于符号计算。

三、实验内容1、集合运算集合是离散数学中的基本概念之一。

在实验中,我们首先定义了两个集合 A 和 B,然后进行了并集、交集、差集等运算。

通过编程实现这些运算,加深了对集合运算定义和性质的理解。

```pythonA ={1, 2, 3, 4, 5}B ={4, 5, 6, 7, 8}并集union_set = Aunion(B)print("并集:", union_set)交集intersection_set = Aintersection(B)print("交集:", intersection_set)差集difference_set = Adifference(B)print("A 与 B 的差集:", difference_set)```2、关系的表示与性质判断关系是离散数学中的另一个重要概念。

我们使用矩阵来表示关系,并通过编程判断关系的自反性、对称性和传递性。

```pythonimport numpy as np定义关系矩阵relation_matrix = nparray(1, 0, 1, 0, 1, 0, 1, 0, 1)判断自反性is_reflexive = all(relation_matrixii == 1 for i inrange(len(relation_matrix)))print("自反性:", is_reflexive)判断对称性is_symmetric = all(relation_matrixij == relation_matrixji for i in range(len(relation_matrix)) for j in range(len(relation_matrix)))print("对称性:", is_symmetric)判断传递性is_transitive = Truefor i in range(len(relation_matrix)):for j in range(len(relation_matrix)):for k in range(len(relation_matrix)):if relation_matrixij == 1 and relation_matrixjk == 1 and relation_matrixik == 0:is_transitive = Falsebreakprint("传递性:", is_transitive)```3、图的遍历图是离散数学中的重要结构。

离散实验报告集合运算

离散实验报告集合运算

一、实验目的1. 理解集合的基本概念和运算;2. 掌握集合的交、并、差、补等运算方法;3. 通过编程实现集合运算,提高编程能力。

二、实验原理集合是数学中的一种基本概念,用于描述一组具有某种共同属性的元素。

集合的运算主要包括交、并、差、补等。

以下是对这些运算的简要介绍:1. 交集(∩):两个集合A和B的交集是指同时属于A和B的元素组成的集合。

2. 并集(∪):两个集合A和B的并集是指属于A或B或同时属于A和B的元素组成的集合。

3. 差集(-):两个集合A和B的差集是指属于A但不属于B的元素组成的集合。

4. 补集(∁A):集合A的补集是指全集U中不属于A的元素组成的集合。

三、实验内容1. 编写程序,实现以下集合运算:(1)输入两个集合A和B,输出它们的交集C。

(2)输入两个集合A和B,输出它们的并集C。

(3)输入两个集合A和B,输出它们的差集C。

(4)输入一个集合A和全集U,输出A的补集C。

2. 编写程序,验证以下性质:(1)交换律:A∩B = B∩A,A∪B = B∪A。

(2)结合律:A∩(B∩C) = (A∩B)∩C,A∪(B∪C) = (A∪B)∪C。

(3)分配律:A∩(B∪C) = (A∩B)∪(A∩C),A∪(B∩C) = (A∪B)∩(A∪C)。

四、实验步骤1. 定义一个函数用于输入集合,使用数组存储集合元素。

2. 定义一个函数用于计算两个集合的交集,使用嵌套循环遍历两个集合,将相同的元素添加到新集合中。

3. 定义一个函数用于计算两个集合的并集,使用嵌套循环遍历两个集合,将所有元素添加到新集合中。

4. 定义一个函数用于计算两个集合的差集,使用嵌套循环遍历两个集合,将属于A但不属于B的元素添加到新集合中。

5. 定义一个函数用于计算集合的补集,使用嵌套循环遍历全集和集合A,将不属于A的元素添加到新集合中。

6. 编写主函数,调用上述函数,输入集合,输出运算结果。

五、实验结果与分析1. 实验结果(1)输入集合A:{1, 2, 3, 4, 5},集合B:{3, 4, 5, 6, 7},输出交集C:{3, 4, 5}。

离散实验报告一

离散实验报告一

离散数学实验报告(一)一、实验目的求命题公式的真值表及其主析取范式和主合取范式二、问题分析本程序最终的目的应是求命题公式的主析取范式和主合取范式,而在有命题真值表的情况下,主析取范式和主合取范式的求解将变得十分简单。

所以,该程序的关键问题应该是求解命题公式的真值表,此后在真值表的基础上完成主析取范式和主合取范式的求解。

(一)前期分析与部分变量准备规定前提,真值表中的T/F在该程序中用布尔类型的1/0来表达。

如此,可以方便程序的编写与运算。

首先,我们要确定各个联结词的符号表达,为了方便讨论,不妨在此先令各联结词表达如下:合取(*)、析取(/)、否定(-)、单条件(%)、双条件(@)。

接着,我们就需要明确各联结词所对应符号在程序中的功能。

具体来看,合取与析取可以分别使用c++自带的&&(且)和||(或)进行布尔运算,取否定也可以直接使用!(取非)运算;而对于单条件、双条件这两个联结词来看,在c++中并无已有的运算定义,所以我们要利用函数定义的方式重新明确其含义。

而后,定义char类型数组a[]用于存储命题公式,为了方便程序的实现,我们将命题变元与联结词分开存储于char类型数组b[]和c[]中。

(二)真值表输出算法以下,我们便进入了程序的核心部分——完成真值表的计算与输出。

碍于本人c++编程知识的局限,暂时只能实现输入三个变元、无否定情况下的命题公式的真值表输出。

为了完成真值表的输出,要解决以下几个问题1. 真值表的格式与指派控制对此,我们使用三层for语句嵌套完成真值表的每一行输出。

在循环的同时,我们还需要提前定义一个布尔数组p[],以根据每一行的输出完成三个变元的指派,并将其存储于数组p[]中。

2.真值表每一行结尾的结果计算首先,我们需要定义一个布尔类型的过程存储数组x[],利用switch语句的嵌套分别判断两个联结词,使用相应的运算符(&&、||、!)和已定义的两个布尔类型函数(imp、equ),一次计算,并且将每一次的计算结果存储至x[]中,运算直至最后一步完成结果的输出。

离散数学实验报告四个实验

离散数学实验报告四个实验

《离散数学》课程设计学院计算机学院学生姓名学号指导教师评阅意见提交日期 2011 年 11 月 25 日引言《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。

它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。

它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。

特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。

实验一、编程判断一个二元关系的性质(是否具有自反性、反自反性、对称性、反对称性和传递性)一、前言引语:二元关系是离散数学中重要的内容。

因为事物之间总是可以根据需要确定相应的关系。

从数学的角度来看,这类联系就是某个集合中元素之间存在的关系。

二、数学原理:自反、对称、传递关系设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R 就是A×B的一个合于{()∈A×}的子集合设R是集合A上的二元关系:自反关系:对任意的x∈A,都满足<>∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的⇔(∀x)((x∈A)→(<>∈R))=1对称关系:对任意的∈A,如果<>∈R,那么<>∈R,则称关系R是对称的,或称R具有对称性,即R在A上是对称的⇔ (∀x)(∀y)((x∈A)∧(y∈A)∧(<>∈R)→(<>∈R))=1传递关系:对任意的∈A,如果<>∈R且<>∈R,那么<>∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的⇔ (∀x)(∀y)(∀z)[(x∈A)∧(y∈A)∧(z ∈A)∧((<>∈R)∧(<>∈R)→(<>∈R))]=1三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。

离散数学实验报告

离散数学实验报告
2.2实验过程(算法描述)4..
2.2.1程序整体思路4...
2.2.2具体算法流程4...
第三章 实验数据及结果分析6..
3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析6
3.1.1输入无向图的边6..
3.1.2建立图的连接矩阵7..
3.2其他功能的功能测试和结果分析8..
3.2.1计算节点间的距离8..
kedajuzhen()求可达矩阵;通过一系列for循环,根据公式,计算可达矩阵; 通过for循环,将矩阵中不为0的一切值赋为1以生成可达矩阵并显示; 通过for循环和if条件句的组合,根据可达矩阵的元素特点,判断图的连通性,若可达矩 阵矩阵中有0,则跳出循环,显示不可连接;根据判断结果显示内容,不可连通 或可连通;}
3.2.2判断图的连通性8..
3.2.3输出图的连通支9..
3.2.4退出系统9...
第四章 实验收获和心得体会1..0
4.1实验收获1..0.
4.2心得体会1..1.
第五章 实验源程序清单1..2.
5.1程序代码1..2.
第一章 实验概述
1.1
理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的 连通支方法。
路径P中所含边的条数称为路径P的长度。在图G<V,E沖,从结点Vi到Vj最 短路径的长度叫从Vi到Vj的距离,记为d<Vi,Vj>。
设图的邻接矩阵是A,则所对应的aij的值表示,点Vi到点Vj距离为n的路径有aij条。
若aij⑴,aij(2),…,aij(n-1),中至少有一个不为0,则可断定Vi与Vj可达, 使aij⑴工0的最小的I即为d(Vi,Vj)。
问题求解原理为:
(1) 先构造初始邻接矩阵A=Vij,Vij为顶点Vi到顶点Vj的权。如果Vi和Vj之间不存在弧段或者是负向回路或者是i=j,则令Vij其值为%。

离散数学实验报告

离散数学实验报告

实验一命题逻辑推理1.实验用例根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。

(1)营业员A或B偷了手表;(2)若A作案,则作案不在营业时间;(3)若B提供的证据正确,则货柜末上锁;(4)若B提供的证据不正确,则作案发生在营业时间;(5)货柜上了锁。

2.实验目的加深对命题逻辑推理方法的理解。

3.实验内容用命题逻辑推理的方法解决逻辑推理问题。

4.实验原理和方法(1)符号化上面的命题,将它们作为条件,营业员A偷了手表作为结论,得一个复合命题。

(2)将复合命题中要用到的联结词定义成C语言中的函数,用变量表示相应的命题变元。

将复合命题写成一个函数表达式。

(3)函数表达式中的变量赋初值1。

如果函数表达式的值为1,则结论有效,A偷了手表,否则是B偷了手表。

用命题题变元表示:A:营业员A偷了手表B:营业员B偷了手表C:作案不在营业时间D:B提供的证据正确E:货柜末上锁则上面的命题符号化为 (A||B) && (!A||C) && (!D||E) && (D||!C) && !E 要求找到满足上面式子的变元A,B的指派便是结果。

5.实验代码6.实验结果B偷了手表实验二关系的运用1.实验原理和方法在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法)2.实验代码5.实验结果1.自反闭包2.传递闭包3.对称闭包实验三图论1.实验用例如下图所示的赋权图表示某七个城市及预先算出它们之间的一些直接通信成路造价(单位:万元),试给出一个设计方案,使得各城市之间既能够通信又使总造价最小并计算其最小值.2实验原理和方法为了求解最小代价,使花费的总代价最小,这是数学中经典的求解最小耗费生成树的算法。

其核心思想是寻找每一步的最优解继而求得全局最优解。

为了求得最小耗费生成树,我们运用数学中经典的Krusal算法,此算法的核心思想是:1、假设该图G是不连通的,对该图的边以非降序权重新排列2、对于排序表中的每条边,如果现在把它放入T不会形成回路的话,则把它加入到生成树T中;否则丢弃3、输出最小生成树的结果,得到我们想要的答案因而最后求得的最小耗费是:此时的最小耗费是:23+1+4+9+3+17=57(万元)实验四最优二叉树在通信编码中的应用1.实验内容输入一组通信符号的使用频率,求各通信符号对应的前缀码。

离散数学教学实践活动(3篇)

离散数学教学实践活动(3篇)

第1篇一、前言离散数学是计算机科学、信息科学、数学等学科的基础课程,对于培养学生的逻辑思维、抽象思维和算法设计能力具有重要意义。

为了提高离散数学的教学效果,我们开展了一系列教学实践活动,旨在通过实践操作,让学生更加深入地理解和掌握离散数学的基本概念、方法和应用。

二、活动背景随着计算机科学的飞速发展,离散数学在各个领域中的应用越来越广泛。

为了让学生更好地适应未来社会的发展需求,我们决定开展离散数学教学实践活动,通过实际操作和项目实践,提升学生的综合素质。

三、活动目标1. 提高学生对离散数学基本概念的理解和掌握;2. 培养学生的逻辑思维和抽象思维能力;3. 提升学生的算法设计和编程能力;4. 拓展学生的知识面,激发学习兴趣。

四、活动内容1. 离散数学基本概念讲解与练习在活动开始阶段,我们首先对离散数学的基本概念进行了讲解,包括集合、关系、函数、图论、组合数学等。

通过课堂讲解、例题分析和练习,让学生对离散数学的基本概念有清晰的认识。

2. 算法设计与实现为了让学生更好地理解算法设计,我们选择了几个具有代表性的算法,如排序算法、查找算法、图搜索算法等。

在教师的指导下,学生分组进行算法设计,并使用编程语言实现算法。

通过这一环节,学生能够将理论知识与实际编程相结合,提高编程能力。

3. 项目实践为了让学生将离散数学知识应用于实际项目中,我们设计了几个项目实践任务。

例如,设计一个基于图的社交网络分析系统、实现一个基于组合数学的密码生成器等。

学生分组进行项目实践,通过讨论、分析和编程,完成项目任务。

4. 案例分析在活动过程中,我们选取了几个与离散数学相关的实际案例进行分析,如网络安全、人工智能、大数据等。

通过分析案例,让学生了解离散数学在各个领域的应用,激发学生的学习兴趣。

5. 交流与分享为了促进学生的交流与合作,我们组织了小组讨论和展示活动。

学生分组讨论各自在项目实践中的心得体会,并在全班进行展示。

通过交流与分享,学生能够互相学习、取长补短,共同提高。

离散数学 实验报告

离散数学 实验报告

离散数学实验报告离散数学实验报告一、引言离散数学是一门研究离散结构及其运算规则的数学学科,它在计算机科学、信息科学、通信工程等领域具有重要的应用价值。

本实验旨在通过实际案例,探索离散数学在现实生活中的应用。

二、实验目的本实验的目的是通过离散数学的理论知识,解决一个实际问题。

我们选择了图论中的最短路径问题作为案例,以展示离散数学在网络路由、物流规划等领域的应用。

三、实验过程1.问题描述我们的实验场景是一个城市的交通网络,其中各个交叉路口被看作是图的节点,而道路则是图的边。

我们需要找到两个给定节点之间的最短路径,以便规划出行路线。

2.建模为了解决这个问题,我们需要将实际情况抽象成数学模型。

我们将交通网络表示为一个有向图,每个节点代表一个交叉路口,每条边代表一条道路。

每条边上还需要标注距离或时间等权重。

3.算法选择在离散数学中,有多种算法可以解决最短路径问题,如迪杰斯特拉算法、弗洛伊德算法等。

根据实际情况和需求,我们选择了迪杰斯特拉算法。

4.算法实现我们使用编程语言实现了迪杰斯特拉算法,并将其应用于我们的交通网络模型。

算法的核心思想是通过不断更新节点之间的最短距离,逐步找到最短路径。

5.实验结果经过实验,我们成功找到了两个给定节点之间的最短路径,并计算出了最短距离。

这对于规划出行路线具有重要意义,可以帮助人们节省时间和资源。

四、实验总结通过这个实验,我们深入理解了离散数学在实际问题中的应用。

离散数学的概念和算法不仅仅是理论上的抽象,它们可以帮助我们解决现实生活中的复杂问题。

离散数学的应用远不止于此,它还可以用于密码学、数据压缩、人工智能等领域。

通过学习离散数学,我们能够培养出良好的抽象思维和问题解决能力,为未来的科学研究和工程实践打下坚实的基础。

总之,离散数学是一门具有广泛应用前景的学科,通过实验,我们对其应用领域有了更深入的了解。

希望未来能有更多的人关注和研究离散数学,为推动科学技术的发展做出贡献。

离散数学实验报告

离散数学实验报告

离散数学实验报告离散数学实验报告一、引言离散数学是现代数学的一个重要分支,它研究离散的数学结构和离散的数学对象。

本实验报告将介绍我对离散数学的学习和实践的一些心得体会。

二、集合论集合论是离散数学的基础,它研究集合及其运算。

在实验中,我学习了集合的表示方法和运算规则。

集合的表示方法有枚举法、描述法和图示法等。

集合的运算包括并、交、差和补等。

通过实践操作,我深刻理解了集合的概念和运算规则。

三、逻辑与命题逻辑是离散数学的另一个重要内容,它研究推理和思维的规律。

在实验中,我学习了逻辑的基本概念和符号表示法。

逻辑中的命题是逻辑推理的基本单位,它可以是真或假。

通过实践操作,我能够正确地分析和判断命题的真值,并进行逻辑推理。

四、关系与函数关系与函数是离散数学中的重要内容,它们描述了元素之间的联系。

在实验中,我学习了关系的定义和性质,包括自反性、对称性和传递性等。

函数是一种特殊的关系,它将一个集合的元素映射到另一个集合。

通过实践操作,我能够正确地定义和分析关系与函数。

五、图论图论是离散数学中的重要分支,它研究图及其性质。

在实验中,我学习了图的基本概念和表示方法。

图由顶点和边组成,可以分为有向图和无向图。

通过实践操作,我能够正确地定义和分析图的性质,如度、路径和连通性等。

六、组合数学组合数学是离散数学的另一个重要分支,它研究离散对象的组合和排列。

在实验中,我学习了组合数学的基本原理和方法。

组合数学中的排列和组合是常见的计数问题,通过实践操作,我能够正确地计算排列和组合的数量。

七、实践应用离散数学在计算机科学、通信工程和运筹学等领域有着广泛的应用。

在实验中,我了解了离散数学在实际问题中的应用。

例如,图论可以用于网络路由算法的设计,组合数学可以用于密码学中的加密算法设计。

通过实践操作,我能够将离散数学的知识应用到实际问题中,提高问题的解决效率。

八、总结通过本次离散数学实验,我深入了解了离散数学的基本概念和方法,并通过实践操作加深了对离散数学的理解。

离散数学实验1

离散数学实验1

“离散数学”实验报告(实验1)专业班级学号姓名目录一.实验目的; ....................................... - 1 -二.实验内容; ....................................... - 2 -1. 逻辑联接词的运算 ..................................................................................................... - 2 -2. 求任意一个命题公式的真值表 ................................................................................. - 2 -三.实验环境; ....................................... - 2 -四. 实验原理和实现进程(算法描述);................. - 2 -1.实验原理 ....................................................................................................................... - 2 -2.实验进程 ....................................................................................................................... - 3 -五.实验数据及结果分析;.............................. - 7 -题A:................................................................................................................................ - 7 - B,C题:............................................................................................................................ - 9 - 六. 源程序清单; ................................... - 13 -A题部份源代码: .......................................................................................................... - 13 - tt:printf("***************************************\n");其他收成和体会。

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

离散数学实验报告(实验ABC)专业班级学生姓名学生学号指导老师完成时间目录第一章实验概述..................................... 错误!未定义书签。

实验目的....................................... 错误!未定义书签。

实验内容....................................... 错误!未定义书签。

实验环境....................................... 错误!未定义书签。

第二章实验原理和实现过程........................... 错误!未定义书签。

实验原理....................................... 错误!未定义书签。

建立图的邻接矩阵,判断图是否连通 ............ 错误!未定义书签。

计算任意两个结点间的距离 ................... 错误!未定义书签。

对不连通的图输出其各个连通支 ................ 错误!未定义书签。

实验过程(算法描述)........................... 错误!未定义书签。

程序整体思路 ............................... 错误!未定义书签。

具体算法流程 ................................ 错误!未定义书签。

第三章实验数据及结果分析........................... 错误!未定义书签。

建立图的邻接矩阵并判断图是否连通的功能测试及结果分析错误!未定义书签。

输入无向图的边 .............................. 错误!未定义书签。

建立图的连接矩阵 ............................ 错误!未定义书签。

其他功能的功能测试和结果分析................... 错误!未定义书签。

计算节点间的距离 ............................ 错误!未定义书签。

判断图的连通性 .............................. 错误!未定义书签。

输出图的连通支 .............................. 错误!未定义书签。

退出系统 .................................... 错误!未定义书签。

第四章实验收获和心得体会........................... 错误!未定义书签。

实验收获....................................... 错误!未定义书签。

心得体会....................................... 错误!未定义书签。

第五章实验源程序清单............................... 错误!未定义书签。

程序代码....................................... 错误!未定义书签。

第一章实验概述实验目的理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。

通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。

实验内容以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。

注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。

基本要求如下:程序需具有基本的容错控制,在输入错误时有处理手段;程序界面友好,需要输入的地方有输入说明,说明输入的内容和格式要求等;实验原理和实现过程应该详细分析问题,给出解决思路,描述算法思想,不能用源程序代替算法;测试数据应全面,包括非法输入的处理结果等都应包含在内。

实验环境C或C++语言编程环境实现。

第二章实验原理和实现过程实验原理建立图的邻接矩阵,判断图是否连通根据图的矩阵表示法建立邻接矩阵A,并利用矩阵的乘法和加法求出可达矩阵,从而判断图的连通性。

连通图的定义:在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的。

如果 G 是有向图,那么连接vi 和vj的路径中所有的边都必须同向。

如果图中任意两点都是连通的,那么图被称作连通图。

判断连通图的实现:在图中,从任意点出发在剩余的点中,找到所有相邻点循环,直到没有点可以加入为止,如果有剩余的点就是不连通的,否则就是连通的。

或者也可用WallShell算法,由图的邻接矩阵判断图是否连通。

计算任意两个结点间的距离图中两点i,j间的距离通过检验A l中使得a ij为1的最小的l值求出。

路径P中所含边的条数称为路径P的长度。

在图G<V,E>中,从结点Vi到Vj最短路径的长度叫从Vi到Vj的距离,记为d<Vi,Vj>。

设图的邻接矩阵是A,则所对应的aij的值表示,点Vi到点Vj距离为n 的路径有aij条。

若aij(1),aij(2),…,aij(n-1),中至少有一个不为0,则可断定Vi与Vj可达,使aij(l)≠0的最小的l即为d(Vi,Vj)。

问题求解原理为:(1)先构造初始邻接矩阵A=Vij,Vij为顶点Vi到顶点Vj的权。

如果Vi 和Vj之间不存在弧段或者是负向回路或者是i=j,则令Vij其值为∞。

(2)再构造初始中间顶点矩阵。

(3)然后开始迭代计算(迭代的次数等于顶点的个数1)(4)最后查找Vi到Vj的最短路径。

计算节点Vi与Vj之间的距离的方法为:利用邻接矩阵相互间相乘后得到的矩阵来判断节点间的距离。

如果c2[s][i][j]==0,则这两个节点的距离为无穷大。

如果c2[s-2][i][j]==0,c2[s-1][i][j]==1时,则这两点间的距离为s。

对不连通的图输出其各个连通支图的连通支的求法则可采用图的遍历算法,图的遍历有深度优先和广度优先两种方法,其中深度优先算法又分为递归和非递归两种。

在无向图中,如果任何两点可达,则称图G是连通的,如果G的子图G’是连通的,没有包含G’的更大的子图G’’是连通的,则称G’是G的连通支。

当有判断出关系不是连通的之后,将需要求出分支模块实现方法如下:先定义一个二维数组用来存放相应的分块,先选定一个点,并将它放在数组中,然后判断,如果后面的和他是联通的便将它也放在同一个数组中,否则将其存入其他的数组中,后面以此类推,在输出相应的数组,便可判断出连通分支。

实验过程(算法描述)程序整体思路本程序完成了实验所要求的全部功能,其基本思路是——“运用模块化的思想,将实现“求连通支”、“输入结点关系”、“输出邻接矩阵”、“显示两结点间的距离”、“求可达矩阵”和“图的遍历”的子函数分开编写,然后将它们以子函数的形式添加到主函数main的代码后面,在要使用相应的子函数时,进行子函数调用就可以实现相应的功能了。

”本程序的一大特色就是开发者灵活使用了C语言中的数组概念来进行开发,用数组来模拟矩阵的运算,通过相应的算法实现了全部的功能。

具体算法流程在main(){系统界面显示;用do…while循环语句和switch语句实现功能1,2,3……的选择,并调用相关的子程序;用start、goto start实现控制流的转移;}liantongzhi(){求连通支,此子函数通过一个for循环控制遍历每个结点,并调用函数DFS()求每个结点的连通支;}DFS(int a){通过实参与形参,将结点数据代入函数;定义顺序栈变量;通过for循环初始化;为a置已访问标志,已经访问了的元素为1;定义顺序栈的第一个元素;通过while循环实现结点遍历,栈不为空时执行循环;栈顶元素赋值;通过for循环寻找v的下个未访问的邻接点;通过if条件句,若x,i是边和节点i未被访问过,处理结点的访问,并进行访问标志,进栈等操作;通过if条件句,若v已访问到的出点,则将其退栈;}shuru(){输入结点关系;通过for循环先将矩阵所有元素赋值0;再通过另一for循环,根据输入结点的关系,将矩阵中相应的元素赋值,有关系则为1;} linjiejuzhen(){输出邻接矩阵;通过for循环,依次按格式输出邻接矩阵的元素;}julijuzhen(){根据A的n次方矩阵及其中元素,判断并显示两结点间的距离;调用子函数linjiejuzhen(),以确定并显示距离为1的两结点;通过for 循环显示距离为1的结点对;再通过一系列的for循环,计算A的n次方矩阵并显示结果,根据其中的元素,判断并显示结点间的距离;详细算法请见附录相关部分的注释;}kedajuzhen(){求可达矩阵;通过一系列for循环,根据公式,计算可达矩阵;通过for循环,将矩阵中不为0的一切值赋为1以生成可达矩阵并显示;通过for循环和if条件句的组合,根据可达矩阵的元素特点,判断图的连通性,若可达矩阵矩阵中有0,则跳出循环,显示不可连接;根据判断结果显示内容,不可连通或可连通;}第三章实验数据及结果分析建立图的邻接矩阵并判断图是否连通的功能测试及结果分析简单无向图的输入界面友好,有清楚的操作说明,方便用户进行使用。

这就是集合的输入界面。

输入无向图的边当“6,5”时,表示输入的是六个节点五条边的树。

程序会在屏幕上显示输入节点间关系的界面,输入的关系为“1,2;2,3;3,4;4,5;5,6”建立图的连接矩阵程序返回主界面后,选择“2”,程序会显示建立的连接矩阵。

其他功能的功能测试和结果分析计算节点间的距离当选择“3”时,程序便会输出各节点间的距离。

判断图的连通性当选择“4”时,程序会根据可达矩阵判断图的连通性。

输出图的连通支当选择“5”时,程序会输出个连通支。

退出系统当选择“6”时,程序会退出系统。

第四章实验收获和心得体会实验收获这次离散数学实验是基于图论方面知识,以图的各种矩阵为基础,来研究图的一些性质、特点。

我独立完成了本次实验设计,实现了A、B、C三个功能,满足了实验的基本要求,心得如下。

通过这次实验,我学会了用C语言根据图的矩阵表示法建立邻接矩阵A,并利用矩阵的乘法和加法求出可达矩阵,从而判断图的连通性。

巩固了课堂所学的图论方面的有关知识,并在实践中学到:图中两点i,j间的距离可以通过检验A l中使得a ij为1的最小的l值求出;图的连通支的求法可采用图的遍历算法,图的遍历有深度优先和广度优先两种方法,其中深度优先算法又分为递归和非递归两种。

相关文档
最新文档