| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3249 人关注过本帖
标题:[收集]]关于KMP算法!
只看楼主 加入收藏
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 

有点懂了

做一个自由的人,飞到蔚蓝的天空里。
2008-05-25 11:15
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
sun兄好强!头像又换了,呵呵.........
KMP还有很多应用的,写法也有几种.比如用模式串的首字符与尾字串与主串的相对应位置比较,还有带通配符的.不过我没那么多时间去研究,毕意还有新的课程要赶.很快又要期考了.

i like linux...
2008-05-25 11:21
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
兄弟又闪了呵呵,头像是网上找的。代码很有意义。。这样的代码才好玩啊。。呵呵

学习需要安静。。海盗要重新来过。。
2008-05-25 12:13
lypoem
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-1-19
收藏
得分:0 
像飞燕同学学习
力争赶上~~~~~~~
2008-05-27 21:58
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
那个啥,你的代码参数传递的效率差别就可以完全掩盖KMP的速度优势了…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-28 12:05
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
[bo][un]StarWing83[/un] 在 2008-5-28 12:05 的发言:[/bo]

那个啥,你的代码参数传递的效率差别就可以完全掩盖KMP的速度优势了…………

翅膀这个怎么理解?

学习需要安静。。海盗要重新来过。。
2008-05-28 12:18
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
你自己看他是怎么个传参吧……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-28 13:43
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
哈哈,整个字符串的复制

[color=white]
2008-05-28 13:48
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
谢谢大家,我改一下.
wait a moment !!!

i like linux...
2008-05-28 15:26
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
请大家点评,谢谢!!!

/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) [url]http://[/url] **
*****************************************************************/

#include<iostream>      
using namespace std;   
const int MAXSIZE=32;
//#define MAXSIZE 32
//定义结构体   
struct stack_ch   
{   
   
char ch[MAXSIZE];   
    int Length;   
};   
   
//求next函数值   
   
void GetNext(stack_ch &ch,int m,int *next,int n)   
{   
   
int i=1,j=0;   
    next[1]=0;   
    while (i<ch.Length)   
    {   
        
if (j==0 || ch.ch[i]==ch.ch[j])   
        {   
            
i++;   
            j++;   
            next[i]=j;   
        }   
        
else   
            
j=next[j];   
    }   
}
//Get_next   
   
//输入字符串   
void Enter_stack(stack_ch &ch,int *next,int m)   
{   
        
char data;   
        ch.Length=0;   
        cin>>data;   
        while (data!='*')   
        {   
        
ch.ch[++ch.Length]=data;   
        cin>>data;   
        }   
}   
   
//将模式串和主串进行匹配操作,返回模式串在主串S第pos个字符之后可匹配的位置   
   
int Index_KMP(stack_ch S,stack_ch T,int pos,int *next,int m)   
{   
        
//利用模式串T的next函数求T在主串S中第pos个字符之后的位置,T非空且1<=pos<=S.Length   
        
int i=pos,j=1;   
        while (i<=S.Length && j<=T.Length)   //对两串扫描
        
{   
        
if (j==0 || S.ch[i]==T.ch[j])    //对应字符匹配
        
{   
            
i++;   
            j++;   
        }   
        
else   
            
j=next[j];   
        }   
        
if (j>T.Length)     
        return (i-T.Length);        //匹配成功
        
else   
        return
0;                 //匹配失败
} //Index_KMP   
   
int main(void)   
{   
        
stack_ch S,T;   
        int next[MAXSIZE]={0},pos,pos2;   
        cout<<"输入主串:(end by '*')"<<endl;   
   
        //输入主串   
        
Enter_stack(S,next,MAXSIZE);   
        cout<<"输入模式串:(end by '*')"<<endl;   
   
        //输入模式串   
        
Enter_stack(T,next,MAXSIZE);   
        GetNext(T,MAXSIZE,next,MAXSIZE);   
        cout<<"输入pos的值(1<=pos<=S.Length)S是主串:"<<endl;   
   
        //输入pos值   
        
cin>>pos;   
        pos2=Index_KMP(S,T,pos,next,MAXSIZE);   
   
        //输出所求的位置值   
        
cout<<"The position is:"<<pos2<<endl;   
        system("pause");
        return 0;
}   
   

i like linux...
2008-05-28 15:33
快速回复:[收集]]关于KMP算法!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066874 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved