From fa4f9d7acdcb9842650b7530b42af2c910946b78 Mon Sep 17 00:00:00 2001 From: blackviper0820 <56683166+blackviper0820@users.noreply.github.com> Date: Tue, 29 Oct 2019 23:43:17 +0530 Subject: [PATCH] Chetan.cpp --- Rabin-karp/Chetan.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Rabin-karp/Chetan.cpp diff --git a/Rabin-karp/Chetan.cpp b/Rabin-karp/Chetan.cpp new file mode 100644 index 0000000..e2c3b65 --- /dev/null +++ b/Rabin-karp/Chetan.cpp @@ -0,0 +1,79 @@ +/* Following program is a C++ implementation of Rabin Karp +Algorithm given in the CLRS book */ +#include +using namespace std; + +// d is the number of characters in the input alphabet +#define d 256 + +/* pat -> pattern + txt -> text + q -> A prime number +*/ +void search(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; + + // The value of h would be "pow(d, M-1)%q" + for (i = 0; i < M - 1; i++) + h = (h * d) % q; + + // Calculate the hash value of pattern and first + // window of text + for (i = 0; i < M; i++) + { + p = (d * p + pat[i]) % q; + t = (d * t + txt[i]) % q; + } + + // Slide the pattern over text one by one + for (i = 0; i <= N - M; i++) + { + + // Check the hash values of current window of text + // and pattern. If the hash values match then only + // check for characters on by one + if ( p == t ) + { + /* Check for characters one by one */ + for (j = 0; j < M; j++) + { + if (txt[i+j] != pat[j]) + break; + } + + // if p == t and pat[0...M-1] = txt[i, i+1, ...i+M-1] + if (j == M) + cout<<"Pattern found at index "<< i<