RK算法总结(简易版不考虑溢出)

Rabin-Karp算法是一种字符串搜索算法,通过比较两个字符串的hashcode进行匹配。本文介绍了算法的由来、核心思想、时间复杂度,并提供了简易版的代码实现,适合初学者理解。
摘要由CSDN通过智能技术生成

1.RK算法的由来

RK算法全称Rabin-Karp,是由该算法的2位发明者Rabin和Karp的名字组合而成。

2.RK算法的核心思想

该算法的核心思想就是通过比较2个字符串的hashcode来判断是否包含对方。

3.RK算法的时间复杂度

平均情况为O(n),极端情况下为O(n*m)

4.思路讲解

* a b c d    .... x  y  z
0 1 2 3 4    .... 24 25 26
1.我现在创建了一个27进制的数,*为0,a为1,b为2,让*为0目的是不会出现两个不同字符串值相同,如果你想搜索更多创建更大的进制即可例如将空格' '设置为27 ,这样就是28进制的数,都一样在将其转化为十进制数字 abc该字符串转为的值为 :1*27*27+2*27+3*1  ,这个大家应该都懂


2.rk算法巧妙就巧妙在不需要重新再去计算值,例如 子串:abc  搜索串:aabc
字串的值不等于搜索串的值
我们接下来只需这样
((1*27*27+1*27+2*1)原本的值 -1*27*27)*27 + 3=重新要比较的值
这我相信只要有基础的同学一定可以看懂

有了这些基础后,我们就可以实现我们的代码了

5.代码实现

1.准备工作

int ctonum(char c)//计算单个字符的值,例如字符为a, a-a+1=1,不就是我们要的值吗
{
    return c-'a'+1;
}
int strtonum(char* str,int n)//这个函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值