PHP实现用于模式搜索的朴素算法(字符串匹配算法)

Posted php中文网最新课程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP实现用于模式搜索的朴素算法(字符串匹配算法)相关的知识,希望对你有一定的参考价值。

源 / php中文网      源 / www.php.cn


给定文本txt [0..n-1]和模式pat [0..m-1],编写一个函数搜索(char pat [],char txt []),在txt中打印所有出现的pat [] []。你可以假设n> m

(查看原文请点击本文末尾左下角:阅读原文)

例子:

输入:  txt[] = "THIS IS A TEST TEXT"

        pat[] = "TEST"

输出: Pattern found at index 10

 

输入:  txt[] =  "AABAACAADAABAABA"

        pat[] =  "AABA"

输出: Pattern found at index 0

        Pattern found at index 9

        Pattern found at index 12

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


朴素模式搜索:

将模式逐个滑过文本并检查是否匹配。如果找到匹配项,则再次滑动1以检查后续匹配项。


PHP代码:

<?php

// 朴素模式搜索算法

   

function search($pat, $txt)

{

    $M = strlen($pat);

    $N = strlen($txt);

   

    for ($i = 0; $i <= $N - $M; $i++)

    {

   

        // 对于当前索引i,请检查模式匹配

        for ($j = 0; $j < $M; $j++)

            if ($txt[$i + $j] != $pat[$j])

                break;

   

        // if pat[0...M-1] = 

        // txt[i, i+1, ...i+M-1]

        if ($j == $M

            echo "Pattern found at index ", $i."\n";

    }

}

   

    $txt = "AABAACAADAABAAABAA";

    $pat = "AABA";

    search($pat, $txt);

输出:

Pattern found at index 0

Pattern found at index 9

Pattern found at index 13


什么是最好的情况?

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

filter_none

brightness_4

txt[] = "AABCCAADDEE";

pat[] = "FAA";

最佳情况下的比较次数为O(n)


什么是最坏的情况?

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

filter_none

brightness_4

txt[] = "AAAAAAAAAAAAAAAAAA";

pat[] = "AAAAA";

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

filter_none

brightness_4

txt[] = "AAAAAAAAAAAAAAAAAB";

pat[] = "AAAAB";

最坏情况下的比较次数是O(m *(n-m + 1))。虽然具有重复字符的字符串不太可能出现在英文文本中,但它们很可能出现在其他应用程序中(例如,在二进制文本中)。


-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!


请点击下方:“阅读原文”,在线查看全部文章内容!

以上是关于PHP实现用于模式搜索的朴素算法(字符串匹配算法)的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第四章串-第二节:串的模式匹配算法(朴素和KMP)

leetcode 28. 实现 strStr()----KMP算法,朴素模式匹配算法----超万字长文详解

朴素模式匹配算法(C语言)

图解字符串的朴素模式匹配算法

数据结构串---BF算法(朴素模式匹配)

字符串的朴素模式匹配算法