用于模式搜索的朴素算法的C程序
C中的模式匹配-我们必须找出另一个字符串中是否存在一个字符串,例如,字符串“algorithm”出现在字符串“naivealgorithm”中。如果找到,则其位置(即位置为我们倾向于创建一个函数,该函数接收2个字符数组,如果匹配发生,则返回位置,否则返回-1。
Input: txt = "HERE IS A NICE CAP" pattern = "NICE" Output: Pattern found at index 10 Input: txt = "XYZXACAADXYZXYZX" pattern = "XYZX" Output: Pattern found at index 0 Pattern found at index 9 Pattern found at index 12
我们正在通过朴素模式搜索解决此问题。该算法对于较小的文本很有用。天真是一种简单而无效率的方法,它可以查看一个字符串在另一个字符串中的任何位置,一个一个地检查它可能位于的每个位置,以检查它是否在那里。
天真的算法的时间复杂度是O(mn),其中m是要搜索的模式的大小,n是容器字符串的大小。
模式搜索是计算机科学中一个非常关键的问题。每当我们在记事本/单词文件,浏览器或数据库或某些信息中寻找字符串时,就会使用模式搜索算法来显示搜索结果。
算法
naive_algorithm(图案,文字)
输入 -文字和图案
输出 -文本中存在模式的位置
Start
pat_len := pattern Size
str_len := string size
for i := 0 to (str_len - pat_len), do
for j := 0 to pat_len, do
if text[i+j] ≠ pattern[j], then
break
if j == patLen, then
display the position i, as there pattern found
End示例
#include <stdio.h>
#include <string.h>
int main (){
char txt[] = "nhoooisthebestplatformforprogrammers";
char pat[] = "a";
int M = strlen (pat);
int N = strlen (txt);
for (int i = 0; i <= N - M; i++){
int j;
for (j = 0; j < M; j++)
if (txt[i + j] != pat[j])
break;
if (j == M)
printf ("Pattern matches at index %d \n", i);
}
return 0;
}输出结果
Pattern matches at 6 Pattern matches at 25 Pattern matches at 39