কম্পিউটার টিউটোরিয়াল

রাবিন-কার্প অ্যালগরিদম প্যাটার্ন সার্চিং: C প্রোগ্রাম


এই সমস্যাতে, আমাদের দুটি স্ট্রিং দেওয়া আছে: একটি টেক্সট এবং একটি প্যাটার্ন। আমাদের কাজ হল রাবিন-কার্প অ্যালগরিদম ব্যবহার করে প্যাটার্ন সার্চের প্রোগ্রাম তৈরি করা, যা টেক্সট স্ট্রিং-এ প্যাটার্নের সকল আওয়ারেন্স খুঁজে বের করবে।

এখানে, আমাদের টেক্সট-এ প্যাটার্নের সকল আওয়ারেন্স খুঁজে বের করতে হবে।

সমস্যা বোঝার জন্য একটি উদাহরণ নিই,

ইনপুট

text = "xyztrwqxyzfg" pattern = "xyz"

আউটপুট

Found at index 0 Found at index 7

এখানে, আমরা রাবিন-কার্প অ্যালগরিদম ব্যবহার করে সমস্যার সমাধান আলোচনা করব। এই অ্যালগরিদমে, আমরা স্ট্রিং-এ প্যাটার্নের আকারের একটি উইন্ডো নেই এবং একে এক করে স্লাইড করি এবং প্যাটার্নের হ্যাশ ভ্যালুর সাথে মিলিয়ে দেখি। এবং যদি হ্যাশ-ভ্যালু মিলে যায়, তবে আমরা চেক করব প্যাটার্নের প্রতিটি ক্যারেক্টার স্ট্রিং-এর সাথে মিলে যাচ্ছে কিনা।

রাবিন-কার্পের জন্য টেক্সট এবং প্যাটার্নের হ্যাশ-ভ্যালু গুরুত্বপূর্ণ। প্যাটার্ন তৈরি করার জন্য আমরা স্ট্রিং-এর প্রতিটি ক্যারেক্টারের সংখ্যাগত মান যোগ করব এবং হ্যাশকে একটি প্রাইম নম্বর দিয়ে ভাগ করে ছোট রাখব।

রাবিন-কার্প অ্যালগরিদম প্যাটার্ন সার্চিংয়ের প্রোগ্রাম

// রাবিন-কার্প অ্যালগরিদম প্যাটার্ন সার্চিংয়ের প্রোগ্রাম

উদাহরণ

#include <stdio.h>
#include <string.h>
#define c 256
void search(char pattern[], char text[]){
    int M = strlen(pattern);
    int N = strlen(text);
    int i, j;
    int hashP = 0;
    int hashT = 0;
    int h = 1;
    for (i = 0; i < M - 1; i++)
        h = (h * c) % 103;
    for (i = 0; i < M; i++) {
        hashP = (c * hashP + pattern[i]) % 103;
        hashT = (c * hashT + text[i]) % 103;
    }
    for (i = 0; i <= N - M; i++) {
        if (hashP == hashT) {
            for (j = 0; j < M; j++) {
                if (text[i + j] != pattern[j])
                    break;
            }
            if (j == M)
                printf("Pattern found at index %d \n", i);
        }
        if (i < N - M) {
            hashT = (c * (hashT - text[i] * h) + text[i + M]) % 103;
            if (hashT < 0)
                hashT = (hashT + 103);
        }
    }
}
int main(){
    char text[] = "xyztrwqxyzfg";
    char pattern[] = "xyz";
    printf("The pattern is found in the text at the following index : \n");
    search(pattern, text);
    return 0;
}

আউটপুট

প্যাটার্নটি টেক্সটে নিচের ইন্ডেক্সগুলোতে পাওয়া গেছে −

Pattern found at index 0
Pattern found at index 7

  1. C প্রোগ্রামিং-এ রেডিক্স সর্ট (Radix Sort)

  2. C প্রোগ্রাম: হেক্সাগোনাল (ষট্কোণাকার) প্যাটার্ন প্রিন্ট করা

  3. C প্রোগ্রাম: সমান্তরাল চতুর্ভুজের পরিধি (Circumference) বের করা

  4. সি++ প্রোগ্রাম: অপ্টিমাল পেজ রিপ্লেসমেন্ট অ্যালগরিদম