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:
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Model, ModelMap, and ModelAndView in Spring MVC
Java Program to Find Strongly Connected Components in Graphs
Java Program to Implement Hash Tables with Linear Probing
The DAO with Spring and Hibernate
Mapping a Dynamic JSON Object with Jackson
Spring Security 5 – OAuth2 Login
Java Program to Encode a Message Using Playfair Cipher
StringBuilder vs StringBuffer in Java
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
So sánh ArrayList và Vector trong Java
Hướng dẫn Java Design Pattern – Visitor
Java – Rename or Move a File
Spring Cloud AWS – EC2
LinkedHashSet trong Java hoạt động như thế nào?
Java Program to Implement Quick Sort Using Randomization
Comparing Two HashMaps in Java
A Guide to Concurrent Queues in Java
Java Program to Perform the Sorting Using Counting Sort
Spring REST with a Zuul Proxy
HttpClient 4 – Follow Redirects for POST
Spring Boot - Build Systems
Java Program to Implement Heap Sort Using Library Functions
Biến trong java
A Guide to JPA with Spring
Check If a String Is Numeric in Java
Mix plain text and HTML content in a mail
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Java Program to Implement Sparse Array
A Guide to LinkedHashMap in Java
Query Entities by Dates and Times with Spring Data JPA