【问题标题】:Minimum number of swaps to sort a list of triangles对三角形列表进行排序的最小交换次数
【发布时间】:2015-02-18 03:45:03
【问题描述】:

L = list of S's where S = list of lengths of sides of a triangle.

然后,我需要找到对列表 L 进行排序所需的最小交换次数。

列表 L 是有序的:

  1. 如果每个 S 列表中的元素按非降序排序并且
  2. 如果每个 S 列表的第 i 个索引处的元素按非降序排序。

在哪里0 <= i <= 2

注意:可以进行两种交换操作:

  • S 列表中的任何一个元素都可以交换(需要 1 次交换)
  • 可以交换两个完整的 S 列表而不改变元素的顺序。 (需要 3 次交换)

在时间复杂度方面是否有任何有效的算法来找到对列表 L 进行排序所需的最小交换次数尽可能

编辑:

正如@Mbo 正确指出的那样,并非总是可以对这样的列表 L 进行排序。因此,如果有人提供一种算法来检查列表 L 是否可以排序,然后再排序,那就太好了可能。

【问题讨论】:

  • 看来1)和2)条件差不多。你会指定更好吗?
  • @MBo In 1) 我说的是 S1、S2、... 的 Sj 列表中的元素...假设,如果 S1 = [a, b, c],那么 a,b,c 应该处于非decr顺序。 2)我说的是每个Sj列表的对应元素如S1[0]、S2[0]、S3[0]...应该按非降序排序。
  • 一般情况下是不可能的。考虑 (4,7,10) 和 (5,6,7)
  • 那么,您基本上是在寻找一种算法来对 3xN 矩阵进行排序,以使所有行和所有列都不递减?正如 MBo 所指出的,我认为这并不总是可能的。
  • 是的,我同意。请看我的编辑。

标签: algorithm sorting time-complexity


【解决方案1】:

也许我理解错了,但在我看来,您必须对每个 S 中的 3 个元素进行排序。完成后,只需按照列表 {S0[0],S1 的顺序对三元组进行排序即可[0]...},然后检查序列 {S0[1], S1[1].....}, {S0[2], S1[2]..} 是否按升序排列。如果你有 n 个三角形,渐近最坏情况复杂度将是 O(n)

【讨论】:

  • 这不能回答问题。他不是要问如何进行排序,而是要计算给定特定三角形排列所需的最小交换次数。那么对单个三角形的边进行排序需要多少次交换,然后对三角形列表进行排序需要多少次交换。也就是说,完美排序算法将进行的理论最小交换次数。
猜你喜欢
  • 2013-02-15
  • 2019-08-08
  • 2015-01-06
  • 1970-01-01
  • 2021-06-26
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多