KMP 算法 - 使用 Python 实现 KMP 算法2024 年 8 月 29 日 | 阅读 3 分钟 在本教程中,我们将学习使用 Python 编程语言的 KMP 算法。该算法主要用于以 O(n) 的复杂度搜索模式或子字符串。 为了测试开发者的能力,技术面试中可能会问到该算法。 KMP 算法KMP 代表 Knuth-Morris-Prat,它是一种模式搜索算法。它用于解决字符串匹配问题。这个问题在信息安全、模式识别、文档匹配、生物信息学等领域有广泛的应用。它由 Donald-Knuth 和 Vaughan Pratt 于 1970 年通过深入分析朴素方法而开发,提出了线性时间解决方案。 部分匹配表部分匹配表是 KMP 的关键。要理解 KMP,我们需要掌握部分匹配表的概念。在本节中,我们将用简单的语言解释部分匹配表。 让我们看下面的例子 - 如果我们有一个八个字符的模式字符串,部分匹配表将有八个单元格。如果我们使用表中的第七个单元格,这意味着我们只关心模式中的前七个字符。第八个字符(“a”)无关紧要。第六个单元格也会发生同样的情况。 现在,为了谈论其含义,我们需要了解真前缀和真后缀。让我们看看这些术语是什么。 真前缀 - 字符串中的所有字符,末尾去掉一个或多个字符。“T”、“Ti”、“Tig”、“Tige” 和 “Tiger” 都是 “Tiger” 的真前缀。 真后缀:字符串中的所有字符,开头去掉一个或多个字符。“arry”、“rry”、“rr”、“ry”和“y”都是“Harry”的真后缀。 子(模式)中最长真前缀与同一(子)模式中的真后缀匹配的长度。 让我们用一个例子来理解它。假设我们正在查看第三个单元格,这意味着我们只关心前三个字符(“aba”)。在“aba”中,有两个真前缀(“a”和“ab”)和两个真后缀(“a”和“ba”)。正如我们所见,真前缀“ab”与两个真后缀中的任何一个都不匹配。然而,真前缀“a”与真后缀“a”匹配。因此,在这种情况下,匹配的真前缀的最长长度是 1。 现在让我们检查第五个单元格,它涉及到“ababa”,它有真前缀('a'、'ab'、'aba' 和 'abab')和四个真后缀('a'、'ba'、'aba' 和 'baba')。现在我们得到了真前缀和真后缀。由于 aba 比 a 长,所以它胜出,第五个单元格的值为 3。 下一个主题Python 3.10 中的新功能 |
机械技术是一个先进的工作领域,机器可能会与人混淆。先进的机器人技术现在是,并且在相当长一段时间内,将是信息技术最非凡的领域之一。机器人领域被认为是一个将...
阅读 8 分钟
Tkinter 是 Python 编程语言的标准图形用户界面 (GUI) 库。当与 Tkinter 库结合使用时,Python 提供了一种快速可靠的方法来构建基于 GUI 的应用程序。在本教程中,我们将借助 ... 构建一个 GUI 成绩单。
56 分钟阅读
您可以使用 Python 的 not 运算符反转任何布尔表达式或对象的真值。这个 Python 运算符可以应用于 if-elif 语句以及 for 或 while 循环等布尔条件。它也可以在非布尔环境中运行,使您能够反转变量的真值...
阅读 8 分钟
简介 在 Python 中,列表是一种可以存储异构元素的线性数据结构。它不需要定义,并且可以根据需要收缩和扩展。另一方面,NumPy 数组是一种可以存储同构元素的数据结构。它是...
阅读 3 分钟
我们可以利用统计包的强大功能来计算任何与统计相关的任务。其中一个函数是 variance()。我们可以借助此方法计算数据样本的方差(样本是总体数据的一小部分)。在计算时可以使用 variance() 函数...
5 分钟阅读
在本教程中,我们将讨论 Python 中 time 模块的 clock() 函数。我们还将看到 Python time clock() 方法的语法以及一些示例以便更好地理解。理解 Python 中的 time clock() 方法 clock() 方法是一个函数...
阅读 3 分钟
Python取证与虚拟化 | 哈希函数 在本教程中,我们将学习使用Python的取证科学、基本的Python取证应用程序、哈希函数、破解加密、可视化、命名约定、Dshell和Scapy、网络取证及其详细解释。简介 收集和保存证据对于网络安全至关重要。
14 分钟阅读
是 Dai 等人于 2019 年推出的一种最先进的神经网络架构。它是 Vaswani 等人于 2017 年推出的原始 Transformer 模型的扩展。通过解决原始 Transformer 模型中的限制,改进了原始 Transformer 模型,包括...
阅读 6 分钟
像 Python 这样的编程语言提供了不同的选项来开发 GUI,即图形用户界面。在所有 GUI 方法中,Tkinter 是最常用的。在接下来的教程中,我们将学习创建简单的复合利息 GUI 计算器的方法……
18 分钟阅读
在 Python 中,head() 函数通常用于从列表或 DataFrame 中检索前 n 个项目。列表的 head() 函数 在 Python 中,您可以将 head() 函数与列表一起使用以检索列表中的前 n 个项目。head() 函数不是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India