当前位置:首页 > PHP

php实现kmp

2026-02-15 01:50:43PHP

PHP实现KMP算法

KMP算法是一种高效的字符串匹配算法,通过预处理模式字符串(pattern)生成部分匹配表(Partial Match Table),避免不必要的回溯,提升匹配效率。以下是PHP实现KMP算法的详细步骤:

php实现kmp

生成部分匹配表(PMT)

部分匹配表记录了模式字符串中每个位置的最长公共前后缀长度。以下是生成PMT的PHP函数:

php实现kmp

function computeLPSArray($pattern) {
    $len = 0;
    $lps = [0];
    $i = 1;
    $m = strlen($pattern);

    while ($i < $m) {
        if ($pattern[$i] == $pattern[$len]) {
            $len++;
            $lps[$i] = $len;
            $i++;
        } else {
            if ($len != 0) {
                $len = $lps[$len - 1];
            } else {
                $lps[$i] = 0;
                $i++;
            }
        }
    }
    return $lps;
}

KMP搜索主函数

利用PMT在文本中搜索模式字符串的位置:

function KMPSearch($pattern, $text) {
    $m = strlen($pattern);
    $n = strlen($text);
    $lps = computeLPSArray($pattern);
    $i = $j = 0;
    $result = [];

    while ($i < $n) {
        if ($pattern[$j] == $text[$i]) {
            $i++;
            $j++;
        }
        if ($j == $m) {
            array_push($result, $i - $j);
            $j = $lps[$j - 1];
        } elseif ($i < $n && $pattern[$j] != $text[$i]) {
            if ($j != 0) {
                $j = $lps[$j - 1];
            } else {
                $i++;
            }
        }
    }
    return $result;
}

使用示例

调用KMP算法进行字符串匹配:

$text = "ABABDABACDABABCABAB";
$pattern = "ABABCABAB";
$matches = KMPSearch($pattern, $text);

if (!empty($matches)) {
    echo "Pattern found at positions: " . implode(", ", $matches);
} else {
    echo "Pattern not found in the text.";
}

算法复杂度分析

  • 时间复杂度:O(n + m),其中n是文本长度,m是模式长度。
  • 空间复杂度:O(m),用于存储部分匹配表。

优化建议

  • 对于多次重复使用的模式字符串,可缓存部分匹配表避免重复计算。
  • 处理大规模文本时,考虑分批读取文本以减少内存占用。

标签: phpkmp
分享给朋友:

相关文章

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php 实现路由

php 实现路由

PHP 实现路由的方法 在 PHP 中实现路由功能可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 PHP 实现简单路由 通过解析 URL 并匹配对应的处理逻辑,可以实现基本的路由功能。以…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…