zoukankan      html  css  js  c++  java
  • 初探—KMP模式匹配算法

    KMP算法思想:

        普通的字符串匹配算法S主串必须要回溯。但回溯就影响了效率。

        改进的地方也就是这里,我们从P 串本身出发,事先就找准了T自身前后部分匹配的位置,那就可以改进算法。

    next数组的含义:

       T串各个位置的j值的变化定义为一个数组next

       当匹配到S[i] != P[j]的时候有 S[i-j…i-1] = P[0…j-1]. 如果下面用k 去匹配,则有P[0…k-1] = S[i-k…i-1] = P[j-k…j-1]。得到 P[0…k-1] = P[j-k…j-1];

       next[j]=Max{ "p1...pk-1"="Pj-k+1...Pj-1"}

     1 void CkmpDlg::get_next(String T, int* next) //根据String T子串,求next[] 数组
     2 {
     3     int i,j;
     4     i=1;
     5     j=0;
     6     next[1]=0;
     7     while(i<T[0])
     8     {
     9         if(j==0 || T[i]== T[j])//T[i]表示后缀单个字符,T[j]表示前缀的单个字符,如何相同,各自后移。   
    10         {
    11             ++i; 
    12             ++j;
    13             if(T[i]!=T[j])
    14                next[i]=j;
    15             else
    16                 next[i]=next[j];
    17         }
    18         else
    19             j=next[j];
    20     }
    21 
    22 }  

    get_next() 的求解:T 既是主串,又是模式串。未完待续....

  • 相关阅读:
    adb命令之adb install
    GNU make and Makefile
    Makefile经典教程(掌握这些足够)
    Android.mk简介
    PhoneFactory.getDefaultPhone must be called from Looper thread
    Android源码目录结构
    软件部通用技术类网站名录
    β测试
    α测试
    白盒测试
  • 原文地址:https://www.cnblogs.com/supercell/p/3403874.html
Copyright © 2011-2022 走看看