杜瓦尔算法如何处理奇数长度的字符串?

2024-01-07

寻找按字典顺序最小化字符串旋转 https://en.wikipedia.org/wiki/Lexicographically_minimal_string_rotation是一个众所周知的问题,对于这个问题线性时间算法 https://www.sciencedirect.com/science/article/pii/0196677483900172由让·皮埃尔·杜瓦尔于 1983 年提出。This https://ritukundu.wordpress.com/2016/10/07/algorithm-to-find-the-least-lexicographic-rotation-of-a-circular-string/博客文章可能是唯一详细讨论该算法的公开资源。然而,杜瓦尔的算法是基于成对比较(“决斗”)的思想,并且该博客方便地使用偶数长度字符串作为示例。

该算法如何处理奇数长度的字符串,其中最后一个字符没有与之竞争的字符?


One character can get a "bye https://en.wikipedia.org/wiki/Bye_(sports)", where it wins without participating in a "duel". The correctness of the algorithm does not rely on the specific duels that you perform; given any two distinct indices i and j, you can always conclusively rule out that one of them is the start-index of the lexicographically-minimal rotation (unless both are start-indices of identical lexicographically-minimal rotations, in which case it doesn't matter which one you reject). The reason to perform the duels in a specific order is performance: to get asymptotically linear time by ensuring that half the duels only need to compare one character, half of the rest only need to compare two characters, and so on, until the last duel only needs to compare half the length of the string. But a single odd character here and there doesn't change the asymptotic complexity, it just makes the math (and implementation) a little bit more complicated. A string of length 2n+1 still requires fewer "duels" than one of length 2n+1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

杜瓦尔算法如何处理奇数长度的字符串? 的相关文章

随机推荐

  • Puppeteer chrome 获得活动/可见选项卡

    在 Chrome 扩展中 您可以使用下面的命令来查找窗口中的活动选项卡 chrome tabs query currentWindow true active true 我有一个连接到现有浏览器并获取所有页面的以下代码 我无法确定是否有办法
  • Angularjs:复选框和 ng-change

    我无法理解 ng change 的工作原理 我有一份邀请参加拍卖的用户列表 我想用一个复选框来做到这一点 如果选中用户 则必须将其姓名保存到数组中 稍后我会邀请他们 我只知道该怎么做 但我不明白如何使用该复选框 我做了这样的事情 ul cl
  • 地图视图删除多个图钉

    我想在地图上显示用户位置并放置一个图钉 但我的应用程序放置了两个相距一定距离的图钉 我想知道当新图钉被放置时如何删除旧图钉 以便地图上应该有一个图钉我的代码是 MKAnnotationView mapView MKMapView mV vi
  • 如何安装rabbitmq管理插件(rabbitmq-plugins)

    简短的 有没有办法通过ubuntu包安装rabbitmq plugins Details 我的rabbitmq 在我的ubuntu 系统中运行正常 现在我正在尝试通过管理插件监控正在发生的情况 我正在按照rabbitmq com manag
  • 如何在 .vimrc 文件中“获取”某些内容?

    我最近一直在努力扩展我的 vim foo 并且遇到了几个插件 自动标记 vim http www vim org scripts script php script id 1343例如 要求它们在我的 vimrc 文件中 来源 这到底是什么
  • SQL DATETIME 从 Excel 插入?

    所以我遇到了一个相当奇怪的问题 我在Excel中有一个列 比如说A列 其中的数据如下所示 2015年4月11日 10 14 我还有很多其他列 但无论如何在 Excel 中的 SQL Insert 语句中 数据 复制时 如下所示 42105
  • java中如何转义文件路径中的反斜杠和自动生成的转义字符

    我有一个非常小而简单的问题 但我没有得到解决方案 实际上我正在使用文件选择器获取 CSV 文件路径 我使用加载数据本地 infile 查询将此 csv 文件中的数据输入到数据库中 假设我输入的文件路径是 C title csv 当我将此字符
  • 使用 lldb 调用带有字符串参数的函数:如何?

    我无法使用 lldb 调用采用字符串参数的简单非模板化函数 有没有办法让 lldb 理解 C 数据类型 字符串 这是 C 程序中常用的数据类型 这里的示例源代码只是创建一个带有几个构造函数的简单类 然后调用它们 省略了 iostream 和
  • Java 中什么是可调用的?

    标题几乎概括了它 我想了解 callable 的概念和思想 我读过一篇在这里提问 https stackoverflow com questions 141284 the difference between the runnable an
  • 函数返回另一个函数的返回值

    如果我想打电话Bar 代替Foo does Bar 返回 Foo 返回的副本 额外开销 或者返回与Foo 临时堆栈上的位置 vector
  • 如何使用 Google Apps 脚本获取单元格的格式化值

    我想使用 Google Apps 脚本通过连接 Google 电子表格中所选单元格的值来创建字符串 问题是我不知道单元格是否包含数字 日期或文本 当值是数字或日期时 我想获取格式化值 即它在电子表格中显示的方式 例如 以下函数将返回命名范围
  • TabBarController didSelectViewController 不工作

    我知道这是一个非常重复的话题 但我无法让它发挥作用 主选项卡 h import
  • Django settings.py:单独的本地和全局配置

    我想知道是否可以将 Django 中的 本地 配置 静态的本地路径 必须是绝对的模板内容 本地数据库信息等 与 全局 配置 URL 中间件类 分开 安装的应用程序等 这样几个人就可以通过 Git 或 SVN 处理同一个项目 而不必在每次完成
  • FB.ui 和设置弹出窗口大小

    我正在使用 FB ui 并将显示参数设置为弹出 当方法为 stream publish 时 它会在加载内容时自动调整大小 但是 当使用 fbml dialog 为了显示多好友选择器 时 它显示的大小我无法更改 并且内容显示为裁剪的 我尝试过
  • 将 django-allauth 作为端点插入 django-rest-framework

    我在我的网站上使用 django allauth 进行社交登录 我还有一个由 django rest framework 提供支持的 REST API 用作移动应用程序的后端 有没有办法可以直接将 allauth 的身份验证后端插入 RES
  • js和template标签对比

    如何比较 profile id 和 JavaScript 变量profile id function compare profile id if profile id profilegroup subject id do something
  • 是否可以用 C# 创建有状态的 Web 服务?

    我现在有这样的东西 public class Service1 System Web Services WebService WebMethod public string Method1 SomeObj so SomeClass GetS
  • 不可预测的双重[重复]

    这个问题在这里已经有答案了 可能的重复 NET 上的双精度问题 https stackoverflow com questions 566958 double precision problems on net 双重计算产生奇数结果 htt
  • 检查 ruby​​ 中的两个范围是否重叠

    我知道我能做到 1 30 cover 2 gt true 但是当我尝试对另一个范围执行相同操作时 它总是返回 false 1 30 cover 2 3 gt false 所以我的问题是 有没有什么优雅的方法来比较红宝石中的两个范围 就我而言
  • 杜瓦尔算法如何处理奇数长度的字符串?

    寻找按字典顺序最小化字符串旋转 https en wikipedia org wiki Lexicographically minimal string rotation是一个众所周知的问题 对于这个问题线性时间算法 https www s