【问题标题】:Minimum number of adjacent swaps相邻掉期的最小数量
【发布时间】:2013-03-01 19:47:45
【问题描述】:

这是网上笔试的题目之一。

编号为 (1...N) 的书籍已到达仓库。

如果书“i”仅出现在书“i+1”的左侧(对于所有 i,1

收到的书是随机顺序的。现在你的任务是找出实现上述最佳排列所需的最少移动次数。

请注意,唯一有效的移动是选择一对相邻的书并让它们交换位置。

例如,如果书籍最初的顺序是 3 5 4 2 1

解决办法可以

一个。先交换第二对书:{ result : 3 4 5 2 1 }

b.交换最右边的一对:{ result : 3 4 5 1 2 }

因此,在 2 步中我们实现了最佳安排。

我尝试过但无法找到解决方案。首先我将数组分成两个数组,然后我将对两个数组应用插入排序,但这也不起作用。 请帮我找出这个问题的算法。

【问题讨论】:

标签: arrays algorithm


【解决方案1】:

N,1 可以是序列中的任何位置。例如 1..5,可以是 3,4,5,1,2。所以第一个数字可能是 1..5,即 5 倍于 Previous question。所以,你必须做5次。使用具有可替换比较功能的排序算法。

所以对于第 3 次测试,比较将是:-

// returns <0, 0 or >0
int compare(a,b){
     return ((b+N-3)%N) - ((a+N-3)%N);
}

【讨论】:

  • 如果你想正确地做到这一点,那么谷歌“通过有界转置对循环排列进行排序”,这是生物信息学和计算生物学中当前的一个研究问题,但论文有点先进。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
相关资源
最近更新 更多