算法:字符串消除问题的数学证明

简介:

问题:

给定一个字符串,仅由A、B、C3个字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如有AB或BA连续出现,你把它们替换为字母C;有AC或CA连续出现时,你可以把它们替换为字母B;有BC或CB连续出现时,你可以把它们替换为字母A。可以不断反复按照这个规则进行替换,目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。

输入:字符串。长度不超过200,仅由ABC3个字母组成。 输出:按照上述规则不断消除替换,所得到的字符串最短的长度。

 

例如:

输入CAB,输出2。因为我们可以把它变为BB或者变为CC。

输入BCAB,输出1。我们可以把它变为AAB到AC到B,也可以把它变为BBB,但因为前者长度更短,所以输出1。

 

 

 

先给出几个概念

纯字符串:只含有一种字母的字符串称为纯字符串,例如AAA就是一个纯字符串

混字符串:含有至少两种字母的字符串称为混字符串,例如ABC就是一个混字符串

最优长度:字符串通过消除的最终结果的最短长度,称为该字符串的最优长度。上面的示例中,CAB的最优长度为2,BCAB的最优长度为1

最优串:字符串通过消除达到最优长度时的字符串称为最优串最优串可能不止一个。如CAB的最优串为BB和CC,而BCAB的最优串为B。最优串一定是纯字符串

统计向量:用(X,Y,Z)表示字符串的统计向量,其中X、Y、Z分别表示字符串中字母A、B、C的个数。上面的示例中,CAB的统计向量为(1,1,1),BCAB的统计向量为(1,2,1)

统计特征向量:用(X,Y,Z)表示字符串的统计特征向量,其中X、Y、Z分别表示字符串中字母A、B、C的个数的奇偶性,用“奇”、“偶”表示。CAB的统计特征向量为(奇,奇,奇),BCAB的统计特征向量为(奇,偶,奇)

 

 

 

再给出几个推论

推论1纯字符串最优长度就是纯字符串的长度。

很明显的,只有一个字母,没法消除,所以最优长度就是纯字符串的长度

 

推论2:在纯字符串前或后加另一个字母得到新的混字符串,则新混字符串最优长度为1

例如:BBBBBBBA。则消除的过程是,BBBBBBBA >> BBBBBBC >> BBBBBA >> BBBBC >> BBBA >> BBC >> BA >> C

其他的类似,不再赘述

 

推论3:若纯字符串的长度为偶数,则在前或后添加另一个字母得到新的混字符串,则新混字符串最优串为添加的字母;若纯字符串的长度为奇数,则新混字符串最优串为剩下的一个字母

假设纯字符串为BB,添加字母A,则新混字符串为BBA,BBA >> BC >> A

假设纯字符串为BBBB,添加字母A,则新混字符串为BBBBA,BBBBA >> BBA >> A

以此类推,推论3的前半部得证

假设纯字符串为B,添加字母A,则新混字符串为BA,BA >> C

假设纯字符串为BBB,添加字母A,则新混字符串为BBBA,BBBA >> BA >> C

以此类推,推论3的后半部得证

 

推论4混字符串最优长度不超过2(为1或2)

证明:

首先混字符串通过不停的消除,最终能得到一个纯字符串(因为若还有不同的字母,则必相邻,则还能继续消除)。

若该纯字符串的长度为1或2,则证明了该推论(不过,就算纯字符串长度为2,还没证明最优长度一定是2,可以肯定的是最优长度不超过2,即1或2都有可能)

若该纯字符串的长度大于2,不失一般性,假设该纯字符串的长度为K(K>2),该纯字符串都由字母B组成(字母A、C是一样的),该纯字符串是通过N(N≥1)步消除得到的

那么回退一步,第N-1步消除得到的混字符串为B……BACB……B,其中A前面有K1个B,C后面有K2个B,K1+K2=K-1。(也有可能是B……BCAB……B,和B……BACB……B是一致的,不再赘述了)

那么,根据K1和K2的取值不同,可以优化出不同的消除

