给定交换距离定义为问题Counting the adjacent swaps required to convert one permutation into another(即我们有一串字符,并且与该字符串的排列的交换距离是返回所需的“相邻字符交换”的最小数量到原始字符串)。
我想要一个算法来找到给定字符串的最高可能交换距离。当然,我们可以枚举所有排列并检查每个排列的交换距离,但这非常低效。有更快的方法吗?
答案 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"
这不是一个完整的方法,但也许这是一个有用的方向。