【问题标题】:Find the minimum number of steps to change a sequence to another找到将序列更改为另一个序列的最小步骤数
【发布时间】:2014-06-18 18:44:37
【问题描述】:

给定两个定向序列,

例如(+A-) (-B+) (+C-) (-D+) (+E-) and (+B-) (+C-) (-D+) (+E-) (+A-)

请注意,(+A-) 表示定向子序列,其中'+' 表示子序列的头部,'-' 表示尾部。如果'1234'(+A-),那么'4321'(-A+),是(+A-).的反面

目标是通过反向操作找到将一个序列转换为另一个序列的最少步数。

比如我们需要反转一次来改变(+A-)(+B-) to (-B+)(-A+).

而我们需要反转两次才能改变(+A-) (+B-) (+C-) to (-A+) (+B-) (-C+).

最初给出的两个序列之间的最小操作步数是 3。这是一种方法:

步骤 0. (+A-) (-B+) (+C-) (-D+) (+E-)

第一步。(+B-) (-A+) (+C-) (-D+) (+E-)

步骤 2. (+B-) (-A+) (-E+) (+D-) (-C+)

步骤 3. (+B-) (+C-) (-D+) (+E-) (+A-)


我的想法是这个问题可能与排序问题有关,但不是交换序列中的两个单独元素,这里我们必须考虑交换两个子序列。

【问题讨论】:

  • 这个问题似乎跑题了,因为它是关于数学作业的,属于maths.stackexchange.com
  • 你的第3步不清楚。我认为您还需要再迈出一步。
  • 你的问题有个众所周知的名字——编辑距离。有一种已知的算法可以解决它 - Wagner Fischer 算法。维基百科会帮助你:)
  • @Raptor 算法处于数学和计算机科学的边界,不是吗?如果所有的算法问题在这里都是题外话,为什么我们首先要有标签?
  • @Raptor 不要以常见问题解答为借口不了解公认的网站实践。此外,明确指出“软件算法”是主题。

标签: algorithm sorting math


【解决方案1】:

您可以尝试的一种方法是考虑一个函数 g,它计算序列中两个相邻元素未正确连接的所有位置。

所以在你原来的例子中,目标是:

Start (+B-) (+C-) (-D+) (+E-) (+A-) End

我们考虑原始序列中的每一对元素:

Start (+A-) (-B+) (+C-) (-D+) (+E-) End ->
Start (+A-) Incorrect because Start should be followed by +B
(+A-) (-B+) Incorrect because A- should be followed by End
(-B+) (+C-) Incorrect because B+ should be followed by Start
(+C-) (-D+) Correct
(-D+) (+E-) Correct
(+E-) End   Incorrect because E- should be followed by +A

所以这有 4 分不正确。

每当你反转一个子字符串时,你最多改变 2 个相邻元素的状态,所以分数最多会减少 2。

在您的示例中,我们有:

第 0 步。x (+A-) x (-B+) x (+C-) (-D+) (+E-) x 得分 4

步骤 1. (+B-) x (-A+) x (+C-) (-D+) (+E-) x 得分 3

第 2 步。(+B-) x (-A+) (-E+) (+D-) (-C+) x 得分 2

第 3 步。 (+B-) (+C-) (-D+) (+E-) (+A-) 得分 0

由于原始分数为 4,我们确定至少需要 2 次交换(因为分数最多可以每步减少 2),而您的解决方案使用 3,因此我们只需要检查替代方案,其中为了排除更好的解决方案,每一步得分减少 2。

有一种众所周知的算法可以进行这种类型的搜索,称为A star search

对于这种类型的搜索,您需要一个可接受的启发式算法,该算法永远不会高估到目标的距离。我建议您尝试使用 0.5*g 给出的启发式方法来解决您的问题。

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2017-04-23
    • 2022-01-21
    • 1970-01-01
    • 2019-01-04
    • 2022-10-09
    相关资源
    最近更新 更多