python 生成具有约束的大量排列(可能为30)

jljoyd4f  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(148)

我有一个最可能的数字列表(1到30)。我需要以这样一种方式排列列表,即两个连续元素之间的绝对差不超过2或3或4,并且所有连续元素的绝对差之和最小。
我试着生成列表的所有可能排列,最大范围是10和11,然后根据成本值对它们进行排序,但对于大的数字来说,这太耗时了。要得到30个数字的列表需要很长时间。
有没有什么方法可以在生成排列本身的同时执行约束?
目前,我正在使用itertools库为python生成排列。
任何帮助都是非常感谢的!谢谢
编辑1:下面是我对10和12这样的小数字得出的结果。
Arranged Array -〉Cost(成本是两个连续元素之间的绝对差之和)
1.对于10个号码
[第一、三、五、二、四、六、八、十、七、九号]
[二、四、一、三、五、七、九、六、八、十]

  1. 12个。
    [一、三、五、二、四、六、八、十一、九、七、十、十二]
    [第一、三、五、七、十、十二、九、十一、八、六、四、二号]
    我需要安排30个这样的数字,其中2〈=差〈= 4,并且总成本最小。
8ehkhllq

8ehkhllq1#

计算大小为30的列表的所有排列是不可能的,不管实现方法如何,因为将存在总共30个排列。
在我看来,你所需要的排列可以简单地通过使用arr.sort()对给定的列表进行排序,然后计算连续元素之间的差异来实现。我是否遗漏了什么?

相关问题