• P3809 【模板】后缀排序 良心讲解


    感谢yyr学长的讲课以及自为风月马前卒大佬的这篇博客

    一直早有耳闻后缀数组SA的大名,今天yyr学长也讲解了有关于后缀数组的内容,后缀排序又是能够求出后缀数组的操作,感觉其中的原理理解起来还是很简单的,不过就是按第一关键字和第二关键字排序罢了。但是代码的细节却不太好理解。

    后缀排序时要用上好几个数组,我先在这里讲解用到的数组有哪些:

    而在对字符排序的时候,因为常用的sort时间复杂度太高(nlogn),所以这样的情况下我们就会选择更优的基数排序(O(n))。关于基数排序,在此有一个简单的介绍:

     

    百度上的解释还是比较详细的,其实用通俗的话来说就是按多个关键字来排序,这很好的满足了我们后缀排序的需求。

     首先我们对每一位的单个字符进行基数排序

    按自为风月马前卒大佬的话来说,因为单个字符的ASCII值是可以确定的,所以可以看做一个(fir[i],i)的二元组,所以我们先将这个二元组进行排序。

    可以利用前缀和的思想求出每一个出现过的值域的排名。因为值域是单调的,字符集值域的上界可以定为127(我也不知道为什么这样定)。

  • 相关阅读:
    数据结构八树和森林
    数据结构 七 二叉树的遍历
    python 的 encode 、decode、字节串、字符串
    TCP/IP
    pg 数据库操作
    nginx + lua 的 跳转命令
    lua string 下的函数
    lua 的匹配规则
    nginx的 ngx.var ngx.ctx ngx.req
    docker 网络模式 和 端口映射
  • 原文地址:https://www.cnblogs.com/LJB666/p/11191059.html
Copyright © 2020-2023  润新知