【Java实现】离散数学计算 关系的幂运算

这篇具有很好参考价值的文章主要介绍了【Java实现】离散数学计算 关系的幂运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(前排提示,代码内容在文章中间,末尾是闲聊)

 离散数学在在“右复合”的基础上提出了“幂运算”的概念。

设R为A上的关系,n为自然数,则R的n次幂如下:

(1)为恒等关系。

(2)【Java实现】离散数学计算 关系的幂运算=o。

 咳咳,用上面两个定义可以干很多事情,比如我们知道任意集合上关系的0次幂都是恒等关系,关系矩阵正对角线为1,其余为0。并且用复合堆积可以求更高次幂的R。然后书上列举了一下计算过程(虽然只能看到结果)

【Java实现】离散数学计算 关系的幂运算

 小破书,将就看,总之我们的目标是重现书本上的关系矩阵。要用到的算法就是矩阵乘法。百度一下得到关系矩阵的乘法如下:

【Java实现】离散数学计算 关系的幂运算

   直接定位到公式结论那部分,从而得到我们要用到编程的算式。又因为矩阵包含行和列的运算,所以基本确认是使用双循环来解决运算问题,录入的话就手动输入,不耽误太多时间。

   for(i=0;i<get;i++)
	for(j=0;j<get;j++) 
	for(k=0,s=0;k<get&&s<get;k++,s++) 
	   b[i][j]+=a[i][k]*a[s][j];       
   for(i=0;i<get;i++)
	for(j=0;j<get;j++) 
	for(k=0,s=0;k<get&&s<get;k++,s++)  
		answer[i][j]+=b[i][k]*a[s][j]; 

 咳咳,由于实际问题需要改变位置,所以在此之上再加一层循环,得到了基本的算法框架。 

这还只是开始,我们下面习惯性的分模块考虑问题:

  1. 0次幂输出恒等关系。
  2. 1次幂输出本身。
  3. 非0偶次幂矩阵复合运算。
  4. 非1奇次幂矩阵复合运算。
  5. 书上对负次幂没有定义,这里忽略。

 好,四个模块分好,接下来就是模块补充了,看不懂也没关系,下面附上我的源代码,输入请按照关系矩阵的格式输入,避免程序报错。

package hellojava;
import java.util.Scanner;
public class 离散数学计算n次幂 {
	public static void main(String[] args) {
		int i=0,j=0,k=0,s=0;
		int a[][]=new int[10][10] ;
		int answer[][]=new int[10][10];
		Scanner input = new Scanner(System.in);
		System.out.println("离散数学计算n次幂很麻烦?方便来了!");
		System.out.print("这里输入矩阵的大小:");
		int get=input.nextInt();
		for(i=0;i<get;i++)
    	    for(j=0;j<get;j++)
    	    	answer[i][j]=0;
		System.out.println("开始录入矩阵吧");
		for(i=0;i<get;i++) 
		for(j=0;j<get;j++)a[i][j]=input.nextInt();
		
		   while(true) {//循环录入,方便测算多次
	    System.out.print("要计算多少次幂呢:");
	    int sqrt=input.nextInt();if(sqrt>=88)break;
	    else {
	    if(sqrt==1)//一次幂保留不变
	    for(i=0;i<get;i++)
	    for(j=0;j<get;j++) 
	    answer[i][j]=a[i][j];
	    		    	
	    else if(sqrt%2==1&&sqrt!=1) {//非1奇数幂结果一致
	    	 int b[][]=new int[10][10];
		    for(i=0;i<get;i++)
		    for(j=0;j<get;j++) 
		    for(k=0,s=0;k<get&&s<get;k++,s++) 
	           b[i][j]+=a[i][k]*a[s][j];       
		    for(i=0;i<get;i++)
			for(j=0;j<get;j++) 
			for(k=0,s=0;k<get&&s<get;k++,s++)  
		       answer[i][j]+=b[i][k]*a[s][j];    
	                   }
	    else if(sqrt%2==0&&sqrt!=0) {//非0偶数幂结果一致
	    for(i=0;i<get;i++)
	    for(j=0;j<get;j++) 
	    for(k=0,s=0;k<get&&s<get;k++,s++)
          answer[i][j]+=a[i][k]*a[s][j];    
	    	          }
	    
	    else if(sqrt==0) {//0次幂默认恒等关系
	    	for(i=0;i<get;i++)
	    	    for(j=0;j<get;j++)
	    	    	answer[i][j]=0;
	    	for(i=0;i<get;i++)
	    	    answer[i][i]=1;
	                      }
	    else System.out.println("有点小错误呢,检查一下输入是否正确");
	    
	    for(i=0;i<get;i++) {if(i!=0)System.out.println();
		    for(j=0;j<get;j++) System.out.print(answer[i][j]+" ");}
	    for(i=0;i<get;i++)
    	    for(j=0;j<get;j++)
    	    	answer[i][j]=0;
	    System.out.println();
	    }
	 
}
		   System.out.println("感谢使用,拜拜了您内!");
		   input.close();
}
}

  经过书本的检验,这个程序运行的精度没有问题。

【Java实现】离散数学计算 关系的幂运算

  俗话说,不能实战的代码不是好代码。既然我要做这个东西,证明我想拿他减少我的重复工作量。于是离散老师很识相的在线上小测验里出了一道计算n次幂的题目。

【Java实现】离散数学计算 关系的幂运算

  先把题目转化成程序识别的关系矩阵,然后才能进行接下来的操作。

