📜  用于模式搜索的朴素算法的PHP程序(1)

📅  最后修改于: 2023-12-03 15:40:54.755000             🧑  作者: Mango

用于模式搜索的朴素算法的 PHP 程序

算法概述

朴素模式搜索算法是一种简单且直观的字符串匹配算法,它是通过从主字符串中扫描子字符串来匹配它们的。算法的实现并不复杂,但是在某些情况下,它的执行效率可能会非常低。

算法的基本思想是从主字符串中的第一个字符开始,逐个字符地与子字符串的第一个字符进行比较,如果主字符串中的当前字符匹配子字符串中的当前字符,则继续向下比较;否则,主字符串向后移动一位,并从该位置重新开始匹配。

朴素模式搜索算法的时间复杂度为 O(mn),其中 m 是主字符串的长度,n 是子字符串的长度。如果主字符串的长度远远大于子字符串的长度,则算法效率非常低。

代码实现
function naiveSearch($txt, $pat) {
    $M = strlen($pat);  // 子字符串长度
    $N = strlen($txt);  // 主字符串长度

    // 遍历主字符串
    for ($i = 0; $i <= $N - $M; $i++) { 
        // 对于每一个主字符串的位置,在该位置匹配子字符串
        for ($j = 0; $j < $M; $j++) {
            if ($txt[$i+$j] != $pat[$j]) {
                // 如果该位置不匹配,跳出循环,从主字符串的下一个位置重新开始匹配
                break;
            }
        }
        // 如果循环完子字符串中的所有字符都匹配,则表示找到了对应的位置
        if ($j == $M) {
            return $i;
        }
    }
    // 如果主字符串中没有找到子字符串,则返回 -1
    return -1;
}

该算法的实现方法是获取主字符串和子字符串的长度,然后遍历主字符串中的每个字符,以当前位置为起点匹配子字符串中的所有字符。如果在任何一个位置上不匹配,则跳出循环,从主字符串的下一个位置重新开始匹配。如果匹配成功,则返回匹配成功的位置,否则返回 -1。

总结

朴素模式搜索算法是一种简单而直接的算法,适用于小规模数据的字符串匹配。该算法的时间复杂度为 O(mn),当主字符串远远大于子字符串时,效率将非常低下。因此,在实际应用中,应该优先考虑其他更高效的字符串匹配算法。