我最有可能列出数字(1到30)。我需要这样排列列表,使得两个连续元素之间的绝对差不超过2或3或4,并且所有连续元素的绝对差之和最小。
我尝试生成列表的所有可能排列,范围从10到11,然后根据成本值对它们进行排序,但是对于大型nmber,它花费的时间太长。 列出30个号码可能要花很多时间。
在生成排列本身时,有什么方法可以执行约束?
当前,我正在使用itertools库(用于python)来生成排列。
非常感谢任何帮助! 谢谢
编辑1:这是我在10和12之类的小数字上得到的结果。
排列数组->成本(成本是两个连续元素之间的绝对差之和)
输入10个数字
[1、3、5、2、4、6、8、10、7、9] 20
[2、4、1、3、5、7、9、6、8、10] 20
用于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并且总成本最小。
答案 0 :(得分:0)
不可能计算大小为30的列表的所有排列,而与实现方法无关,因为总共会有30个!排列。
在我看来,您可以通过使用arr.sort()
对给定列表进行排序,然后计算连续元素之间的差来简单地实现所需的排列。我想念什么吗?