• 大小: 9KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: 矩阵相乘  

资源简介

矩阵相乘,普通算法的时间界是10的3此方,而采用strassen算法可提高运算效率。

资源截图

代码片段和文件信息

#include “stdio.h“
#include
#define mytype int//矩阵元素的数据类型
#define myinputmode “%d“//矩阵元素的输入格式
#define myprintmode “%4d“//矩阵元素的输出格式
/*以上参数的设置可根据所计算矩阵的元素的数值类型进行相应改变
如更改为浮点型数据则可以使用下面的设置
#define mytype float
#define myinputmode “%f“
#define myprintmode “%6.2f“
*/
/////////////////////////////////////////
/****************************************
函数名:is2
参数:m为长整型整数
功能:检测m是否是2的正整数次幂
返回值:返回布尔型变量
        true则表示m为2的正整数次幂
  false则表示m不是2的正整数次幂
****************************************/
int is2(int m)
{
 if(m<0)return 0;
 if(m>=2)
 {
  if((m%2)==0) return is2(m/2);
  else return 0;
 }
 else
 {
  if(m==1)return 1;
  else return 0;
 }
 return 0;
}
/////////////////////////////////////////
/****************************************
函数名:inputmatrix
参数:M为指向数组的指针,用来存储输入的矩阵
      m长整型,是数组M所存矩阵的维数
   name字符型数组,是需要进行数据输入的矩阵的名字
功能:矩阵数据输入的函数,通过输入矩阵的每个元素将
      矩阵存入数组
返回值:无
****************************************/
void inputmatrix(mytype * Mint mchar *nameint a[][200])
{
 int ij;
 for(i=0;i  for(j=0;j  {
   
   M[i*m+j]=a[i+1][j+1];
  
  }
}
/////////////////////////////////////////
/****************************************
函数名:printmatrix
参数:M为指向数组的指针,数组中存储着矩阵
      m长整型,是数组M所存矩阵的维数
   name字符型数组,是需要进行数据输入的矩阵的名字
功能:矩阵数据输出显示的函数,将矩阵元素一一显示一在屏幕上
返回值:无
****************************************/
void printmatrix(mytype * Mint mint nchar *name)
{
 int ij;
 for(i=0;i {
  for(j=0;j  {
   printf(myprintmodeM[i*m+j]);
  }
  printf(“\n“);
 }
}
void printmatrix2(mytype * Mint Nint mint nchar *name)
{
 int ijk;
 for(k=0i=0;k {
  for(j=0;j  {
   printf(myprintmodeM[i+j]);
  }
  printf(“\n“);
 }
}
/////////////////////////////////////////
/****************************************
函数名:Matrix_add_sub
参数:A,B为指向数组的指针,数组中存储着矩阵
   C为指向数组的指针,用来存储运算结果
      m长整型,是数组A、B、C所存矩阵的维数
   add为布尔型变量,为true则C=A+B,为false则C=A-B
功能:根据add值对A、B进行加减运算并将结果存入C
返回值:无
****************************************/
void Matrix_add_sub(mytype * Amytype * Bmytype * Cint mint add)
{
 long i;
 for(i=0;i {
  if(add==1)
   C[i]=A[i]+B[i];
  else
   C[i]=A[i]-B[i];
 }
}
/////////////////////////////////////////
/****************************************
函数名:GetHalfValue
参数:B为指向数组的指针,数组中存储着矩阵。其中B是指向m维矩阵中的一个元素。
   A为指向数组的指针,用来接收B中的四分之一数据
      m长整型,是数组B所指矩阵的维数
功能:从B所在位置向左和向右取矩阵的m/2维的子矩阵(子矩阵中包括B所指元素)并存入A
返回值:无
****************************************/
void GetHalfValue(mytype * Amytype * Bint m)
{
 int ij;
 for(i=0;i {
  for(j=0;j  {
   A[i*m/2+j]=B[i*m+j];
  }
 }
}
/////////////////////////////////////////
/****************************************
函数名:UpdateHalfValue
参数:B为指向数组的指针,数组中存储着矩阵。其中B是指向m维矩阵中的一个元素。
   A为指向数组的指针,存储着一个m/2维矩阵
      m长整型,是数组B所指矩阵的维数
功能:把A矩阵所有元素存入从B所在位置向左和向右的m/2维的子矩阵(子矩阵中包括B所指元素)
返回值:无
****************************************/
void UpdateHalfValue(mytype * A

评论

共有 条评论