Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

パターン検索のためのKMPアルゴリズムのCプログラム


この問題では、テキストとパターンの2つの文字列が与えられます。私たちのタスクは、パターン検索用のKMPアルゴリズムのプログラムを作成することです。これにより、テキスト文字列内のパターンのすべての出現箇所が検出されます。

ここでは、テキスト内のパターンのすべての出現を見つける必要があります。

問題を理解するために例を見てみましょう

入力

text = “xyztrwqxyzfg” pattern = “xyz”

出力

Found at index 0
Found at index 7

ここでは、KMP( Knuth Morris Pratt )を使用した問題の解決策について説明します。 )パターン検索アルゴリズム。テキストの照合に使用されるパターンの前処理文字列を使用します。また、一致する文字の後にパターンと一致しない文字列の文字が続く場合に、パターンの一致を処理または検索するのに役立ちます。

パターンワンドを前処理して、パターンから適切なプレフィックスとサフィックスを含む配列を作成します。これは、不一致パターンの検索に役立ちます。

パターン検索のためのKMPアルゴリズムのプログラム

//パターン検索用のKMPアルゴリズムのCプログラム

#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

  1. 平行四辺形の円周のためのCプログラム

    平行四辺形の辺が与えられ、タスクは、与えられた辺で平行四辺形の円周を生成し、結果を表示することです 平行四辺形とは何ですか? 平行四辺形は、-を持つ2次式の一種です。 反対側が平行 反対の角度は等しい ポリゴンの対角線は互いに二等分します 下の図に示されている「a」と「b」は、平行四辺形の辺であり、平行四辺形が図に示されています。 平行四辺形の周囲長/円周は次のように定義されます − 平行四辺形の円周=2(a + b) =2 * a + 2 * b 例 Input-: a = 23 and b = 12 Output-: Circumference of a paral

  2. 最適なページ置換アルゴリズムのためのC++プログラム

    与えられたページ番号とページサイズ。タスクは、最適なページ置換アルゴリズムを使用してメモリブロックをページに割り当てるときのように、ヒットとミスの数を見つけることです。 最適なページ置換アルゴリズムとは何ですか? 最適なページ置換アルゴリズムは、ページ置換アルゴリズムです。ページ置換アルゴリズムは、どのメモリページを置換するかを決定するアルゴリズムです。最適なページ置換では、実際には実装できませんが、近い将来に参照されないページを置換しますが、これは最適であり、ミスが最小限であり、最適です。 例を使って図式的に説明して理解しましょう。 ここで、1、2、3を割り当てた後、メモリが