python 中的 rabin-karp 算法
我们将介绍 python 中的 rabin-karp 算法,并讨论如何在 python 程序中使用它。
python 中的 rabin-karp 算法
rabin-karp 算法从给定的输入或值中查找特定的数字、字母或模式。 当您需要从数据中提取见解时,机器学习算法通常是数据科学中的首选ag捕鱼王app官网的解决方案,但并非所有算法都是一样的。
有些人比其他人更善于找到正确的见解,有些人比其他人更擅长避免误报。 rabin-karp 算法是寻找正确见解的最强大的机器学习算法之一。
rabin-karp 算法用于查找一组文本和可能的密码之间的最佳匹配。 它主要用在软件中,帮助用户在忘记密码时找到密码。
它最初是为查找文本中的电子邮件地址而开发的,从那时起,它已被用于许多其他应用程序,例如查找电话号码、从 pdf 中提取文本等等。 它是由理查德·m·拉宾和亚伯拉罕·s·卡普设计的。
python 中 rabin-karp 算法的复杂性
rabin-karp 算法是一种有效查找数组中最少数量的不同值的方法。 事实证明,它比二分搜索、二次探测和顺序搜索等其他常见的最小查找算法渐近更快。
然而,rabin-karp 算法通常比其理论最坏情况复杂度 (o(n)) 复杂得多,其中 n 是搜索数组中不同值的数量。 我们之所以如此复杂,是因为 rabin-karp 算法必须重复访问搜索数组中的每个值,直到找到所需的值。
用 python 实现 rabin-karp 算法
现在,让我们了解如何在 python 示例中实现 rabin-karp 算法。
我们将给出一个字符模式,然后检查给定模式对现有元素的可能性。 如果找到该模式,则将其作为输出。
首先,我们将分配作为输入添加的字符数的值。 在我们的例子中,我们将分配 15,如下所示。
# python
numofchar = 15
我们将定义一个函数 searchpattern ,它将接受三个参数。 第一个参数是我们想要使用 rabin-karp 算法找到的模式。
第二个参数是我们要在其中寻找模式的文本。 最后一个参数是素数。
我们将模式和文本的长度分配给变量,以便稍后使用该长度。 我们还将设置模式和文本的哈希值。
我们将在 for 循环中定义变量 a 和 b。
# python
def searchpattern(pattern, text, primenum):
patlen = len(pattern)
txtlen = len(text)
a = 0
b = 0
p = 0 # hash value for pattern
t = 0 # hash value for txt
h = 1
从rabin-karp算法中,我们首先使用公式 pow(numofchar, patlen-1)% primenum
求出h的值,如下所示。
# python
for a in xrange(patlen-1):
h = (h * numofchar)% primenum
现在,我们将找到该模式的哈希值和文本的第一个窗口,如下所示。
# python
for a in xrange(patlen):
p = (numofchar * p ord(pattern[a]))% primenum
t = (numofchar * t ord(text[a]))% primenum
我们将创建另一个 for 循环,将图案逐个滑动到文本上。 在这个 for 循环中,我们将检查当前文本和模式窗口的哈希值。
如果哈希值匹配,我们将一一检查字符,如下所示。
# python
for a in range(txtlen-patlen 1):
if p == t:
for b in range(patlen):
if text[a b] != pattern[b]:
break
b = 1
if b == patlen:
print("pattern found at index " str(a))
if a < txtlen-patlen:
t = (numofchar*(t-ord(text[a])*h) ord(text[a patlen]))% primenum
if t < 0:
t = t primenum
现在,让我们为参数赋值并调用该函数来检查它是如何工作的,如下所示。
# python
text = "abbaabcdeaabbdcaabb"
pattern = "abb"
primenum = 101
searchpattern(pattern, text, primenum)
输出:
正如您所看到的,我们的模式是在三个不同的位置发现的。 使用 rabin-karp 算法,我们可以在给定文本的多个位置找到模式。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
pandas dataframe dataframe.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:python
-
dataframe.shift() 函数是将 dataframe 的索引按指定的周期数进行移位。
python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:python
-
python pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:python
-
pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 dataframe 中。
pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:python
-
本教程介绍了如何在 pandas 中使用 dataframe.merge()方法合并两个 dataframes。
pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:python
-
本教程介绍了如何使用 python 中的 loc 和 iloc 从 pandas dataframe 中过滤数据。
在 python 中将 pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:python
-
了解如何在 python 中将 pandas 系列日期时间转换为字符串