K1是奇数,K2是奇数。利用推论3,可知B……BA >> C;CB……B >> A;B……BACB……B >> CA >> B,最优串是B,最优长度为1

K1是奇数,K2是偶数。利用推论3,可知B……BA >> C;CB……B >> C;B……BACB……B >> CC,则最优长度不超过2(因为还没法证明最优长度不会是1)

K1是偶数,K2是奇数。利用推论3,可知B……BA >> A;CB……B >> A;B……BACB……B >> AA,则最优长度不超过2(因为还没法证明最优长度不会是1)

K1是偶数,K2是偶数。利用推论3,可知B……BA >> A;CB……B >> C;B……BACB……B >> AC >> B,最优串是B,最优长度为1

综上所述,混字符串最优长度不超过2

 

推论5统计特征向量为(奇,奇,奇)或(偶,偶,偶)的混字符串最优长度为2;其余的混字符串最优长度为1

证明:

考察一下,每次消除,统计特征向量的变化过程

 

假设字符串的统计特征向量为(奇,奇,奇)

假设消除是AC(或CA) >> B,则A和C的个数减1,而B的个数增加1,则统计特征向量变为(偶,偶,偶)

假设消除是AB(或BA) >> C,则A和B的个数减1,而C的个数增加1,则统计特征向量变为(偶,偶,偶)

假设消除是BC(或CB) >> A,则B和C的个数减1,而A的个数增加1,则统计特征向量变为(偶,偶,偶)

综上所述,统计特征向量为(奇,奇,奇)的混字符串,经过1次消除后,统计特征向量变为(偶,偶,偶)

同理可证,统计特征向量为(偶,偶,偶)的混字符串,经过1次消除后,统计特征向量变为(奇,奇,奇)

由此可知,反复消除后,统计特征向量为(奇,奇,奇)的混字符串最优串统计特征向量是(偶,偶,偶)。(因为最优串纯字符串,只能有1种字符,所以最优串不可能是(奇,奇,奇))

同理可证,统计特征向量为(偶,偶,偶)的混字符串最优串统计特征向量也是(偶,偶,偶)。

因此,统计特征向量为(奇,奇,奇)或(偶,偶,偶)的混字符串最优串统计特征向量为(偶,偶,偶)

 

假设字符串的统计特征向量为(奇,偶,偶)

假设消除是AC(或CA) >> B,则A和C的个数减1,而B的个数增加1,则统计特征向量变为(偶,奇,奇)

假设消除是AB(或BA) >> C,则A和B的个数减1,而C的个数增加1,则统计特征向量变为(偶,奇,奇)

假设消除是BC(或CB) >> A,则B和C的个数减1,而A的个数增加1,则统计特征向量变为(偶,奇,奇)

综上所述,统计特征向量为(奇,偶,偶)的混字符串,经过1次消除后,统计特征向量变为(偶,奇,奇)

同理可证,统计特征向量为(偶,奇,奇)的混字符串,经过1次消除后,统计特征向量变为(奇,偶,偶)

由此可知,反复消除后,统计特征向量为(奇,偶,偶)的混字符串最优串统计特征向量是(奇,偶,偶)。(因为最优串纯字符串,只能有1种字符,所以最优串不可能是(偶,奇,奇))

同理可证,统计特征向量为(偶,奇,奇)的混字符串最优串统计特征向量也是(奇,偶,偶)。

因此,统计特征向量为(奇,偶,偶)或(偶,奇,奇)的混字符串最优串统计特征向量为(奇,偶,偶)

 

同理可证

统计特征向量为(偶,奇,偶)或(奇,偶,奇)的混字符串最优串统计特征向量为(偶,奇,偶)

统计特征向量为(偶,偶,奇)或(奇,奇,偶)的混字符串最优串统计特征向量为(偶,偶,奇)

 

由推论4可知,混字符串最优长度不超过2

如果,混字符串最优长度为1,则最优串是A,统计特征向量是(奇,偶,偶);是B,统计特征向量是(偶,奇,偶);是C,统计特征向量是(偶,偶,奇)

