后缀排序

news/2024/11/13 16:42:34/文章来源:https://www.cnblogs.com/zhone-lb/p/18539278

后缀排序

即对字符串\(S\)的所有后缀根据字典序排序

实现

算法1:暴力排序

直接\(O(n)\)比较,时间复杂度\(O(n^2\log n)\)

算法2:倍增优化

我们考虑长为\(2^k\)的串的比较,该串可以分为前后均长\(2^{k-1}\)的串,那么只要知道这两个串的排名,就可以对所有\(2^k\)的串进行双关键字排序

于是每次记录\(rk[i]\)\(S[i\sim i+2^k-1]\)的排名,则\(S[i\sim i+2^{k+1}-1]\)的两个关键字为\((rk[i],rk[i+2^k])\),倍增处理\(2^k\),每次排序即可

当某后缀无法拓展至\(2^k\)时,由于越界访问\(sa[]\)\(sa[]\)值为 \(0\),则该关键字无限小,正好对应了字典序排序中“空字符字典序无限小”,因此可以不用特判,开两倍空间即可

时间复杂度\(O(n\log^2n)\)

算法3:基数排序优化

尝试优化时,我们发现双关键字排序复杂度为\(O(n\log n)\),尝试从这里着手优化

于是想到了基数排序——时间复杂度\(O(n|A|)\)\(|A|\)为数的位数,这里为\(2\),于是排序复杂度变为\(O(n)\)

时间复杂度\(O(n\log n)\)

算法4:见OIwiki

后缀数组

\(sa[i]\)记录后缀排序后排名为\(i\)的后缀的编号

在字符串领域内有相当广泛的应用

height数组

定义,\(sa\)数组中相邻两项的最长公共前缀,即\(h[i]=LCP(sa[i],sa[i-1])\)

对于\(height\)数组,有公式\(h[rk[i]]\ge h[rk[i-1]]-1\)

因此可以线性求解\(height\)数组

代码:

for(rg int i=1,k=0;i<=n;i++) {if(rk[i]==1) {h[rk[i]]=0; continue;}if(k) --k;while(S[i+k]==S[sa[rk[i]-1]+k]) ++k;h[rk[i]]=k;}

\(height\)数组还有一个重要的公式:\(\displaystyle LCP(sa[i],sa[j])=\min\{h[i+1]\sim h[j]\}\)

\(height\)数组是解决一些子串问题的关键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831691.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何处理微信小程序大量未捕获的异常

1)如何处理微信小程序大量未捕获的异常2)如何关闭代码创建的纹理的读写,或者创建不带读写的图片3)回收带有贴图和Collider的Mesh,如何正确用对象池维护4)Cloth组件使用在一个篮筐上,运行后篮网扭曲,是什么原因这是第408篇UWA技术知识分享的推送,精选了UWA社区的热门话…

2024年最新21款精品项目管理软件推荐:提高工作效率必备

在项目管理中,选择合适的软件工具能显著提高工作效率,优化团队协作,增强项目透明度和跟踪能力。以下是2024年最新、最受欢迎的20款精品项目管理软件推荐,它们涵盖了不同团队规模、行业需求以及功能特点,帮助用户更好地管理任务、时间、资源和预算。 1. 禅道 (ZenTao)功能:…

代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)

代码 1、长度最小的子数组⭐ 使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮 自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内…

90%的项目经理都在使用的15款项目管理工具清单

以下是 90% 项目经理常用的项目管理工具清单。它们帮助项目经理规划、组织、执行和监控项目,确保项目按时、按预算完成,并满足项目目标。 1. 禅道(Zentao)用途:项目管理、需求管理、任务分配、缺陷跟踪。 特点:完全开源,适合中小型企业。 提供从需求、开发、测试到交付的…

2024年项目管理趋势预测:大厂都在关注什么?

在2024年,项目管理的趋势继续受到技术、远程工作和敏捷方法等多种因素的影响。大厂和各行业领先企业都在关注以下几个关键趋势: 1. AI与自动化的深度集成 人工智能(AI)和自动化技术的引入,正在极大改变项目管理的方式。大厂越来越多地依赖AI来预测项目风险、自动化重复性任…

2024年产品经理必备:10款最佳项目管理软件推荐

在2024年,产品经理的工作越来越依赖于高效的项目管理工具。项目管理软件不仅能帮助团队协作、跟踪进度,还能帮助规划任务、管理预算、识别风险和收集反馈等。随着技术的发展,市场上出现了各种类型的项目管理软件,各具特色,能够满足不同产品经理的需求。以下是2024年产品经…

禅道、Jira与Ones对比:2024年项目管理平台谁更适合你的团队?

在2024年,选择一个合适的项目管理平台对于团队的高效协作至关重要。禅道、Jira 和 Ones 都是目前市场上较为流行的项目管理工具,它们各有优势和特点,适合不同需求的团队。以下是对这三款工具的对比分析,帮助你选择最适合你团队的项目管理平台。 1. 禅道 禅道是一个国产的开…

2024年最优秀的10款项目管理工具,项目经理必看!

在2024年,随着企业的数字化转型,项目管理工具变得越来越多样化,涵盖了从敏捷开发、团队协作到复杂企业项目管理等各类需求。以下是10款值得项目经理关注的优秀项目管理工具,它们涵盖了不同规模和需求的团队,帮助提升团队效率、项目透明度及交付质量。1. Jira Jira 是一款强…

KubeSphere 社区双周报| 2024.10.25-11.07

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.10.25-11.07。 贡献者名单新晋 KubeSphere co…

实验三 类与对象

#pragma once#include <iostream> #include <string>using std::string; using std::cout;// 按钮类 class Button { public:Button(const string &text);string get_label() const;void click();private:string label; };Button::Button(const string &te…

基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架

贝叶斯营销组合建模(Bayesian Marketing Mix Modeling,MMM)作为一种先进的营销效果评估方法,其核心在于通过贝叶斯框架对营销投资的影响进行量化分析。在实践中为确保模型的可靠性和有效性,需要系统地进行模型诊断、分析和比较。本文将重点探讨这些关键环节,包括:通过后…

表中明明没有这条数据,竟然还能查出来?

大家好,我是苏三,又跟大家见面了。 前言 当你看到这个标题时,第一反应可能是想:标题搞错了吧? 答:没搞错,各位看官,听我慢慢道来。 我之前写过一篇文章《明明加了唯一索引,为什么还是产生重复数据?》,发表之后,被很多博主转载过,引起了全网很多读者的共鸣。 我最近…