卡普-拉宾算法
Karp-Rabin algorithm
下图来自:6.006-Introduction to algorithms,
在学习 MIT OCW 提供的课程 6.006-Introduction to algorithms 时,我遇到了 Rabin-Karp 算法。
谁能帮我理解为什么需要第一个 rs()==rt()?如果使用了,那我们是不是也应该先暴力检查字符串是否相等,然后再继续?为什么我们在从 t[0] 进行散列然后尝试查找其他字符串匹配时不考虑字符串的相等性?
图中,rs()是哈希值,rs.skip[arg]是删除字符串的第一个字符,假定它是'arg'
Can anyone help me understand as to why the first rs()==rt()
required?
我假设你指的是范围循环之前的那个。如果字符串长度相同,则范围循环不会 运行 (空范围)。必须进行检查才能涵盖这种情况。
If it’s used, then shouldn’t we also check first by brute force whether the strings are equal and then move ahead?
不确定你的意思。找到匹配的哈希后,发布的代码留空(...
)。别忘了,在这一点上,我们必须比较字符串以确认我们确实找到了匹配项。并且,是否继续搜索直到结束取决于(未显示)实现。
Why is it that we are not considering equality of strings when hashing is done from t[0] and then trying to find other string matches?
我真的不明白这部分。请注意,前两个循环用于填充输入字符串的滚动哈希。然后检查我们此时是否有匹配项,然后循环更新滚动哈希成对,然后比较它们。从头到尾检查整个 t
。
下图来自:6.006-Introduction to algorithms,
在学习 MIT OCW 提供的课程 6.006-Introduction to algorithms 时,我遇到了 Rabin-Karp 算法。
谁能帮我理解为什么需要第一个 rs()==rt()?如果使用了,那我们是不是也应该先暴力检查字符串是否相等,然后再继续?为什么我们在从 t[0] 进行散列然后尝试查找其他字符串匹配时不考虑字符串的相等性?
图中,rs()是哈希值,rs.skip[arg]是删除字符串的第一个字符,假定它是'arg'
Can anyone help me understand as to why the first
rs()==rt()
required?
我假设你指的是范围循环之前的那个。如果字符串长度相同,则范围循环不会 运行 (空范围)。必须进行检查才能涵盖这种情况。
If it’s used, then shouldn’t we also check first by brute force whether the strings are equal and then move ahead?
不确定你的意思。找到匹配的哈希后,发布的代码留空(...
)。别忘了,在这一点上,我们必须比较字符串以确认我们确实找到了匹配项。并且,是否继续搜索直到结束取决于(未显示)实现。
Why is it that we are not considering equality of strings when hashing is done from t[0] and then trying to find other string matches?
我真的不明白这部分。请注意,前两个循环用于填充输入字符串的滚动哈希。然后检查我们此时是否有匹配项,然后循环更新滚动哈希成对,然后比较它们。从头到尾检查整个 t
。