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 memoryview()函数 memoryview() 函数是一个内置函数,它返回一个memoryview对象,该对象可以用于在 Python 中访问二进制数据。
Linux从视频文件里提取音频 通常来说,从一个视频文件里提取出其音频可能需要你学习使用某些音视频处理软件;而在Linux下,你只需要一条命令即可实现将将音频从视频文件中提取出来:
Python实现二分法检索(binary search) 二分法检索(binary search)又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中。
Golang和Go的区别 Golang就是Go,Go就是Golang;Golang全称是Go language。
Pyside6 allWidgets()函数详细教程 PySide6.QtWidgets.QApplication类的成员函数allWidgets()用于返回一个包含所有小部件对象的列表;
check_hostname requires server_hostname 错误解决方法 通常造成check_hostname requires server_hostname错误都与Python有关;本文将详细的描述造成这类错误的原因和多种解决方法;