PHP如何实现用于模式搜索的朴素算法

  介绍

小编给大家分享一下PHP如何实现用于模式搜索的朴素算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

给定文本<代码> txt [0 . .n - 1]> 帕特[0 . .m - 1]> (char [], char txt[])> 帕特[][]> n>m

例子:

输入:txt[]=?这是一个测试TEXT"   帕特[]=癟EST"   输出:模式发现指数10      输入:txt []=癆ABAACAADAABAABA"   帕特[]=癆ABA"   输出:模式发现索引0   模式发现指数9   模式发现指数12

 PHP如何实现用于模式搜索的朴素算法

模式(模式)搜索是计算机科学中的一个重要问题。当我们在记事本,字文件,浏览器或数据库中搜索字符串时,使用模式搜索算法来显示搜索结果。

<强>朴素模式搜索:
将模式逐个滑过文本并检查是否匹配。如果找到匹配项,则再次滑动1以检查后续匹配项。

PHP代码:

& lt; PHP ?//朴素模式搜索算法      函数搜索(pat, txt美元)   {   美元$ M=strlen (pat);   $ N=strlen ($ txt);      ($ i=0;我& lt;美元=N - M美元;美元我+ +)   {//对于当前索引我,请检查模式匹配   ($ j=0;$ j & lt;$ M;$ j + +)   如果($ txt (i + j]美元!=$帕特[j]美元)   打破;//如果帕特[0…m - 1)=//txt (i + 1,我……我+ m - 1]   如果j==$(美元)   发现指数“回声“模式,干净自己的$ i \ n"   }   }      $ txt=癆ABAACAADAABAAABAA";   $ pat=癆ABA";   搜索(pat, txt美元);

输出:

模式发现索引0   模式发现指数9   模式发现指数13

<强>什么是最好的情况?

当模式模式的第一个字符根本不存在于文本中时,会出现最佳情况。

filter_none   brightness_4   txt []=癆ABCCAADDEE";   帕特[]=癋AA"

最佳情况下的比较次数为<代码> O (n)

<强>什么是最坏的情况?

1)当文本和图案的所有字符相同时。

filter_none   brightness_4   txt []=癆AAAAAAAAAAAAAAAAA";   帕特[]=癆AAAA"

2)当最后一个字符不同时,也会出现最坏情况。

filter_none   brightness_4   txt []=癆AAAAAAAAAAAAAAAAB";   帕特[]=癆AAAB"

最坏情况下的比较次数是<代码> O (m * (n - m + 1))>

PHP如何实现用于模式搜索的朴素算法