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

C言語でのパターン検索のためのラビン-カープアルゴリズムのプログラム


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

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

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

入力

text = “xyztrwqxyzfg” pattern = “xyz”

出力

Found at index 0
Found at index 7

ここでは、ラビン-カープアルゴリズムを使用した問題の解決について説明します。このアルゴリズムでは、文字列内のパターンのサイズのウィンドウを取得し、それを1つずつスライドさせて、パターンのハッシュ値と一致させます。また、ハッシュ値が一致する場合は、パターンの個々の文字が文字列と一致するかどうかを確認します。

Rabin-Karpの場合、テキストとパターンのハッシュ値が重要です。パターンの作成では、すべての文字の数値を追加します

文字列とハッシュの文字は、値を小さくするために素数で割ることによって考慮されます。

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

//パターン検索用のラビン-カープアルゴリズムのプログラム

#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プログラム

    平行四辺形の辺が与えられ、タスクは、与えられた辺で平行四辺形の円周を生成し、結果を表示することです 平行四辺形とは何ですか? 平行四辺形は、-を持つ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を割り当てた後、メモリが