From 2adf07240eba400ec5cbbef46d5b5efad9c3d0a4 Mon Sep 17 00:00:00 2001 From: Shrey Gupta <75122294+Shreygupta2002@users.noreply.github.com> Date: Sat, 7 Oct 2023 13:39:36 +0530 Subject: [PATCH] Added Strassens Algorithm Please add the hacktoberfest tag --- c++/strassen_algo.cpp | 179 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 c++/strassen_algo.cpp diff --git a/c++/strassen_algo.cpp b/c++/strassen_algo.cpp new file mode 100644 index 0000000..15e96e9 --- /dev/null +++ b/c++/strassen_algo.cpp @@ -0,0 +1,179 @@ +#include +using namespace std; +typedef long long int ll; +int nextpowerof2(int x) +{ + int temp=1; + while(temp> padding(vector> A, int n) +{ + vector> ans(n,vector(n)); + for(int i=0;i> addMatrix(vector> A, vector>B, int n) +{ + vector> sum(n,vector(n)); + for(int i=0;i> subtractMatrix(vector> A, vector>B, int n) +{ + vector> diff(n,vector(n)); + for(int i=0;i> Strassen(vector> A, vector> B, int n) +{ + vector> prod(n,vector(n)); + if(n==1) + { + prod[0][0]=A[0][0]*B[0][0]; + return prod; + } + + vector> a(n/2,vector(n/2)); + vector> b(n/2,vector(n/2)); + vector> c(n/2,vector(n/2)); + vector> d(n/2,vector(n/2)); + + vector> e(n/2,vector(n/2)); + vector> f(n/2,vector(n/2)); + vector> g(n/2,vector(n/2)); + vector> h(n/2,vector(n/2)); + + for(int i=0;i> p1(n/2,vector(n/2)); + vector> p2(n/2,vector(n/2)); + vector> p3(n/2,vector(n/2)); + vector> p4(n/2,vector(n/2)); + vector> p5(n/2,vector(n/2)); + vector> p6(n/2,vector(n/2)); + vector> p7(n/2,vector(n/2)); + + p1=Strassen(a,subtractMatrix(f,h,n/2),n/2); + p2=Strassen(addMatrix(a,b,n/2),h,n/2); + p3=Strassen(addMatrix(c,d,n/2),e,n/2); + p4=Strassen(d,subtractMatrix(g,e,n/2),n/2); + p5=Strassen(addMatrix(a,d,n/2),addMatrix(e,h,n/2),n/2); + p6=Strassen(subtractMatrix(b,d,n/2),addMatrix(g,h,n/2),n/2); + p7=Strassen(subtractMatrix(a,c,n/2),addMatrix(e,f,n/2),n/2); + + for(int i=0;i>n1>>m1; + vector> A(n1,vector(m1)); + for(int i=0;i>A[i][j]; + } + } + int n2, m2; + cin>>n2>>m2; + vector> B(n2,vector(m2)); + for(int i=0;i>B[i][j]; + } + } + if(m1!=n2) + { + cout<<"Matrix Multiplication Not Possible!!"<> C(n,vector(n)); + C=Strassen(A,B,n); + + for(int i=0;i(stop-start); + cerr<