是否有一种有效的算法来查找具有最差交换距离的给定字符串的排列?

时间:2016-05-08 01:21:19

标签: string algorithm permutation swap

给定交换距离定义为问题Counting the adjacent swaps required to convert one permutation into another(即我们有一串字符,并且与该字符串的排列的交换距离是返回所需的“相邻字符交换”的最小数量到原始字符串)。

我想要一个算法来找到给定字符串的最高可能交换距离。当然,我们可以枚举所有排列并检查每个排列的交换距离,但这非常低效。有更快的方法吗?

2 个答案:

答案 0 :(得分:1)

您允许执行的基本操作是交换字符串的两个元素。这也是您在insertion sort中允许执行的唯一操作,因此您似乎可以从排序文献中获取完善的结果来解决问题。

根据插入排序的wiki页面,最坏的情况是输入顺序相反。通过相同的逻辑,反转目标字符串应该产生一个字符串,该字符串与交换距离离目标最远。

一篇题为"关于为插入排序生成最坏情况的论文" (link)可能会有所帮助。

答案 1 :(得分:1)

如果字母不同,我们有一个简单的场景,即序列中较高位置的字母与更多可能无序的字母相关联:

"abcde":
'e' can be out of order with 4 letters, 'd' with 3, etc.
"edcba", the reversed string, is the worst case where each letter is at max disorder

但是当存在重复时,位于较高位置的字母只能与先前不同的字母无序排列:

"abbaba":
a3 max 3, b3 max 2
a2 max 2, b2 max 1
a1 max 0, b1 max 1
"aaabbb"

"aba"
a2 max 1, b1 max 1
a1 max 0
"aab" or "baa"

这不是一个完整的方法,但也许这是一个有用的方向。