This is the java implementation of classic Coppersmith-Freivalds’ algorithm to check whether the multiplication of matrix A and B equals the given matrix C. It does it by checking A*(B*r)-(C*r) where r is any random column vector consisting only 0/1 as its elements. If this value is zero algorithm prints Yes, No otherwise.
Here is the source code of the Java Program to Implement Coppersmith Freivald’s Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a sample program to check whether the matrix c is equal to the multiplication of a and b
//implementation of Coppersmith Freivalds Algorithm
import java.util.Random;
import java.util.Scanner;
public class Coppersmith_Freivalds_Algorithm
{
public static void main(String args[])
{
System.out.println("Enter the dimesion of the matrices: ");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println("Enter the 1st matrix: ");
double a[][] = new double[n][n];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
a[i][j] = input.nextDouble();
}
}
System.out.println("Enter the 2st matrix: ");
double b[][] = new double[n][n];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
b[i][j] = input.nextDouble();
}
}
System.out.println("Enter the result matrix: ");
double c[][] = new double[n][n];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
c[i][j] = input.nextDouble();
}
}
//random generation of the r vector containing only 0/1 as its elements
double [][]r = new double[n][1];
Random random = new Random();
for(int i=0; i<n; i++)
{
r[i][0] = random.nextInt(2);
}
//test A * (b*r) - (C*) = 0
double br[][] = new double[n][1];
double cr[][] = new double[n][1];
double abr[][] = new double[n][1];
br = multiplyVector(b, r, n);
cr = multiplyVector(c, r, n);
abr = multiplyVector(a, br, n);
//check for all zeros in abr
boolean flag = true;
for(int i=0; i<n; i++)
{
if(abr[i][0] == 0)
continue;
else
flag = false;
}
if(flag == true)
System.out.println("Yes");
else
System.out.println("No");
input.close();
}
public static double[][] multiplyVector(double[][] a, double[][] b, int n)
{
double result[][] = new double[n][1];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 1; j++)
{
for (int k = 0; k < n; k++)
{
result[i][j] = result[i][j] + a[i][k] * b[k][j];
}
}
}
return result;
}
}
Output:
$ javac Coppersmith_Freivalds_Algorithm.java $ java Coppersmith_Freivalds_Algorithm Enter the dimesion of the matrices: 2 Enter the 1st matrix: 2 3 3 4 Enter the 2st matrix: 1 0 1 2 Enter the result matrix: 6 5 8 7 Yes
Related posts:
Java Program to Find the Mode in a Data Set
Java Program to Find the Nearest Neighbor Using K-D Tree Search
A Guide To UDP In Java
Consuming RESTful Web Services
Java Program to Check if any Graph is Possible to be Constructed for a Given Degree Sequence
Beans and Dependency Injection
Constructor Dependency Injection in Spring
Java Program to Find a Good Feedback Vertex Set
Extract links from an HTML page
HttpClient 4 – Follow Redirects for POST
Concrete Class in Java
Spring Boot Annotations
New Features in Java 14
Hướng dẫn sử dụng Lớp FilePermission trong java
Java Program to Implement D-ary-Heap
Java Streams vs Vavr Streams
Mệnh đề Switch-case trong java
Java Program to Implement PriorityBlockingQueue API
The Basics of Java Security
Serialize Only Fields that meet a Custom Criteria with Jackson
Spring REST with a Zuul Proxy
Java Program to Implement the MD5 Algorithm
Custom Error Pages with Spring MVC
Registration with Spring Security – Password Encoding
ArrayList trong java
Java Program to find the number of occurrences of a given number using Binary Search approach
Java Program to Implement Max-Flow Min-Cut Theorem
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Partition a List in Java
Java Program to Implement Min Hash
Java Program to Represent Graph Using Linked List
Query Entities by Dates and Times with Spring Data JPA