所以,假设我有一个列表:[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]。如果我们将其移位1,则得到[3,1,2]。再次执行此操作,我们得到[2,3,1]。
(第2组)如果我们看一下排列[1、3、2]并将其移动一个,则得出[2、1、3]。再多一个,我们得到[3,2,1]。
这两个排列组均构成列表的排列。
我的问题是,是否可以利用它来制作比itertools中的排列更快的排列生成器。
我不介意每个组获得哪种列表排列,但是我想减少花费在生成排列上的时间。
(注意:我知道如果列表中只有3个项目,这将不会有用,但是列表的大小可以是25或100之类的各种数字。)
答案 0 :(得分:0)
我不知道您是否具有计算机科学背景,但是您所描述的称为Travelling Salesman Problem。
您提出的解决方案是“蛮力”算法,并且不会扩展到超过两点。有其他更有效的算法。如果需要计算确切的最优值,请查看链接文章中的Exact Algorithms
部分。如果一个好的解决方案“足够好”,您还可以使用启发式方法来缩短执行时间。