我有一对像
这样的对[[4,1],[1,2],[2,3]]
我们的想法是对它们进行排序,以便第一个节点的第二个索引与第二个节点的第一个匹配。在该示例中,列表已排序。假设列表始终可以唯一地放入此表单中。该列表永远不会循环。
现在,如果有可能,我想要一个比较器compare
,它可以通过以下方式获得此表格:
x = [[4,1],[1,2],[2,3]]
x.sort(compare)
假设函数compare
返回对应于“更大”和“更小”的两个值中的一个。这是否可能,如果是,它是否依赖于排序算法。
如果不可能,是否可以通过两次传球(可能使用不同的比较器)或任何固定的次数。
我在python中写过这个,但我的问题不是具体的。
答案 0 :(得分:8)
一次通过是不可能的,因为您想要的顺序不是strict partial order。具体来说,为了使比较器工作,它需要遵守几个属性:
在您的情况下,所有这三个属性都被违反:
更好的问题建模方法是尝试通过图表查找Eulerian path。 Eulerian路径是一种跟踪一系列链接的方式,因此您永远不会回溯链接,以便跟踪所有链接。 (如果你曾经有过那些“画这个数字而不用回线或捡起你的铅笔”的谜题,那就是同样的想法。)在你的情况下,链接是对[a,b]和通过它们的链与欧拉路径相同。幸运的是,there are many good, efficient algorithms for finding Eulerian paths,我认为它们正是您在此背景下所寻找的。 p>
希望这有帮助!