首页 > 其他分享 >最小表示法学习笔记

最小表示法学习笔记

时间:2023-01-04 22:23:59浏览次数:36  
标签:暴力 ss ++ 最小 笔记 表示法 leq 字符串

假设我们有一个字符串 \(s\),下标从 \(1\) 到 \(n\),我们将字符串复制一遍接在尾部,设新的字符串为 \(ss\),对于 \(1\leq i \leq n\) 显然有 \(ss_i=ss_{i+n}\)。

对于 \(1\leq i \leq n\),\(ss\) 中 \(i\) 到 \(i+n-1\) 可以构成一个长度为 \(n\) 的字符串,所有这些字符串中最小的称为 \(s\) 的最小表示。

正常暴力求法:求出所有字符串,暴力判断字典序。复杂度 \(O(n^2)\)。

但是!这里有一种 \(O(n)\) 的算法。

设变量 \(i,j\) 表示当前比对的两个字符串在 \(ss\) 中的开头位置,初始 \(i=1\),\(j=2\)。

我们还是暴力比对两个字符串,设第 \(i+k\) 位不同。(两个字符串完全相同直接结束就行了,因为只有可能是循环节)

假设是 \(ss_{i+k}\) 比 \(ss_{j+k}\) 打,则 \(i\) 可以直接等于 \(i+k+1\)。

证明一下:假设 \(i+p\) 是 \(i\) 与 \(i+k+1\) 中间的一位,那 \(j+p\) 开始的字符串优于该串,因为两串一定仍然同时包括 \(i+k\) 位,所以一定存在优于该串的字符串。

当 \(i>n\) 或 \(j>n\) 时,已经不存在能比较的第二个串,答案即为 \(\min(i,j)\) 开头的字符串。

代码实现
int i=1,j=2,k;
while(i<=n&&j<=n){
	k=0;
	while(k<n){
		if(c[i+k]!=c[j+k]) break;
		else k++;
	}
	if(k==n){
		break;
	}
	if(c[i+k]>c[j+k]){
		i+=k+1;
		if(i==j) i++;
	}else{
		j+=k+1;
		if(i==j) j++;
	}
}

标签:暴力,ss,++,最小,笔记,表示法,leq,字符串
From: https://www.cnblogs.com/victoryang-not-found/p/17026151.html

相关文章

  • 2023,1 做题笔记
    Hello2023!【CF1025G】CompanyAcquisitions考虑用势能函数去描述一个状态\(A=\{a_1,a_2,...,a_n\}\),令\(w(A)=\sum_{i=1}^nf(a_i)\),其中\(f(a_i)\)是一个关于\(a_......
  • 最小生成树
    最小生成树\(\text{ByDaiRuiChen007}\)一、Kruskal重构树图示来源/参考资料:最小生成树-OIWikiOrz。。。Kruskal重构树,是指我们在对一张图进行Kruskal算法的时......
  • Markdown学习笔记——DAY01
    Markdown学习标题:#+空格学习二级标题:##+空格以此类推字体粗体helloworld两星斜体helloworld一星粗体加斜体helloworld三星划去线helloworld两波浪引用......
  • mybaits 笔记2022年8月学习笔记
    mybatis整理前期准备安装必要依赖:idea开发mybatis,如果学习测试,可以在一个直接建一个空白项目,如果是用springboot,则建议用用boot的安装捆绑方式核心依赖org.mybatis......
  • 2018年笔记,突然看到2018年以前的一些笔记
    看到以前一些笔记,以前怕别人看到的笔记,居然写太认真就删了,苦了此心血,现在越工作了笔记反尔随心,现在自己的笔记除了自己能看懂,别人看到肯会乱自己要反省自己,  纯属回忆......
  • AN IMAGE IS WORTH 16X16 WORDS TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE---阅读
    ANIMAGEISWORTH16X16WORDS:TRANSFORMERSFORIMAGERECOGNITIONATSCALE---阅读笔记摘要​虽然Transformer架构已成为NLP任务的事实标准,但它在CV中......
  • 10-11代码笔记
    1.日期格式FormatDateTime函数详解c以短时间格式显示时间,即全部是数字的表示FormatdateTime('c',now);输出为:2004-8-79:55:40d对应于时间中的日期,日期是一位则显......
  • [概率论与数理统计]笔记:2.2 随机变量的数字特征
    2.2随机变量的数字特征离散型随机变量的数学期望设离散型随机变量\(X\)的可能值为\(x_i(i=1,2,\cdots)\),其概率分布为\[P\{X=x_i\}=p_i,\quadi=1,2,\cdots,\]若\(\su......
  • pyautogui + opencv 笔记
    安装pipinstallpyautoguipipinstallopencv-python==3.4.8.291,控制鼠标的移动获取屏幕分辨率>>>importpyautogui>>>宽,高=pyautogui.size()>>>宽,高......
  • 极光笔记 | 当前最佳实践:Header Bidding 与瀑布流混合请求技术
    通过这篇文章您讲将了解:HeaderBidding的发展史Waterfall、HeaderBidding的逻辑及优劣势为什么说HeaderBidding与瀑布流混合请求技术是当前最佳实践PART 01、Header......