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:
Java Program to Implement Gale Shapley Algorithm
Java Program to Find the GCD and LCM of two Numbers
A Guide to Spring Boot Admin
Guide to java.util.concurrent.Future
Spring Boot - Application Properties
Abstract class và Interface trong Java
Java Program to Perform Partition of an Integer in All Possible Ways
Introduction to Eclipse Collections
Java Program to Perform Stooge Sort
Java Program to Implement the String Search Algorithm for Short Text Sizes
Java Program to Generate All Subsets of a Given Set in the Gray Code Order
The “final” Keyword in Java
Tránh lỗi NullPointerException trong Java như thế nào?
Java Program to Implement Insertion Sort
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
Java Program to Compute Determinant of a Matrix
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Java Program to Implement JobStateReasons API
Spring Boot - Admin Client
A Guide to Queries in Spring Data MongoDB
Java Program to Solve any Linear Equation in One Variable
Giới thiệu HATEOAS
The Spring @Controller and @RestController Annotations
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Hướng dẫn Java Design Pattern – Proxy
Java – File to Reader
Spring Boot: Customize Whitelabel Error Page
Java Program to Implement Circular Doubly Linked List
An Intro to Spring Cloud Vault
Collect a Java Stream to an Immutable Collection
Spring Boot - Database Handling
Java Program to Find Nearest Neighbor for Dynamic Data Set