From 35ac9e4dd0bb3a72045c771ed249427711016205 Mon Sep 17 00:00:00 2001 From: Rishu Rajan <56962548+RishuRajan@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:21:54 +0530 Subject: [PATCH] Create RabinKrabAlgorithm --- String_Algo/RabinKrabAlgorithm | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 String_Algo/RabinKrabAlgorithm diff --git a/String_Algo/RabinKrabAlgorithm b/String_Algo/RabinKrabAlgorithm new file mode 100644 index 0000000..2291f44 --- /dev/null +++ b/String_Algo/RabinKrabAlgorithm @@ -0,0 +1,48 @@ +//This Algorithm is badically helpful in Pattern Searching +/* pat -> pattern + txt -> text + q -> A prime number +*/ +Algorithm given in the CLRS book */ +#include +using namespace std; +#define d 256 // d is the number of characters in the input alphabet +void rabinkrabsearch(char pat[], char txt[], int q) +{ + int M = strlen(pat); + int N = strlen(txt); + int i, j; + int p = 0; // hash value for pattern + int t = 0; // hash value for txt + int h = 1; + for (i = 0; i < M - 1; i++) + h = (h * d) % q; + for (i = 0; i < M; i++) + { + p = (d * p + pat[i]) % q; + t = (d * t + txt[i]) % q; + } + for (i = 0; i <= N - M; i++) + { + if ( p == t ) + { + for (j = 0; j < M; j++) + { + if (txt[i+j] != pat[j]) + break; + } + if (j == M) + cout<<"Pattern found at index "<< i<