【Java实现】离散数学计算 关系的幂运算

 可以看到,和答案完全一致,但是美中不足的点在于逻辑加有个定义:1+1=1,程序里的需要额外运算,不然就是修改结果数据。无论哪种都不影响正常使用,注意别填错就行啦。

 最后想聊聊代码之外的问题,有人说学代码有什么用,学离散有什么用。我觉得与其别人告诉你怎么用,不如自己去发掘用法。就好像有人告诉你数学就是拿来算账的,那你的思维也只会局限在账本的三寸天地。放眼望去,航空航天的轨道运行、枪手射击的概率论、对已知目标的线性规划,不都是生活中常见的运用吗,在面临越庞大的数据,凭借直觉和人脑的计算就如同愚公移山,这时候编程的优势就体现出来了,一流的速度配合精巧的逻辑运算,就是一个小宇宙。学科间的相互融合应该是如同我们喝水一样的理所当然,而不是等着书本去定义,拾人牙慧的事谁都能干,又怎么缺你一个呢对吧。

 如果上面的这段话对你有用的话,也请不要把我的话当真,因为这只是一个大一新生的一己之见。理解的话就谢谢啦!文章来源地址https://www.toymoban.com/news/detail-501687.html

到了这里,关于【Java实现】离散数学计算 关系的幂运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【离散数学】Python语言实现关系性质的判断

    实验内容: 用矩阵表示二元关系;通过矩阵的特征判断二元关系所具有的性质;运用二维数组实现矩阵的输入,然后判断自反性,反自反性,对称性,反对称性,传递性 先复习一下相关的基础知识:  1.    判断自反性:矩阵主对角线元素全为1 2.    判断反自反性:矩阵主

    2024年02月04日
    浏览(42)
  • 【离散数学】九章:关系 - 关系及其性质

    设A和B是集合,一个从 A 到 B 的二元关系是A×B的子集。 (序偶集合的子集) 🐳换句话说,一个从A到B的二元关系是集合R,其中每个有序对的第一个元素取自A而第二个元素取自B。 我们使用记号 aRb表示(a, b)∈R,a R b表示(a, b)∉R。当(a, b)属于R时,称 a与b有关系R 。 📘例:设

    2024年02月04日
    浏览(45)
  • 离散数学_九章:关系(2)

    n元关系:两个以上集合的元素间的关系 设A 1 ,A 2 ,……,A n 是集合。定义在这些集合上的n元关系是A1×A2×……×An 的子集。这些集合A 1 ,A 2 ,……,A n 称为关系的域,n称为关系的阶。 📘例1:设R是N × N × N上的三元组(a, b, c)构成的关系,是个3阶关系,其中a, b, c是满

    2023年04月19日
    浏览(37)
  • 离散数学_九章:关系(3)

    本节及本章的剩余部分研究的所有关系均为二元关系,因此,在这些内容中出现的“关系〞一词都表示二元关系 关系是序偶的集合,所以描述集合能用的方法一般都可以描述关系,比如枚举满足关系的所有序偶,比如叙述满足关系的性质。 前面的例子都是用集合表示关系,

    2024年02月02日
    浏览(38)
  • 离散数学_九章:关系(5)

    定义1: 定义在集合 A 上的关系叫做等价关系,如果它们是 自反的、对称的和传递的。 定义2: 如果两个元素 a 和 b 由于等价关系而相关联,则称它们是等价的。记法 a~b 通常用来表示对于某个特定的等价关系来说,a 和 b 是等价的元素。 设 m 是大于 1 的整数。证明以下关系

    2024年02月02日
    浏览(354)
  • 离散数学_九章:关系(1)

    设A和B是集合,一个从 A 到 B 的二元关系是A×B的子集。 (序偶集合的子集) 🐳换句话说,一个从A到B的二元关系是集合R,其中每个有序对的第一个元素取自A而第二个元素取自B。 我们使用记号 aRb表示(a, b)∈R,a R b表示(a, b)∉R。当(a, b)属于R时,称 a与b有关系R 。 📘例:设

    2024年02月08日
    浏览(49)
  • 【Educoder离散数学实训】关系基础

    题有点多,能聊的不多。有些题还是比较有价值的 就单独说几个题,代码放在最后。所有函数都改成自己写的了,没准比答案给的好读一点? T1 求给定集合的对角线关系(diagonal relation) 我觉得如果卡住的话,第一关会是一个大坎。 因为我们并不知道他到底在说啥,于是我

    2024年02月07日
    浏览(52)
  • 离散数学 --- 特殊关系 --- 偏序关系,哈斯图和特殊元素以及其它次序关系

    1.当我们用 ≤ 符号来表示偏序关系的时候,这个符号就不再局限于它本来的含义了,此时的它表示的是元素之间的先后顺序,如下图:   1.这里的可比的意思是可比较元素在偏序关系中的先后顺序   1.哈斯图其实就是简化版的偏序关系的关系图 2.什么叫做由于传递关系必须出

    2024年01月15日
    浏览(40)
  • 离散数学编程作业--打印输出逻辑运算表

    编程内容及要求: 编写程序,打印输出9种基本逻辑运算符(与、或、非、条件、双条件、异或、与非、或非、条件否定)的运算表到字符文件logic.txt中。 编程语言可选择C、C++、Java或Python。 逻辑运算表输出格式示例: ------------------  P   Q    条件否定 ------------------  T   

    2023年04月21日
    浏览(41)
  • 【离散数学】二元关系中的对称与反对称

    对称与反对称:  注: 存在既是对称也是反对称的关系,也存在既非 对称也非反对称的关系 例题1:  例题2:          

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包