字符串匹配之rabin_karp
2014-08-05 19:59
253 查看
/* file:rk_alogrithm.c brief: auther:yejing data:2014.08.01 ver:1(create the file 8/1) test pc:ubuntu 12.14 */ #include <stdio.h> #include <stdlib.h> #include <string.h> void rabin_karp_alogrithm( char *src_string, char *tar_string) { if(!src_string || !tar_string) return; int i, j; int src_len = strlen(src_string); int tar_len = strlen(tar_string); int tar_matcher = 0; int src_matcher = 0; int prime_num = 11; int highest_bit = 1; int max_character_num = 255; for( i = 0; i < tar_len; ++i) { tar_matcher = ( max_character_num * tar_matcher + tar_string[i] ) % prime_num; src_matcher = ( max_character_num * src_matcher + src_string[i] ) % prime_num; } for( i = 0; i < tar_len - 1; ++i) highest_bit = (highest_bit * max_character_num) % prime_num; for( i = 0; i <= src_len - tar_len; ++i) { if( tar_matcher == src_matcher) { for(j = 0; j < tar_len; j++) if(src_string[i+j] != tar_string[j]) break; if(j == tar_len) printf("match index:%d \n", i); } if(i < src_len - tar_len) { src_matcher = ( max_character_num * ( src_matcher - src_string[i] * highest_bit ) + src_string[i + tar_len] ) % prime_num; //向前移动一个字符 if( src_matcher < 0 ) src_matcher += prime_num; } } } int main(int argc, char* argv[]) { char tar_string[] = "yejing"; char src_string[] = "yejinglxlyejinglxlyejinglxlyejinglxl"; rabin_karp_alogrithm(src_string, tar_string); return 1; }
相关文章推荐
- 字符串匹配之Rabin-Karp 算法
- 字符串匹配(暴匹、 Rabin-Karp、KMP)
- 字符串匹配之Rabin-Karp
- 字符串匹配算法 -- Rabin-Karp 算法
- 4042:Rabin-Karp字符串匹配
- 高效字符串匹配之Boyer-Moore & Rabin-Karp
- Rabin-Karp 字符串匹配算法
- Java实现算法导论中Rabin-Karp字符串匹配算法
- 字符串匹配 之 RK(Rabin-Karp)
- 算法——字符串匹配之Rabin-Karp
- 字符串匹配(string matching)算法之一 (Naive and Rabin_Karp)
- 4种字符串匹配算法:BS朴素 Rabin-karp(上)
- 字符串匹配算法 -- Rabin-Karp 算法
- 字符串匹配(string matching)算法之一 (Naive and Rabin_Karp)
- 第32章:字符串匹配问题: 朴素算法,Rabin-Karp算法
- Rabin-Karp 字符匹配法
- 白话分析字符串匹配算法——Rabin-Karp算法
- 算法——字符串匹配之Rabin-Karp算法
- 面试算法之字符串匹配算法,Rabin-Karp算法详解
- 字符串匹配算法之Rabin-Karp算法