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

分类: 计算机技术
推荐阅读:
Linux下查看端口是哪个程序在使用 在Linux系统下,如果你想知道某个端口是哪些程序在使用,你可以使用这一条命令来查看:
Python dir()函数 在Python中,dir()函数是一个内置函数,用于列出指定对象的属性和方法。如果没有指定对象,则默认使用当前作用域中的所有对象。dir()函数返回一个字符串列表,包含指定对象的所有属性和方法名称。
Golang在Windows环境下编译出Linux环境下运行的可执行程序 我们可以使用这种方法在Windows系统下编译出其它平台的可执行程序,相反,也可以在Linux系统下编译出Windows平台的可执行程序。
C语言ispunct()函数:判断字符是否为标点符号 ispunct()是C语言标准库中的一个函数,用于检查一个字符是否为标点符号;如果传入的字符参数是标点符号,则返回非0值,否则返回0;
Rust中宏与函数的区别 宏能够接受不同数量和类型的参数,这使得宏在处理多样化的输入时更加灵活。函数具有明确定义的参数列表和返回值类型,参数数量和类型通常是固定的。
MySQL AES_ENCRYPT()、AES_DECRYPT()函数 AES_ENCRYPT()和AES_DECRYPT()使用官方AES算法实现数据的加密和解密;其密钥默认长度为128位,默认块加密模式为ECB;