Cage 字符串听课笔记
困困困!
KMP
注意到 KMP 的复杂度是均摊的,那么是否可以绕开?
注意到 KMP 实际上一个串的 ACAM,那么考虑可以类似的,在加入一个字符的同时维护 ACAM(考虑 ACAM 的构建过程,前面的点不会被影响)那么每次就可以通过 \(O(|\Sigma|)\) 的修改(或者利用可持久化数据结构达到 \(O(\log |\Sigma|)\))
但是似乎还有不依赖字符集以及数据结构的做法。先导入一些定义,定理。
- border: 若 \(k\) 满足 \(S_{1 \ldots k} = S_{n - k + 1 \ldots n}\) 那么 \(S_{1 \ldots k}\) 是 \(S\) 的 border。
- period: 若 \(\forall k \in [1, n - k] s.t. S_i = S_{i + k}\),那么 \(k\) 是一个周期。
如果存在长度为 \(k\) 的 border,那么存在长度为 \(n - k\) 的 period
Weak Period Theory
若 \(p, q\) 均为周期,那么 \(\gcd(p, q)\) 也为周期!
border 的 \(O(\log n)\) 等差数列
话是说如果将一个串的所有 border/period 排序,那么可以划分为 \(O(\log n)\) 个等差数列。
如何证明,考虑最长的 border,以及其对应的最小的周期。如果这个 border 长度 \(\ge \frac n2\),那么不断的减去这个周期就可以构造出新的 border。由于这个周期是最小的,所以中间不会有更多的 border 存在。
但是当这个串减到 \(\le \frac n2\) 那么此时可能存在新的 border 并不是由最大的那个减过来的。但是此时可以进入子问题,问题减半。
于是 border 可以划分为 \(O(\log n)\) 个等差数列。
Cage 字符串听课笔记的更多相关文章
- bayaim_java_入门到精通_听课笔记bayaim_20181120
------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...
- cs231n spring 2017 lecture9 CNN Architectures 听课笔记
参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...
- Python 3.x 格式化输出字符串 % & format 笔记
Python 3.x 格式化输出字符串 % & format 笔记 python格式化字符串有%和{}两种 字符串格式控制符. 字符串输入数据格式类型(%格式操作符号) %%百分号标记 %c字 ...
- iOS 字符串处理笔记
iOS字符串处理笔记,包括如何使用正则表达式解析,NSScanner扫描,设置和使用CoreParse解析器来解析处理自定义符号等内容 搜索 在一个字符串中搜索子字符串 最灵活的方法 - (NSRan ...
- 孔浩老师的 Struts2 教程听课笔记(思维导图)
最近有空重头学习了一遍孔浩老师的 Struts2 教程,重新写了一份听课笔记.后面常用 form 标签.服务器端验证.异常处理因为时间问题,没有来得及整理.后续我会抽空补上.最近忙着准备笔试.面试. ...
- [编程基础] Python字符串替换笔记
Python字符串替换笔记 Python字符串替换笔记主要展示了如何在Python中替换字符串.Python中有以下几种替换字符串的方法,本文主要介绍前三种. replace方法(常用) transl ...
- SAP BW/4HANA 听课笔记
BW/4HANA听课笔记 1.本地SQL,BW/4HANA对象和HANA VIEW互相访问: 2.高级分析功能数据分析预测: 3.InfoOjbect:Characteristics(维度),Key ...
- Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)
自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...
- C语言 字符串操作 笔记
/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) ...
- crawler 听课笔记 碎碎念 1 初步了解各种选择器极其简单的使用
css中 身份证 id对应# 衣服 class对应 . 图片 pyquery...as pq html= request.get(url=''.....'') doc=pq(html) d ...
随机推荐
- HarmonyOS NEXT应用开发案例——二级联动
介绍 本示例主要介绍了List组件实现二级联动(Cascading List)的场景. 该场景多用于短视频中拍摄风格的选择.照片编辑时的场景的选择. 效果图预览 使用说明: 滑动二级列表侧控件,一级列 ...
- 一站式云原生智能告警运维平台——SLS新版告警发布!
简介: 本文介绍什么是云原生可观测性需求以及告警限制,介绍一站式云原生智能告警运维平台--SLS新版告警. 前言 本篇是SLS新版告警系列宣传与培训的第一篇,后续我们会推出20+系列直播与实战培训视频 ...
- sysAK(青囊)系统运维工具集:如何实现高效自动化运维?| 龙蜥技术
简介:What is sysAK.典型工具介绍.开源 3 方面介绍了 sysAK 系统,目前 sysAK 工具集已经在龙蜥社区开源,并且在系统运维 SIG.跟踪诊断 SIG 一起共建,希望大家后期加 ...
- OLAP系列之分析型数据库clickhouse集群扩缩容(四)
一.集群缩容 1.1 下线节点 步骤:1.对外停止服务2.转移数据3.修改剩余节点配置4.通知客户端修改节点列表 # 修改90,91服务器配置文件 vim /etc/clickhouse-server ...
- MDK在头文件中使用预编译器时,#ifdef 无效的问题
问题:在头文件中使用预编译时,会出现无效的现象 在a.h文件中定义了宏AA_TEST,如下所示 #ifndef __A_H #define __A_H #define AA_TEST #endif 在 ...
- 简说Python之函数
目录 Python的函数 函数的简单调用 函数传参 返回值 计算圆形面积 变量作用域 局部变量 全局变量 就像平时玩的积木,函数就是一个个成块的积木,可以组合你想要的任何形状. Python的函数 函 ...
- vim简明文档
替换 替换当前行第一个 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky 从当前行替换到最后一行 :%s/vivian/sky/g 替换所有行中 vivian 为 sky 查找 ...
- Goland 的配置
目录 下载安装 设置好go的系统环境变量 设置 GOROOT 设置 GOPATH 设置 MODULES 设置 工作面板里的字体缩放大小快捷键 安装主题包 安装中文中包 Redis Mannager 读 ...
- Xcode编译WebKit
下载WebKit源码 1)进入https://webkit.org/ 2)点击页面的 Get Started 进入新页面,如下图所示 3)点击 Getting the code 进入新页面,如下图所示 ...
- 解决小程序uni-app echars层级过高问题
使用 force-use-old-canvas="false" 使用微信小程序的cover-view会有很多问题,并且不一定生效,只需要在canvas的标签内添加 force-us ...