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向Bing Webmaster Tools提交URL 在本文中将使用Python向Bing Webmaster Tools提交URL,提交的URL会被很快进行评估,满足质量标准时,就会出现在bing搜索结果中;
Linux系统删除目录下的所有空目录 在Linux系统下,你如果想删除某个目录下所有的空目录,那你可以通过这一条命令实现:
Python类的特殊方法 本教程详细介绍了Python中类的绝大多数特殊方法,通过定义和实现这些特殊方法,可以使自定义的对象具更强大的功能。
近期WordPress更新失败以及官网无法打开原因 在WordPress后台进行更新,尝试多次均发生了 429 Too Many Requests 错误。起初以为是当前WordPress更新用户较多导致的,随后几天发现大多数用户还是无法更新,且错误都为429,且WordPress的官网也无法打开,返回429错误。
Python bin()函数 bin()是 Python 内置函数之一,它可以将一个整数转换为二进制字符串表示。
PySide6 使用QIcon为按钮添加图标 在PySide6中为按钮添加图标,可以使用QIcon类来加载图标文件,并使用QPushButton类的setIcon()方法将图标设置给按钮;