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:
JUnit5 Programmatic Extension Registration with @RegisterExtension
Java Program to Emulate N Dice Roller
Display Auto-Configuration Report in Spring Boot
Apache Camel with Spring Boot
Logout in an OAuth Secured Application
Check If Two Lists are Equal in Java
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Java Program to Implement Hash Tables Chaining with List Heads
Giới thiệu HATEOAS
Sorting Query Results with Spring Data
Java Copy Constructor
Java Program to Implement HashSet API
Java Program to Convert a Decimal Number to Binary Number using Stacks
Interface trong Java 8 – Default method và Static method
Spring Boot - Cloud Configuration Client
Hướng dẫn Java Design Pattern – Factory Method
Assert an Exception is Thrown in JUnit 4 and 5
How to Manually Authenticate User with Spring Security
Java Program to Implement SimpeBindings API
Java Program to Implement Word Wrap Problem
Java Program to Implement Nth Root Algorithm
Autoboxing và Unboxing trong Java
A Custom Media Type for a Spring REST API
Java Program to Implement JobStateReasons API
Guide to Guava Table
HttpClient 4 – Follow Redirects for POST
Redirect to Different Pages after Login with Spring Security
Spring Boot - Google OAuth2 Sign-In
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Arrays.asList vs new ArrayList(Arrays.asList())
Java Program to Perform Sorting Using B-Tree
Adding Parameters to HttpClient Requests