Java实现矩阵相乘问题

Java实现矩阵相乘问题1 问题描述 1 1 实验题目设 M1 和 M2 是两个 n n 的矩阵 设计算法计算 M1 M2 的乘积 1 2 实验目的 1 提高应用蛮力法设计算法的技能 2 深刻理解并掌握分治法的设计思想 3 理解这样一个观点 用蛮力法设计的算法 一般来说 经过适度的努力后 都可以对其进行改进 以提高算法的效率 1 3 实验要求 1 设计并实现用 BF Brute Force 即蛮力法 方法求解矩阵相乘问题

1 问题描述
1.1实验题目
设M1和M2是两个n×n的矩阵,设计算法计算M1×M2 的乘积。




1.2实验目的
(1)提高应用蛮力法设计算法的技能;

(2)深刻理解并掌握分治法的设计思想; (3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对其进行改进,以提高算法的效率。 

1.3实验要求
(1)设计并实现用BF(Brute-Force,即蛮力法)方法求解矩阵相乘问题的算法;

(2)设计并实现用DAC(Divide-And-Conquer,即分治法)方法求解矩阵相乘问题的算法; (3)以上两种算法的输入既可以手动输入,也可以自动生成; (4)对上述两个算法进行时间复杂性分析,并设计实验程序验证分析结果; (5)设计可供用户选择算法的交互式菜单(放在相应的主菜单下)。 

2 解决方案
2.1 分治法原理简述
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。




分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1 
  
  1. 该问题的规模缩小到一定的程度就可以容易地解决
  2. 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
  3. 利用该问题分解出的子问题的解可以合并为该问题的解;
  4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

2.2 分治法求解矩阵相乘原理
首先了解一下传统计算矩阵相乘的原理:
在这里插入图片描述
在这里插入图片描述
其次,看一下优化后的矩阵相乘法原理:
在这里插入图片描述
最后,看一下本文利用分治法求解矩阵相乘的原理(PS:本文求解其效率不是最高,主要是体验一下分治法,重点在于分治法):












注意:使用分治法求解两个nxn阶矩阵相乘,其中n值为2的幂值,否则只能使用蛮力法计算。

在这里插入图片描述
在这里插入图片描述
本文具体源码主要根据以上分块矩阵方法,先分块(即使用分治法),然后递归求解。




2.3 具体实现源码

package com.liuzhen.dac; public class Matrix { //初始化一个随机nxn阶矩阵 public static int[][] initializationMatrix(int n){ int[][] result = new int[n][n]; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ result[i][j] = (int)(Math.random()*10); //采用随机函数随机生成1~10之间的数 } } return result; } //蛮力法求解两个nxn和nxn阶矩阵相乘 public static int[][] BruteForce(int[][] p,int[][] q,int n){ int[][] result = new int[n][n]; for(int i=0;i 
  
    2){ int m = n/2; int[][] p1 = QuarterMatrix(p,n,1); int[][] p2 = QuarterMatrix(p,n,2); int[][] p3 = QuarterMatrix(p,n,3); int[][] p4 = QuarterMatrix(p,n,4); // System.out.println(); // System.out.print("矩阵p1值为:"); // PrintfMatrix(p1,m); // System.out.println(); // System.out.print("矩阵p2值为:"); // PrintfMatrix(p2,m); // System.out.println(); // System.out.print("矩阵p3值为:"); // PrintfMatrix(p3,m); // System.out.println(); // System.out.print("矩阵p4值为:"); // PrintfMatrix(p4,m); int[][] q1 = QuarterMatrix(q,n,1); int[][] q2 = QuarterMatrix(q,n,2); int[][] q3 = QuarterMatrix(q,n,3); int[][] q4 = QuarterMatrix(q,n,4); int[][] result1 = QuarterMatrix(result,n,1); int[][] result2 = QuarterMatrix(result,n,2); int[][] result3 = QuarterMatrix(result,n,3); int[][] result4 = QuarterMatrix(result,n,4); result1 = AddMatrix(DivideAndConquer(p1,q1,m),DivideAndConquer(p2,q3,m),m); result2 = AddMatrix(DivideAndConquer(p1,q2,m),DivideAndConquer(p2,q4,m),m); result3 = AddMatrix(DivideAndConquer(p3,q1,m),DivideAndConquer(p4,q3,m),m); result4 = AddMatrix(DivideAndConquer(p3,q2,m),DivideAndConquer(p4,q4,m),m); result = TogetherMatrix(result1,result2,result3,result4,m); } return result; } //获取矩阵的四分之一,并决定返回哪一个四分之一 public static int[][] QuarterMatrix(int[][] p,int n,int number){ int rows = n/2; //行数减半 int cols = n/2; //列数减半 int[][] result = new int[rows][cols]; switch(number){ case 1 : { // result = new int[rows][cols]; for(int i=0;i 
    
  

2.4 运算结果截图
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221312.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:25
下一篇 2026年3月17日 下午6:25


相关推荐

  • Tomcat环境变量配置

    Tomcat环境变量配置tomact 配置说明 环境变量

    2026年3月18日
    2
  • JSP动作元素

    JSP动作元素分类<jsp:includepage="content.jsp"></jsp:include>使用<%@include%>

    2021年12月24日
    48
  • Java inputstream 转 file

    Java inputstream 转 filepublicclassT publicstatic String args inputstream 转 fileFilefile newFile C Users haocj Desktop 工作总结 xls FiletargetFi null

    2026年3月16日
    2
  • Win10搭建FTP服务器详细教程-附操作截图

    Win10搭建FTP服务器详细教程-附操作截图文章目录新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设

    2022年7月12日
    20
  • xAI创始伙伴只剩两人!马斯克面对离职潮“痛改前非”:从头彻底重建

    xAI创始伙伴只剩两人!马斯克面对离职潮“痛改前非”:从头彻底重建

    2026年3月14日
    2
  • 【数学基础】矩阵的特征向量、特征值及其含义

    【数学基础】矩阵的特征向量、特征值及其含义在线代课上 老师会教我们怎么求矩阵的特征值与特征向量 但是并不会讲特征值与特征向量到底有着什么样的几何意义或者物理意义 或许讲了但也比较模糊 矩阵的特征值与特征向量在各种机器学习算法与应用场景中都有出现 每次出现都有着其独特的意义 在这里也只是简述一二 一 方阵的特征值与特征向量 1 特征值与特征向量的定义 定义 1 设是阶方阵 若数和维非零列向量 使得成立 则称是方阵的一个特征值 为方阵

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号