当前位置:首页 > 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 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Rat…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php搜索功能实现的

php搜索功能实现的

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

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先…