付之东流

程序是衣,算法为魂

原创 Rabin Karp的字符串匹配算法--算法导论示例收藏

新一篇: KMP字符串匹配算法--算法导论示例 | 旧一篇: 朴素字符串匹配算法(Naive String-Matching)--算法导论示例

 

#include "stdio.h"
#include 
"string.h"
#include 
"math.h"

void RabinKarpMatcher(char *text,char *sub,int d,int q)
{
    
int n=strlen(text);
    
int m=strlen(sub);
    
int h=(int)pow((float)d,(float)m-1)%q;

    
int p=0;
    
int ts=0;
    
bool find=true;

    
//预处理
    for(int i=0;i<m;i++)
    
{
        p
=(p*d+sub[i])%q;
        ts
=(ts*d+text[i])%q;
    }


    
//匹配
    for(int s=0;s<=n-m;s++)
    
{
        
if(ts==p)
        
{
            find
=true;
            
for(int j=0;j<m;j++)
                
if(text[s+j]!=sub[j])
                
{
                    find
=false;
                    
break;
                }


                
if(find)
                    printf(
"Pattern occurs with shift %d ",s+1);
        }

        
if(s<n-m)
            ts
=(int)((ts-text[s]*h%q)*d+text[s+m])%q;
    }

}


int main()
{
    RabinKarpMatcher(
"kkjkjdflkdkkjdklekrketkjdriti","kjd",10,13);
    
return 0;
}

发表于 @ 2006年09月16日 15:33:00|评论(loading...)|编辑

新一篇: KMP字符串匹配算法--算法导论示例 | 旧一篇: 朴素字符串匹配算法(Naive String-Matching)--算法导论示例

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © 何东付