• 初探—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 既是主串,又是模式串。未完待续....

  • 相关阅读:
    POJ2175 Evacuation Plan
    POJ3252 Round Numbers
    POJ2115 C Looooops
    POJ3422 Kaka's Matrix Travels
    POJ1659 Frogs' Neighborhood
    POJ2635 The Embarrassed Cryptographer
    POJ3436 ACM Computer Factory
    FZU1607 Greedy division
    EOJ440 Buying Feed
    POJ2135 Farm Tour
  • 原文地址:https://www.cnblogs.com/supercell/p/3403874.html
Copyright © 2020-2023  润新知