当前位置:首页 > PHP

php实现kmp

2026-01-30 03:59:18PHP

KMP算法简介

KMP算法是一种高效的字符串匹配算法,由Knuth、Morris和Pratt共同提出。该算法通过预处理模式串生成部分匹配表(Partial Match Table),利用已匹配信息减少不必要的比较次数,时间复杂度为O(n+m)。

PHP实现KMP算法

构建部分匹配表(PMT)

部分匹配表记录模式串前缀与后缀的最长公共长度。对于模式串$pattern,其PMT构建代码如下:

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进行字符串匹配,跳过已确认不匹配的部分:

php实现kmp

function KMPSearch($pattern, $text) {
    $M = strlen($pattern);
    $N = strlen($text);
    $lps = computeLPSArray($pattern);
    $i = $j = 0;

    while ($i < $N) {
        if ($pattern[$j] == $text[$i]) {
            $i++;
            $j++;
        }
        if ($j == $M) {
            echo "Found pattern at index " . ($i - $j) . "\n";
            $j = $lps[$j - 1];
        } elseif ($i < $N && $pattern[$j] != $text[$i]) {
            if ($j != 0) {
                $j = $lps[$j - 1];
            } else {
                $i++;
            }
        }
    }
}

使用示例

$text = "ABABDABACDABABCABAB";
$pattern = "ABABCABAB";
KMPSearch($pattern, $text);
// 输出:Found pattern at index 10

关键点说明

  • PMT构建:通过比较前缀和后缀确定最长公共长度,避免重复比较。
  • 搜索优化:当字符不匹配时,根据PMT跳过已知匹配部分,减少回溯次数。
  • 时间复杂度:预处理阶段O(m),搜索阶段O(n),优于暴力匹配的O(n*m)。

注意事项

  • 模式串和文本需为单字节字符(如ASCII),多字节字符(如UTF-8)需额外处理。
  • 实际应用中可封装为类,增加偏移量参数等扩展功能。

标签: phpkmp
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…