zoukankan      html  css  js  c++  java
  • 后缀数组学习

    快排的代码很容易理解。

     1 int sa[MAX],temp[MAX],rank[MAX];
     2 int n,k;
     3 bool cmp_sa(int i,int j) {
     4     if(rank[i]!=rank[j]) return rank[i]<rank[j];
     5     else {
     6         int ri= i+k<=n ? rank[i+k] : -1;
     7         int rj= j+k<=n ? rank[j+k] : -1;
     8         return ri<rj;
     9     }
    10 }
    11 void construct_sa(string S,int *sa) {
    12     n=S.size();
    13     for(int i=0;i<=n;i++) {
    14         sa[i]=i;
    15         rank[i]= i < n ? S[i] : -1;
    16     }
    17     for(k=1;k<=n;(k<<=1)) {
    18         sort(sa,sa+1+n,cmp_sa) ;
    19         temp[sa[0]]=0;
    20         for(int i=1;i<=n;i++) {
    21             temp[sa[i]]=temp[sa[i-1]]+(cmp_sa(sa[i-1],sa[i])? 1 : 0);
    22         }
    23         for(int i=0;i<=n;i++) {
    24             rank[i]=temp[i];
    25         }
    26     }

    27 } 

  • 相关阅读:
    聊天工具分享bug
    Git命令查看代码提交次数
    短链接生成实例
    .Net MVC用户注册验证码
    js写验证码
    笔记
    jq获取数组中的某个字段拆分成字符串。
    IIS部署后中文Cookie乱码
    C#反射(Reflection)与特性(Attribute)实例
    jmm
  • 原文地址:https://www.cnblogs.com/acvc/p/4159052.html
Copyright © 2011-2022 走看看