我有一个整数的范围
big_list = [1, 2, ..., 100]
我需要找到这个范围内所有固定长度的数字子集,它们的平均值在k=50(比如45-55)以内,k=5。e、 我们有一个固定尺寸的6个,平均50个左右
sample = [71, 20, 23, 99, 25, 60]
问题是列表必须是唯一的,没有重复的数字。你知道吗
顺序不重要,所以[71,20,23,99,25,60]和[20,71,23,99,25,60]只是一个组合。你知道吗
我在考虑使用itertools生成所有的组合,并根据我的标准进行筛选。但运行时间将非常糟糕,因为大的数字列表可能从10号到400号不等。你知道吗
如何使用上述条件生成一组列表
秩序是微不足道的。你知道吗
只要用
i-th
数大于(i-1)-th
的约束来安排就行了。在下面的算法中,您通过将left
增加1来递归要得到介于45和55之间的平均值,请考虑递归公式
在进一步的评论之后,op对上面的组合一点也不感兴趣,而是对所有组合中不能出现两次数字的组合感兴趣
algo可以简化为非常基本的算法:
可以对生成器使用递归:
当然,正如@japreis所指出的,这个问题将产生非常糟糕的最坏情况时间复杂性。不过,一种可能的解决方法是将
combo
视为迭代器池,只需根据需要在代码的其他地方访问生成的组合。例如,要访问前100个结果:输出:
相关问题 更多 >
编程相关推荐