找到 12 篇文章 关于模式搜索算法

模式搜索算法简介

Samual Sam
更新于 2019-07-30 22:30:23

3K+ 浏览量

模式搜索算法用于从另一个较大的字符串中查找模式或子字符串。存在不同的算法。设计此类算法的主要目标是降低时间复杂度。对于较长的文本,传统方法可能需要大量时间才能完成模式搜索任务。在这里,我们将看到不同的算法以获得更好的模式匹配性能。在本节中,我们将介绍以下内容:Aho-Corasick 算法、字谜模式搜索、坏字符启发式、Boyer Moore 算法、有限自动机的有效构造、Kasai 算法、Knuth-Morris-Pratt 算法、Manacher 算法、朴素模式搜索、Rabin-Karp 算法…… 阅读更多

Z 算法

Sharon Christine
更新于 2020-06-16 08:13:31

405 浏览量

该算法命名为 Z 算法,因为在此算法中,我们需要创建一个 Z 数组。Z 数组的大小与文本大小相同。此数组用于存储从主字符串的当前字符开始的最长可能子字符串的长度。首先,模式和主文本与文本和模式中不存在的特殊符号连接。如果 P 是模式,T 是主文本,则连接后,它将是 P$T(假设 $ 不存在于 P 中)…… 阅读更多

所有后缀的 Trie 树

karthikeya Boyini
更新于 2020-06-15 19:10:41

427 浏览量

从文本中,我们可以生成所有后缀以构建树结构。我们知道文本中出现的每个模式都必须是文本中某个可能后缀的前缀。通过构建所有后缀的 Trie 树,我们可以在线性时间内找到任何子字符串。每个后缀都以字符串终止符号结尾。如果从每个节点存在任何路径,则它会向前移动,否则返回该模式未找到。对于此算法,时间复杂度为 O(m+k),其中 m 是字符串的长度,k 是模式在……中的频率 阅读更多

后缀数组

Sharon Christine
更新于 2020-06-15 19:15:53

884 浏览量

从给定的字符串中,我们可以获得所有可能的后缀。按字典序对后缀排序后,我们可以得到后缀数组。后缀数组也可以使用后缀树形成。通过使用后缀树的 DFS 遍历,我们可以得到后缀数组。后缀数组有助于在线性时间内查找后缀。我们还可以使用类似二分查找的过程,使用后缀数组查找子字符串。时间复杂度为 O(m log n)输入和输出输入:主字符串:“BANANA”,模式:“NAN”输出:模式在位置 2 处找到算法fillSuffixArray (text, suffArray)输入:主字符串输出:后缀数组开始 n := text Length ... 阅读更多

Rabin-Karp 算法

karthikeya Boyini
更新于 2020-06-15 19:24:52

2K+ 浏览量

Rabin-Karp 是另一种模式搜索算法,用于以更有效的方式查找模式。它还通过逐个移动窗口来检查模式,但不是在所有情况下都检查所有字符,而是查找哈希值。当哈希值匹配时,它才会尝试检查每个字符。此过程使算法更加高效。时间复杂度为 O(m+n),但对于最坏情况,它为 O(mn)。输入和输出输入:主字符串:“ABAAABCDBBABCDDEBCABC”,模式“ABC”输出:模式在位置 4 处找到 模式在位置 10 处找到 模式在位置 18 处找到算法rabinKarpSearch(text, pattern, prime)输入 - 主…… 阅读更多

朴素模式搜索

Sharon Christine
更新于 2020-06-15 18:34:58

6K+ 浏览量

朴素模式搜索是在其他模式搜索算法中最简单的方法。它检查主字符串的所有字符与模式。此算法适用于较小的文本。它不需要任何预处理阶段。我们可以通过一次检查字符串来找到子字符串。它也不占用额外的空间来执行操作。朴素模式搜索方法的时间复杂度为 O(m*n)。m 是模式的大小,n 是主字符串的大小。输入和输出输入:主字符串:“ABAAABCDBBABCDDEBCABC”,模式:“ABC”输出:模式在位置 4 处找到 模式在…… 阅读更多

Manacher 算法

karthikeya Boyini
更新于 2020-06-15 18:40:57

718 浏览量

要从字符串中找到最长的回文子字符串,我们可以使用 Manacher 算法。通过选择每个字符,我们将尝试使用左右指针查找是否存在任何回文。还有一个数组用于存储信息,从该信息中我们可以很容易地找到回文有多长。对于每个字符,数组将存储信息。遍历整个字符串后,我们可以从创建的数组中找到最长的回文子序列。该算法的时间复杂度为 O(n)。输入和输出输入:字符串:“levelup”输出:最长回文是:level算法longestPalindrome(text)输入 - 要查找最长回文的文本输出 - …… 阅读更多

Kasai 算法

karthikeya Boyini
更新于 2020-06-15 19:00:01

689 浏览量

Kasai 算法用于从后缀数组中获取最长公共前缀 (LCP) 数组。首先找到后缀数组。之后,Kasai 算法获取后缀数组列表以查找 LCP。对于 LCP 数组,它需要 O(m log n),其中 m 是模式长度,n 是文本的长度。Kasai 算法需要 O(n) 来在主字符串中搜索模式。输入和输出输入:主字符串:“banana”输出:后缀数组:5 3 1 0 4 2 公共前缀数组:1 3 0 0 2 0算法buildSuffixArray(text)输入:主字符串输出:构建的后缀数组…… 阅读更多

有限自动机的有效构造

Sharon Christine
更新于 2020-06-15 17:31:15

1K+ 浏览量

通过构建有限自动机,我们可以简单地执行文本中的模式搜索。首先,我们必须填充一个二维数组来创建有限自动机的转换表。一旦创建了表格,搜索过程就非常简单。从自动机的初始状态开始,当我们到达最终状态时,就意味着在字符串中找到了模式。对于有限自动机的构建,时间复杂度为 O(M*K),其中 M 是模式长度,K 是不同字符的数量。主要模式搜索的复杂度为 O(n)。输入和输出输入:主字符串:... 阅读更多

坏字符启发式

Sharon Christine
更新于 2020-06-15 17:45:08

1K+ 浏览量

坏字符启发式方法是 Boyer Moore 算法的一种方法。另一种方法是好后缀启发式。在这种方法中,我们将尝试找到一个坏字符,即主字符串中与模式不匹配的字符。当发生不匹配时,我们将移动整个模式,直到不匹配变成匹配,否则,模式将移动到坏字符之后。这里,最佳情况下的时间复杂度为 O(m/n),最坏情况下的时间复杂度为 O(mn),其中 n 是文本长度,m 是模式长度。输入和... 阅读更多

广告