【发布时间】:2015-02-18 03:45:03
【问题描述】:
让L = list of S's where S = list of lengths of sides of a triangle.
然后,我需要找到对列表 L 进行排序所需的最小交换次数。
列表 L 是有序的:
- 如果每个 S 列表中的元素按非降序排序并且
- 如果每个 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