小编典典

Duval的算法如何处理奇数长度的字符串?

algorithm

字典上找到最小的字符串旋转是一个众所周知的问题,让·皮埃尔·杜瓦尔(Jean
Pierre
Duval)于1983年提出了一种线性时间算法博客文章可能是唯一详细讨论该算法的可公开获得的资源。但是,Duval的算法基于成对比较(“
duels”)的概念,并且博客方便地使用偶数长度的字符串作为示例。

该算法如何处理奇数长度的字符串,而最后一个字符将不会与之竞争。


阅读 193

收藏
2020-07-28

共1个答案

小编典典

一个角色可以赢得“ 再见
”,而无需参加“决斗”就可以获胜。算法的正确性不取决于您执行的特定对决。给定 任意 两个不同的索引 ij
,您始终可以得出结论,排除其中之一是字典最小旋转的起始索引(除非 两者 都是 相同的 起始索引)
__字典最小旋转,在这种情况下,您拒绝哪一个旋转都没有关系。
按特定顺序执行决斗的原因是性能:通过确保一半的决斗只需要比较一个字符,其余一半的只需要比较两个字符来获得渐近线性时间,依此类推,直到最后一次决斗只需要比较字符串长度的一半即可。但是,这里和那里的单个奇数字符不会改变渐近复杂性,它只会使数学(和实现)更加复杂。长度为2
n +1的字符串仍然需要比长度2 n +1更少的“决斗” 。

2020-07-28