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:
Guide to WeakHashMap in Java
Registration – Password Strength and Rules
Filtering and Transforming Collections in Guava
Java Program to Find the Minimum value of Binary Search Tree
Java Program to Implement the MD5 Algorithm
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Guide To CompletableFuture
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Spring Boot - Code Structure
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Java Program to Implement Caesar Cypher
Java – InputStream to Reader
Command-Line Arguments in Java
A Quick JUnit vs TestNG Comparison
Date Time trong Java 8
Merging Two Maps with Java 8
Java Program to Implement PrinterStateReasons API
Phương thức tham chiếu trong Java 8 – Method References
Java Program to Solve any Linear Equation in One Variable
Guide to java.util.concurrent.Future
Java Program to Implement Sieve Of Eratosthenes
Simplify the DAO with Spring and Java Generics
Introduction to Project Reactor Bus
@Lookup Annotation in Spring
@Order in Spring
Java Program to Implement WeakHashMap API
Spring Boot - Creating Docker Image
Java Program to Implement Max Heap
Jackson Annotation Examples
Hashtable trong java
Java Program to Describe the Representation of Graph using Adjacency Matrix
Overview of Spring Boot Dev Tools