我有一个最可能的数字列表(1到30)。我需要以这样一种方式排列列表,即两个连续元素之间的绝对差不超过2或3或4,并且所有连续元素的绝对差之和最小。
我试着生成列表的所有可能排列,最大范围是10和11,然后根据成本值对它们进行排序,但对于大的数字来说,这太耗时了。要得到30个数字的列表需要很长时间。
有没有什么方法可以在生成排列本身的同时执行约束?
目前,我正在使用itertools库为python生成排列。
任何帮助都是非常感谢的!谢谢
编辑1:下面是我对10和12这样的小数字得出的结果。
Arranged Array -〉Cost(成本是两个连续元素之间的绝对差之和)
1.对于10个号码
[第一、三、五、二、四、六、八、十、七、九号]
[二、四、一、三、五、七、九、六、八、十]
- 12个。
[一、三、五、二、四、六、八、十一、九、七、十、十二]
[第一、三、五、七、十、十二、九、十一、八、六、四、二号]
我需要安排30个这样的数字,其中2〈=差〈= 4,并且总成本最小。
1条答案
按热度按时间8ehkhllq1#
计算大小为30的列表的所有排列是不可能的,不管实现方法如何,因为将存在总共30个排列。
在我看来,你所需要的排列可以简单地通过使用
arr.sort()
对给定的列表进行排序,然后计算连续元素之间的差异来实现。我是否遗漏了什么?