zoukankan      html  css  js  c++  java
  • 第四章小结

    本章学习了串,数组以及稀疏矩阵。其中老师主要讲解了串的模式匹配(在主串S中查找与模式T相匹配的子串)的两种算法,BF算法和KMP算法。这次实践作业与两种算法密切相关。

    BF算法:将ij定位于主串和子串的0下标,若S[i]==T[j], i++,j++,继续匹配下一个字符;若S[i]=T[j],指针后退重新开始匹配,从主串的下一个字符(i=i-j+1)起再重新和模式T的第一个字符(j=0)比较....

    优点:易懂

    缺点:数据量较大的情况下运行效率低,超时。平均时间复杂度为Om*n)(m为主串长度,n为子串长度)--此次PTA作业运行超时

    int BF(string &S,string &T,int pos)

    {//字符串匹配的BF算法函数

    int i=pos-1;

    int j=0;

    while(i<S.length( ) && j<T.length( ))

    {//S,T字符相等,继续比较后继字符

    if(S[i]==T[j])   { i++;  j++; }

    //否则返回主串的下一个字符与子串的第一个字符继续匹配

    else   { i=i-j+1;  j=0;}

    }

    if (j==T.length( ))  

     {

      return i-j+1;//匹配成功

     }

         

    else  return 0;

     }

    KMP算法的不同之处是若匹配失败,指针i不变,指针j退回到next[j]所指的位置上重新比较。而next[j]就是我们需要探索的,它是根据主串的最大长度的相同前缀后缀决定。目前对于这个算法还是很恍惚...继续学习。

    感觉自己上机时间挺少的,打代码的能力也挺差的。多花些时间加强。

    学习KMP参考:https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html

  • 相关阅读:
    编程随想——从基础开始,顺其自然
    多个SSH私钥配置不当导致Git push 失败的分析及解决方法
    VPS配置记录
    COCI 2010.03.06 T5「PROGRAM」题解
    筛素数
    你的第一个程序--基本输入输出介绍,头文件介绍
    入门指北目录
    尺取法
    HAOI2006 (洛谷P2341)受欢迎的牛 题解
    c++并查集配合STL MAP的实现(洛谷P2814题解)
  • 原文地址:https://www.cnblogs.com/liuyuany/p/10705372.html
Copyright © 2011-2022 走看看