如果,混字符串最优长度为2,则最优串是AA或BB或CC,统计特征向量是(偶,偶,偶)

 

所以,统计特征向量为(奇,奇,奇)或(偶,偶,偶)的混字符串最优长度是2。

统计特征向量为(奇,偶,偶)或(偶,奇,奇)的混字符串最优长度为1,最优串是A

统计特征向量为(偶,奇,偶)或(奇,偶,奇)的混字符串最优长度为1,最优串是B

统计特征向量为(偶,偶,奇)或(奇,奇,偶)的混字符串最优长度为1,最优串是C

 

证明完毕

 

 

结论:

1、纯字符串最优串就是自身,最优长度就是自身的长度

2、统计特征向量为(奇,奇,奇)或(偶,偶,偶)的混字符串最优长度为2

3、其余的混字符串最优长度是1,其中统计特征向量为(奇,偶,偶)或(偶,奇,奇)的混字符串最优串是A;统计特征向量为(偶,奇,偶)或(奇,偶,奇)的混字符串最优串是B;统计特征向量为(偶,偶,奇)或(奇,奇,偶)的混字符串最优串是C


    本文转自万仓一黍博客园博客,原文链接:http://www.cnblogs.com/grenet/p/3300591.html,如需转载请自行联系原作者



相关文章
|
7月前
|
机器学习/深度学习 算法
扩散模型=进化算法!生物学大佬用数学揭示本质
在机器学习与生物学交叉领域,Tufts和Harvard大学研究人员揭示了扩散模型与进化算法的深刻联系。研究表明,扩散模型本质上是一种进化算法,通过逐步去噪生成数据点,类似于进化中的变异和选择机制。这一发现不仅在理论上具有重要意义,还提出了扩散进化方法,能够高效识别多解、处理高维复杂参数空间,并显著减少计算步骤,为图像生成、视频合成及神经网络优化等应用带来广泛潜力。论文地址:https://arxiv.org/pdf/2410.02543。
178 21
|
8月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
2007 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
8月前
|
机器学习/深度学习 人工智能 算法
Transformer打破三十年数学猜想!Meta研究者用AI给出反例,算法杀手攻克数学难题
《PatternBoost: Constructions in Mathematics with a Little Help from AI》提出了一种结合传统搜索算法和Transformer神经网络的PatternBoost算法,通过局部搜索和全局优化交替进行,成功应用于组合数学问题。该算法在图论中的Ramsey数研究中找到了更小的反例,推翻了一个30年的猜想,展示了AI在数学研究中的巨大潜力,但也面临可解释性和通用性的挑战。论文地址:https://arxiv.org/abs/2411.00566
182 13
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
157 0
|
11月前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
219 1
两个字符串匹配出最长公共子序列算法
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
670 1
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
算法 C++
惊爆!KPM算法背后的秘密武器:一行代码揭秘字符串最小周期的终极奥义,让你秒变编程界周期大师!
【8月更文挑战第4天】字符串最小周期问题旨在找出字符串中最短重复子串的长度。KPM(实为KMP,Knuth-Morris-Pratt)算法,虽主要用于字符串匹配,但其生成的前缀函数(next数组)也可用于求解最小周期。核心思想是构建LPS数组,记录模式串中每个位置的最长相等前后缀长度。对于长度为n的字符串S,其最小周期T可通过公式ans = n - LPS[n-1]求得。通过分析周期字符串的特性,可证明该方法的有效性。提供的C++示例代码展示了如何计算给定字符串的最小周期,体现了KPM算法在解决此类问题上的高效性。
387 0
|
7天前
|
机器学习/深度学习 算法 新能源
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
|
9天前
|
算法 机器人 定位技术
基于机器视觉和Dijkstra算法的平面建筑群地图路线规划matlab仿真
本程序基于机器视觉与Dijkstra算法,实现平面建筑群地图的路径规划。通过MATLAB 2022A读取地图图像,识别障碍物并进行路径搜索,支持鼠标选择起点与终点,最终显示最优路径及长度,适用于智能导航与机器人路径规划场景。

热门文章

最新文章