Rabin karp字符串匹配算法的复杂性

时间:2014-03-13 17:47:13

标签: string algorithm match

如何在rabin算法中采用模数有助于降低原始horners规则字符串匹配的复杂性。任何人都请解释

1 个答案:

答案 0 :(得分:1)

我想通过Horners统治你的意思是将字符串视为某个基数中的数字(“abcd”='a'* p ^ 3 +'b'* p ^ 2 +'c'* p ^ 1 +'d '* p ^ 0)并将字符串作为数字进行比较,并且通过Rabin算法,你的意思是基本相同的东西,但模数为其他数字。

事情是使用Horners规则你只能比较短字符串 - 否则你会溢出(你可以使用大整数来避免它,但这就是你在复杂性上失去的地方。对应于长度为n的字符串的数字将有O(n)个数字,因此不会在O(1)中进行算术运算。

在Rabin-Karp算法中,对应于我们字符串的数字将保持较小,因为我们将它们模数为其他数字。它可能会导致碰撞,但如果我们幸运的话,碰撞很少见。