博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

hope_process

感觉好累。。。
  heixia108.cublog.cn

关于作者
    既然目标是地平线

   留给世界的只能是背影
   
|| << >> ||
我的分类


KMP

/* -*- C -*-
 *
 * KMP.c -
 *
 * Author : heixia
 * Created On : Sat Mar 22 08:54:54 2008
 *
 */


#include <stdio.h>
#include <stdlib.h>

#define MAX 1000

void GetNextval( char *t,int nextval[ ] );
int KMPIndex( char *s,char *t );

int main( ){
     char s[ 50 ] = "abcaabbabcabaacbacba";
     char t[ 10 ] = "abcabaa";
     int next[ 10 ];

     int i = 0;

     i = KMPIndex( s,t );

     if( i != -1 )
          printf("The matched position is: %d\n",i);
     else
          printf( "Can't be matched.\n" );
}

void GetNextval( char *t,int nextval[ ] ){
     int j = 0,k = -1,len = strlen( t );
     nextval[ 0 ] = -1;

     
     while( j < len ){
          if( k == -1 || t[ j ] == t[ k ] ){
               j ++;
               k ++;
               if( t[ j ] != t[ k ] )
                    nextval[ j ] = k;
               else
                    nextval[ j ] = nextval[ k ];
          }
          else
               k = nextval[ k ];
     }
}

int KMPIndex( char *s,char *t ){
     int next[ MAX ],i = 0,j = 0,v;

     int len1 = strlen( s ),len2 = strlen( t );
     
     GetNextval( t,next );

     while( i < len1 && j < len2 ){
          if( j == -1 || s[ i ] == t[ j ] ){
               i ++;
               j ++;
          }
          else
               j = next[ j ];
     }

     if( j >= len2 )
          v = i- len2;
     else
          v = -1;

     return v;
}


讲解可参考:KMP算法详解

发表于: 2008-03-22,修改于: 2008-03-22 09:18,已浏览196次,有评论0条 推荐 投诉


网友评论
 发表评论