首页 > 其他分享 >生成魔咒

生成魔咒

时间:2024-08-23 09:39:33浏览次数:4  
标签:字符 前缀 lcp 后缀 text 魔咒 height 生成

先考虑没有修改操作,如何求不同的子串数量,这是后缀数组的经典应用。所有子串就是所有后缀的所有前缀。先将所有后缀按照字典序排序,然后求出\(height\)数组,从\(1\)循环到\(n\),对于排名为\(i\)的后缀来说,新增的后缀个数就是\(\text{len}[i]-height[i]\)(前者表示排名为\(i\)的后缀的长度),因为排名为\(i\)的后缀的前缀,前\(height[i]\)个显然已经在前面统计过了,所以可能没统计过的就是长度至少为\(height[i]+1\)的,而这些前缀也一定没有统计过(否则,假设长度为\(j>height[i]\)的前缀在前面统计过,也就是说存在一个排名为\(k<i\)的后缀,其与\(i\)的\(\text{lcp}\)的长度至少为\(j\),但是这个\(\text{lcp}\)的长度应该为\(\overset{i}{\underset{p=k+1}{\min}}height[p]\leq height[i]<j\),矛盾)

再考虑有修改的操作,根据上面的分析,我们肯定是去维护所有后缀的总长度与当前\(height\)数组的总和;然而发现如果从后面直接插入会影响所有后缀(所有后缀都会增加一个字符),于是尝试将字符串翻转过来,然后看成从后往前依次添加字符,于是添加的字符就不会影响已经有了的后缀了;但是发现还要对\(height\)进行插入排序,于是将从后往前添加字符看成从前往后删除字符,这样子就可以每次只删除一个\(height\)了;但是还要维护删除的那个\(height\)位置前后两个\(height\),于是用双向链表维护就好了(利用\(\text{lcp}(i-2,i)=\min(\text{lcp}(i-2,i-1),\text{lcp}(i-1,i))\),时间复杂度为\(O(1)\)的)

标签:字符,前缀,lcp,后缀,text,魔咒,height,生成
From: https://www.cnblogs.com/dingxingdi/p/18375274

相关文章

  • 一些关于生成函数的推导
    该文只推导一些特殊序列的生成函数1.$\quad$对于序列{\(a_n\)},\(a_n=1^n\),其生成函数为\(g(x)=\sum_{n=0}^{\infty}{a_nx^n}\)。$\quad$现在推导其封闭形式,先将其乘一个\(x\),可以得到:\[x\cdotg(x)=\sum_{n=0}^{\infty}{a_nx^{n+1}}\]$\quad$两式相减可得......
  • 生成函数(GF)
    学了一点皮毛,暂时先写一篇博客寄存一下定义:比较抽象的理解一下就是把一个限制条件的方案数转化成一个次冥函数的形式,再把一个次幂函数转化成某种限制条件下的方案数.......大概是这么一个形式:\[f(x)=a_{0}x^0+a_{1}x^1+a_{2}x^2+·····\]还是举个例子吧:你现在要离校回家......
  • 论文开题报告不再难?用AI快速生成论文开题报告
    在论文写作的过程中,论文的开题报告的编写起着至关重要的作用。它不仅为后续研究铺设了道路,更在很大程度上决定了论文的广度与深度。撰写一份出色的开题报告并非易事,这常常成为不少大学生面临的挑战。今天,我将向大家推荐一款前沿的AI写作助手,它能在短短三分钟生成高质量的论文......
  • H7-TOOL脱机烧录的UID加密操作方法,支持一键生成目标板C代码,方便大家轻松操作(2024-08-2
    UID加密使用比较方便,对应的C代码模板已经做好,使用TOOL上位机生成后,直接复制粘贴到自己的工程即可使用。返回1表示解密成功,返回0表示失败。【UID加密原理】1、烧录器在烧录芯片时,按照指定的算法将UID码编码为一个加密数据,并写入FLASH指定区域。2、用户的程序必须增加一段UID校......
  • 【生日视频制作】公园火车飞艇热气球AE模板修改文字软件生成器教程特效素材【AE模板】
    公园火车飞艇热气球生日视频制作教程AE模板修改文字特效软件生成器素材怎么如何做的【生日视频制作】公园火车飞艇热气球AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 【C#】.NET报错:所生成项目的处理器框架“MSIL”与引用“xxx”的处理器架构“AMD64”不
    一、现象所生成项目的处理器架构“MSIL”与引用“System.Data.SQLite,Version=1.0.60.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139,processorArchitecture=x86”的处理器架构“AMD64”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的......
  • Python 实现批量数字二维码生成器
    Python实现批量数字二维码生成器创建时间:2024-08-09一、背景手动逐个生成特定格式和内容的二维码是一项繁琐且耗时的任务。虽然有写二维码工具也可以制作,但是往往有一些限制,为了能够高效、批量生成自定义二维码的需求,开发了这个基于Python的数字二维码生成器应用程序。在实......
  • 【生日视频制作】教师节中秋节国庆节小蛮腰广州塔心形照片AE模板修改文字软件生成器教
    广州塔心形照片生日视频制作教程AE模板改字特效软件生成器素材怎么如何做的【生日视频制作】教师节中秋节国庆节小蛮腰广州塔心形照片AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出......
  • 真人图像生成决胜赛:Flux 对阵 Midjourney,谁更强?
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:     本文将“文生图”领域的新贵Flux与传统王者Midjourney进行了三轮关于真实人物图像生成的比较。历经三次同一标准的测试后,对二者的性能与输出效果予以评价,期望能为大家未来的使用提供些许帮......
  • 第5篇 如何制作并上传自己的项目模版并生成nuget程序包
    轻松快捷创建自己的nuget包,具体步骤如下1.创建content文件夹,存放模版源码(bin和obj都不要,只留源码),在content下再创建:.template.config/template.josn,template.josn文件格式如下{"$schema":"http://json.schemastore.org/template","author":"Chenshibao",......