【发布时间】: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 不要以常见问题解答为借口不了解公认的网站实践。此外,明确指出“软件算法”是主题。