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

时间:2018-10-25 13:05:51

标签: python constraints permutation itertools

我最有可能列出数字(1到30)。我需要这样排列列表,使得两个连续元素之间的绝对差不超过2或3或4,并且所有连续元素的绝对差之和最小。

我尝试生成列表的所有可能排列,范围从10到11,然后根据成本值对它们进行排序,但是对于大型nmber,它花费的时间太长。 列出30个号码可能要花很多时间。

在生成排列本身时,有什么方法可以执行约束?

当前,我正在使用itertools库(用于python)来生成排列。

非常感谢任何帮助! 谢谢

编辑1:这是我在10和12之类的小数字上得到的结果。

排列数组->成本(成本是两个连续元素之间的绝对差之和)

  1. 输入10个数字

    [1、3、5、2、4、6、8、10、7、9] 20

    [2、4、1、3、5、7、9、6、8、10] 20

  2. 用于12。

    [1、3、5、2、4、6、8、11、9、7、10、12] 25

    [1、3、5、7、10、12、9、11、8、6、4、2] 25

我需要安排30个这样的数字,其中2 <=差异<= 4并且总成本最小。

1 个答案:

答案 0 :(得分:0)

不可能计算大小为30的列表的所有排列,而与实现方法无关,因为总共会有30个!排列。

在我看来,您可以通过使用arr.sort()对给定列表进行排序,然后计算连续元素之间的差来简单地实现所需的排列。我想念什么吗?