首页 > 解决方案 > Python中列表的排列没有移位排列

问题描述

所以,假设我有一个列表: [1, 2, 3]

这样一个列表的排列将是 [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2] 和 [ 3、2、1]

(第 1 组)但是,假设我们看一下排列 [1, 2, 3]。如果我们将它移一位,我们得到 [3, 1, 2]。再次这样做,我们得到 [2, 3, 1]。

(第 2 组)如果我们查看排列 [1, 3, 2] 并将其移一位,我们得到 [2, 1, 3]。再一次,我们得到 [3, 2, 1]。

这两个排列组构成了列表的排列。

我的问题是,是否可以利用它来制作比来自 itertools 的排列更快的排列生成器。

我不介意我为每个组获得哪种列表排列,但我想减少生成排列所花费的时间。

(注意:我知道如果列表只有三个项目,这将没有用,但列表可以是各种大小,如 25 或 100)。

标签: pythonpermutation

解决方案


我不知道你是否有计算机科学背景,但你所描述的就是旅行推销员问题

您提出的解决方案是“蛮力”算法,并且不会扩展到超过几个点。有更有效的替代算法。如果您需要计算确切的最优值,请查看Exact Algorithms链接文章中的部分。如果一个好的解决方案“足够好”,您还可以使用启发式方法来缩短执行时间。


推荐阅读