C语言实现矩阵乘法Strassen算法

本文将使用C语言来实现Strassen算法,将两个矩阵相乘;

示例代码:

#include<stdio.h>

int main(){

  int a[2][2], b[2][2], c[2][2], i, j;
  int m1, m2, m3, m4 , m5, m6, m7;

  a[0][0] =1 ;a[0][1] =2 ;
  a[1][0] =3 ;a[1][1] =4 ;

  b[0][0] =5 ;b[0][1] =6 ;
  b[1][0] =7 ;b[1][1] =8 ;
 
  printf("\nThe first matrix is\n");
  for(i = 0; i < 2; i++){
      printf("\n");
      for(j = 0; j < 2; j++)
           printf("%d\t", a[i][j]);
  }
 
  printf("\nThe second matrix is\n");
  for(i = 0;i < 2; i++){
      printf("\n");
      for(j = 0;j < 2; j++)
           printf("%d\t", b[i][j]);
  }
 
  m1= (a[0][0] + a[1][1]) * (b[0][0] + b[1][1]);
  m2= (a[1][0] + a[1][1]) * b[0][0];
  m3= a[0][0] * (b[0][1] - b[1][1]);
  m4= a[1][1] * (b[1][0] - b[0][0]);
  m5= (a[0][0] + a[0][1]) * b[1][1];
  m6= (a[1][0] - a[0][0]) * (b[0][0]+b[0][1]);
  m7= (a[0][1] - a[1][1]) * (b[1][0]+b[1][1]);
 
  c[0][0] = m1 + m4- m5 + m7;
  c[0][1] = m3 + m5;
  c[1][0] = m2 + m4;
  c[1][1] = m1 - m2 + m3 + m6;
 
   printf("\nAfter multiplication using Strassen's algorithm \n");
   for(i = 0; i < 2 ; i++){
      printf("\n");
      for(j = 0;j < 2; j++)
           printf("%d\t", c[i][j]);
   }
 
   return 0;
}

这是一个使用Strassen乘法算法计算两个矩阵乘积的程序,在这个程序中,矩阵的维数必须是2的幂。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/c-implement-strassen-algorithm.html

分类: 计算机技术
推荐阅读:
Python检查一个数是奇数还是偶数 本文将使用Python检查一个数是奇数还是偶数;偶数是能被2所整除的整数,若不是,那它就是奇数;奇数初以2的余数是1;
Golang中结构体方法的定义和使用 本文将详细的描述在Go语言中如何定义方法,以及如何使用它;阅读本文可能需要一点Go语言基础以及结构体的知识;
Python oct()函数 oct() 是 Python 的内置函数之一,用于将整数转换为八进制字符串。
Golang获取文件的大小 在Go语言中,你可以使用os.Stat()来获取文件信息,其中就包括文件的大小;
查看Linux系统是32位还是64位 在Linux系统下,你可以通过一条命令获得系统是32位的还是64位的:
Linux下查看端口是哪个程序在使用 在Linux系统下,如果你想知道某个端口是哪些程序在使用,你可以使用这一条命令来查看: