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

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

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

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

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

 

 

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

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

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

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

 

转载于:https://www.cnblogs.com/LJB666/p/11191059.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值