python - 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)。
解决方案
我不知道你是否有计算机科学背景,但你所描述的就是旅行推销员问题。
您提出的解决方案是“蛮力”算法,并且不会扩展到超过几个点。有更有效的替代算法。如果您需要计算确切的最优值,请查看Exact Algorithms
链接文章中的部分。如果一个好的解决方案“足够好”,您还可以使用启发式方法来缩短执行时间。
推荐阅读
- ios - iOS频繁约束常量更新导致帧率下降
- mongodb - 如何在脚本文件中指定 mongodb shell 类型的类型?
- reactjs - Firebase recaptcha 容器为空且没有错误
- fortran - 调用函数或子程序
- google-maps - 为什么我在flutter_web中更新HtmlView时得到_state!= _PlatformViewState.disposed不是真正的异常?
- bash - 这个脚本中的“${psql[@]}”是什么意思?
- c# - 阅读嵌入在 PDF 中的文本?
- junit - junit5 并行执行不能通过 ConsoleLauncher 工作
- javascript - 为外观和感觉像地点的自定义标记添加标签
- javascript - 如何在具有特定 URL 的所有页面上进行更改