Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C สำหรับอัลกอริทึม KMP สำหรับการค้นหารูปแบบ


ในปัญหานี้ เราได้รับข้อความและรูปแบบสองสตริง งานของเราคือสร้างโปรแกรมสำหรับอัลกอริทึม KMP สำหรับการค้นหารูปแบบ โดยจะค้นหารูปแบบที่เกิดขึ้นทั้งหมดในสตริงข้อความ

ที่นี่ เราต้องหารูปแบบที่เกิดขึ้นทั้งหมดในข้อความ

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

text = “xyztrwqxyzfg” pattern = “xyz”

ผลลัพธ์

Found at index 0
Found at index 7

เราจะพูดถึงวิธีแก้ปัญหาโดยใช้ KMP (Knuth Morris Pratt ) อัลกอริธึมการค้นหารูปแบบ จะใช้สตริงการประมวลผลล่วงหน้าของรูปแบบ ซึ่งจะใช้สำหรับการจับคู่ในข้อความ และช่วยในการประมวลผลหรือค้นหารูปแบบที่ตรงกันในกรณีที่อักขระที่ตรงกันตามด้วยอักขระของสตริงที่ไม่ตรงกับรูปแบบ

เราจะประมวลผลแพทเทิร์น wand ล่วงหน้าเพื่อสร้างอาร์เรย์ที่มีคำนำหน้าและส่วนต่อท้ายที่เหมาะสมจากรูปแบบที่จะช่วยในการค้นหารูปแบบที่ไม่ตรงกัน

โปรแกรมสำหรับอัลกอริทึม KMP สำหรับการค้นหารูปแบบ

// โปรแกรม C สำหรับอัลกอริทึม KMP สำหรับการค้นหารูปแบบ

ตัวอย่าง

#include<iostream>
#include<string.h>
using namespace std;
void prefixSuffixArray(char* pat, int M, int* pps) {
   int length = 0;
   pps[0] = 0;
   int i = 1;
   while (i < M) {
      if (pat[i] == pat[length]) {
         length++;
         pps[i] = length;
         i++;
      } else {
         if (length != 0)
         length = pps[length - 1];
         else {
            pps[i] = 0;
            i++;
         }
      }
   }
}
void KMPAlgorithm(char* text, char* pattern) {
   int M = strlen(pattern);
   int N = strlen(text);
   int pps[M];
   prefixSuffixArray(pattern, M, pps);
   int i = 0;
   int j = 0;
   while (i < N) {
      if (pattern[j] == text[i]) {
         j++;
         i++;
      }
      if (j == M) {
         printf("Found pattern at index %d\n", i - j);
         j = pps[j - 1];
      }
      else if (i < N && pattern[j] != text[i]) {
         if (j != 0)
         j = pps[j - 1];
         else
         i = i + 1;
      }
   }
}
int main() {
   char text[] = "xyztrwqxyzfg";
   char pattern[] = "xyz";
   printf("The pattern is found in the text at the following index : \n");
   KMPAlgorithm(text, pattern);
   return 0;
}

ผลลัพธ์

พบรูปแบบในข้อความที่ดัชนีต่อไปนี้ -

Found pattern at index 0
Found pattern at index 7