【发布时间】:2019-04-09 22:41:57
【问题描述】:
我正在开发的应用程序中遇到以下问题:
我得到了两个列表:
list1 = { Z, K, A, B, A, C }
list2 = { A, A, B, C, K, Z }
list2 保证是list1 的排序版本。
我的目标是对list1 仅通过交换list1 中的元素 进行排序。例如,我不能遍历list2 并简单地将list1 中的每个元素i 分配给list2 中的每个元素j。
使用list2 作为资源,我需要在可能的绝对最小交换次数中对list1 进行排序。
是否有专门用于此目的的算法集?我没听说过这样的事情。
【问题讨论】:
-
@WillemVanOnsem 那将是
O(n!),对吗?对于list1的每个索引,您需要对应该进入该索引的元素执行线性搜索吗?还有比这更好的吗? -
不,在搜索中它是 O(n^2),但是如果我们可以制作额外的数据结构等,甚至可以最小化。对于每个项目,我们在尾部执行“线性搜索”。
-
“在[你]正在开发的应用程序中”?你确定这不是作业或编程竞赛的问题吗?在现实世界中,您不会关心 99.9999% 情况下的绝对最小交换次数,您可能只会根据第二个列表中的索引运行正常排序。
-
@Hatefiend 那么你的手上可能有an XY problem。