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:
Spring Boot Gradle Plugin
Convert String to int or Integer in Java
A Guide to LinkedHashMap in Java
Java Program to Decode a Message Encoded Using Playfair Cipher
How to Change the Default Port in Spring Boot
Spring Boot - Code Structure
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Spring Boot - Database Handling
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Sử dụng CountDownLatch trong Java
Apache Commons Collections OrderedMap
Java Program to Represent Linear Equations in Matrix Form
Các chương trình minh họa sử dụng Cấu trúc điều khiển trong Java
Java Program to Implement Warshall Algorithm
A Guide to JUnit 5
Java Program to Implement Double Order Traversal of a Binary Tree
Java Program to Implement ArrayList API
Tìm hiểu về xác thực và phân quyền trong ứng dụng
New in Spring Security OAuth2 – Verify Claims
Static Content in Spring WebFlux
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Cơ chế Upcasting và Downcasting trong java
Java Program to Perform the Sorting Using Counting Sort
Spring’s RequestBody and ResponseBody Annotations
A Guide to Spring Cloud Netflix – Hystrix
Java – Delete a File
Check if a String is a Palindrome in Java
StringBuilder vs StringBuffer in Java
Convert Hex to ASCII in Java
Map Interface trong java
Spring Security Login Page with React