This is a Java Program to implement Rolling Hash. Here Rabin Karp algorithm is implemented using Rolling Hash.
Here is the source code of the Java program to implement Rolling Hash. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/** * Java Program to Implement Rolling Hash **/ import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Random; import java.math.BigInteger; class RabinKarp { /** String Pattern **/ private String pat; /** pattern hash value **/ private long patHash; /** pattern length **/ private int M; /** Large prime **/ private long Q; /** radix **/ private int R; /** R^(M-1) % Q **/ private long RM; /** Constructor **/ public RabinKarp(String txt, String pat) { this.pat = pat; R = 256; M = pat.length(); Q = longRandomPrime(); /** precompute R^(M-1) % Q for use in removing leading digit **/ RM = 1; for (int i = 1; i <= M-1; i++) RM = (R * RM) % Q; patHash = hash(pat, M); int pos = search(txt); if (pos == txt.length()) System.out.println("\nNo Match\n"); else System.out.println("Pattern found at : "+ pos); } /** Compute hash **/ private long hash(String key, int M) { long h = 0; for (int j = 0; j < M; j++) h = (R * h + key.charAt(j)) % Q; return h; } /** Funtion check **/ private boolean check(String txt, int i) { for (int j = 0; j < M; j++) if (pat.charAt(j) != txt.charAt(i + j)) return false; return true; } /** Funtion to check for exact match**/ private int search(String txt) { int N = txt.length(); if (N < M) return N; long txtHash = hash(txt, M); /** check for match at start **/ if ((patHash == txtHash) && check(txt, 0)) return 0; /** check for hash match. if hash match then check for exact match**/ for (int i = M; i < N; i++) { // Remove leading digit, add trailing digit, check for match. txtHash = (txtHash + Q - RM*txt.charAt(i - M) % Q) % Q; txtHash = (txtHash * R + txt.charAt(i)) % Q; // match int offset = i - M + 1; if ((patHash == txtHash) && check(txt, offset)) return offset; } /** no match **/ return N; } /** generate a random 31 bit prime **/ private static long longRandomPrime() { BigInteger prime = BigInteger.probablePrime(31, new Random()); return prime.longValue(); } } /** Class RollingHashTest **/ public class RollingHashTest { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Rolling Hash Test\n"); System.out.println("\nEnter Text\n"); String text = br.readLine(); System.out.println("\nEnter Pattern\n"); String pattern = br.readLine(); System.out.println("\nResults : \n"); RabinKarp rk = new RabinKarp(text, pattern); } }
Rolling Hash Test Enter Text abcdefghijklmnopqrstuvwxyz Enter Pattern jklmn Results : Pattern found at : 9
Related posts:
Performance Difference Between save() and saveAll() in Spring Data
Java – File to Reader
Java Program to Implement Expression Tree
Understanding Memory Leaks in Java
Lớp TreeMap trong Java
Validations for Enum Types
Java Program to Implement Gale Shapley Algorithm
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Java Program to Implement Unrolled Linked List
Composition, Aggregation, and Association in Java
Java Program to Perform Searching Using Self-Organizing Lists
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Java Program to Implement Min Heap
Comparing Dates in Java
Hướng dẫn Java Design Pattern – State
Check if there is mail waiting
Java Program to Implement VList
Quản lý bộ nhớ trong Java với Heap Space vs Stack
Spring Boot - Apache Kafka
A Guide to Java SynchronousQueue
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Pagination and Sorting using Spring Data JPA
Array to String Conversions
Sort a HashMap in Java
The Spring @Controller and @RestController Annotations
Convert Time to Milliseconds in Java
A Guide to Spring Boot Admin
Java Program to Represent Graph Using Incidence List
Phương thức tham chiếu trong Java 8 – Method References
Extra Login Fields with Spring Security
Java Program to Check whether Graph is a Bipartite using DFS
Check If Two Lists are Equal in Java