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:
@Lookup Annotation in Spring
Hướng dẫn Java Design Pattern – Transfer Object
An Intro to Spring Cloud Contract
Properties with Spring and Spring Boot
Java Program to Implement Nth Root Algorithm
Spring Boot: Customize the Jackson ObjectMapper
Autoboxing và Unboxing trong Java
Java Program to Implement Repeated Squaring Algorithm
Java Program to Implement the Binary Counting Method to Generate Subsets of a Set
Converting Iterator to List
Java Program to Implement Hash Tree
Optional trong Java 8
Guide to Spring @Autowired
Wiring in Spring: @Autowired, @Resource and @Inject
Java Program to Implement Interpolation Search Algorithm
Convert char to String in Java
Java InputStream to String
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Difference Between Wait and Sleep in Java
Guide to the Java ArrayList
Java Program to Implement Insertion Sort
Java Program to Generate a Random Subset by Coin Flipping
Concrete Class in Java
Java 8 Stream findFirst() vs. findAny()
Introduction to Spring Data MongoDB
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Reactive Flow with MongoDB, Kotlin, and Spring WebFlux
How to Break from Java Stream forEach
Java Program to Use Dynamic Programming to Solve Approximate String Matching
Spring Boot - Sending Email
Lập trình mạng với java
Java Program to Implement Triply Linked List