递归,分治法.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递归,分治法

武夷学院实验报告 课程名称: 算法设计与分析 项目名称: 递归与分治法 姓名 专业:计科 班级: 1 学号:_ 同组成员__无 实验预习: 实验目的:利用递归与分治法解决简单问题,加深对分治算法的理解与掌握。 实验内容: 利用递归与分治法解决Strassen矩阵乘法问题。 实验原理: 我们知道当数据量一大时,我们往往会把大的数据分割成小的数据,各个分别处理。遵此思路,如果丢给我们一个很大的两个矩阵呢,是否可以考虑分治的方法循序渐进处理各个小矩阵的相乘,因为我们知道一个矩阵是可以分成更多小的矩阵的。 实验条件:具有Visual Studio2013的计算机系统;Internet环境。 算法设计: 整个算法的大致思想是:在函数Mul(int?n,int?**A,int?**B,int?**M)中,调用Divide(n,A,A11,A12,A21,A22);和Divide(n,B,B11,B12,B21,B22);将A和B都分为四个(n/2)*(n/2)的子矩阵。然后递归调用?????????Sub(n,B12,B22,T1);T1=B12-B22? ????????Mul(n,?A11,T1?,M1);M1=A11(B12-B22)?????????Add(n,A11,A12,T2);? ????????Mul(n,T2,B22,M2);M2=(A11+A12)B22?????????Add(n,A21,A22,T1);? ????????Mul(n,T1,B11,M3);M3=(A21+A22)B11?????????Sub(n,B21,B11,T1);? ????????Mul(n,?A22,T1?,M4);M4=A22(B21-B11)?????????Add(n,A11,A22,T1);?????????Add(n,B11,B22,T2);? ????????Mul(n,T1,T2,M5);M5=(A11+A22)(B11+B22)?????????Sub(n,A12,A22,T1);?????????Add(n,B21,B22,T2);? ????????Mul(n,T1,T2,M6);M6=(A12-A22)(B21+B22)?????????Sub(n,A11,A21,T1);?????????Sub(n,B11,B12,T2);? ????????Mul(n,T1,T2,M7);M7=(A11-A21)(B11+B12)??? ????????Add(n,M5,M4,T1);?????????Sub(n,T1,M2,T2);? ????????Add(n,T2,M6,M11);M11=M5+M4-M2+M6?? ????????Add(n,M1,M2,M12);M12=M1+M2?? ????????Add(n,M3,M4,M21);M21=M3+M4?? ????????Add(n,M5,M1,T1);?????????Sub(n,T1,M3,T2);? ????????Sub(n,T2,M7,M22);M22=M5+M1-M3-M7?? ????????Unit(n,M,M11,M12,M21,M22);? 将上面得到的四个矩阵组合成一个n*n矩阵。则这个n*n矩阵就是AB的结果C。? 实验过程记录: #include "stdafx.h" #include <iostream> #include <ctime> #include <Windows.h> using namespace std; template<typename T> class Strassen_class{ public: void ADD(T** MatrixA, T** MatrixB, T** MatrixResult, int MatrixSize ); void SUB(T** MatrixA, T** MatrixB, T** MatrixResult, int MatrixSize ); void MUL( T** MatrixA, T** MatrixB, T** MatrixResult, int MatrixSize ); void FillMatrix( T** MatrixA, T** MatrixB, int length);//A,B矩阵赋值 void PrintMatrix(T **MatrixA,int MatrixSize);//打印矩阵 void Strassen(int N, T **Matri

您可能关注的文档

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档