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

素朴なパターン検索


ナイーブパターン検索は、他のパターン検索アルゴリズムの中で最も簡単な方法です。パターンに対するメイン文字列のすべての文字をチェックします。このアルゴリズムは、小さいテキストに役立ちます。前処理フェーズは必要ありません。文字列を1回チェックすることで、部分文字列を見つけることができます。また、操作を実行するための余分なスペースを占有しません。

ナイーブパターン検索法の時間計算量はO(m * n)です。 mはパターンのサイズ、nはメインストリングのサイズです。

入力と出力

Input:
Main String: “ABAAABCDBBABCDDEBCABC”, pattern: “ABC”
Output:
Pattern found at position: 4
Pattern found at position: 10
Pattern found at position: 18

アルゴリズム

naivePatternSearch(pattern, text)

入力- テキストとパターン

出力- テキストにパターンが存在する場所

Begin
   patLen := pattern Size
   strLen := string size

   for i := 0 to (strLen - patLen), do
      for j := 0 to patLen, do
         if text[i+j] ≠ pattern[j], then
            break the loop
      done

      if j == patLen, then
         display the position i, as there pattern found
   done
End
のパターンが見つかったので、位置iを表示します。

#include<iostream>
using namespace std;

void naivePatternSearch(string mainString, string pattern, int array[], int *index) {
   int patLen = pattern.size();
   int strLen = mainString.size();

   for(int i = 0; i<=(strLen - patLen); i++) {
      int j;
      for(j = 0; j<patLen; j++) {      //check for each character of pattern if it is matched
         if(mainString[i+j] != pattern[j])
            break;
      }

      if(j == patLen) {     //the pattern is found
         (*index)++;
         array[(*index)] = i;
      }
   }
}

int main() {
   string mainString = "ABAAABCDBBABCDDEBCABC";
   string pattern = "ABC";
   int locArray[mainString.size()];
   int index = -1;
   naivePatternSearch(mainString, pattern, locArray, &index);

   for(int i = 0; i <= index; i++) {
      cout << "Pattern found at position: " << locArray[i]<<endl;
   }
}

出力

Pattern found at position: 4
Pattern found at position: 10
Pattern found at position: 18

  1. HTMLパターン属性

    HTMLパターン属性は、HTML要素の値がHTMLドキュメントで一致する正規表現を定義します。 構文 以下は構文です- <input pattern=”regular expression”> HTMLパターン属性の例を見てみましょう- 例 <!DOCTYPE html> <html> <style>    body {       color: #000;       height: 100vh;      

  2. Cでハートパターンを印刷する

    このプログラムでは、ハート型のパターンをCで印刷する方法を説明します。ハート型のパターンは次のようになります このパターンを分析すると、このパターンの別のセクションを見つけることができます。心底は逆三角形です。上部には2つの異なるピークがあります。これらの2つのピークの間にはギャップがあります。このパターンを作成するには、これらの部分をコードに管理して、このようなパターンを印刷する必要があります。 例 #include<stdio.h> int main() {    int a, b, line = 12;    for (a =