【发布时间】:2020-07-29 19:43:55
【问题描述】:
我有一组浮点值,我需要所有可能的排列,它们加在一起会产生一个特定的数字。此外,我需要所有排列恰好包含八个值。
因此,例如,我有以下一组值:
[0.5, 0.8, 1, 1.5, 2, 2.5, 3, 5, 7.5, 10, 12.5, 15, 17.5, 20, 25, 30]
我需要得到 8 个元素的所有排列,加起来为 20。
有效的代码如下:
N = [0.5, 0.8, 1, 1.5, 2, 2.5, 3, 5, 7.5, 10, 12.5, 15, 17.5, 20, 25, 30]
target = 20
accum = 0
for i1 in N:
accum += i1
for i2 in N:
accum += i2
for i3 in N:
accum += i3
for i4 in N:
accum += i4
for i5 in N:
accum += i5
for i6 in N:
accum += i6
for i7 in N:
accum += i7
for i8 in N:
accum += i8
if accum > target:
accum -= i8
break
elif accum == target:
print(i1, i2, i3, i4, i5, i6, i7, i8)
accum -= i8
break
accum -= i8
accum -= i7
accum -= i6
accum -= i5
accum -= i4
accum -= i3
accum -= i2
accum -= i1
其中一些结果是这样给出的:
0.5 0.5 0.5 0.5 0.5 0.5 2 15 0.5 0.5 0.5 0.5 0.5 0.5 15 2 0.5 0.5 0.5 0.5 0.5 1.5 1 15 0.5 0.5 0.5 0.5 0.5 1.5 15 1 0.5 0.5 0.5 0.5 0.5 2 0.5 15 0.5 0.5 0.5 0.5 0.5 2 3 12.5 0.5 0.5 0.5 0.5 0.5 2 12.5 3 0.5 0.5 0.5 0.5 0.5 2 15 0.5 0.5 0.5 0.5 0.5 0.5 2.5 2.5 12.5 0.5 0.5 0.5 0.5 0.5 2.5 5 10 0.5 0.5 0.5 0.5 0.5 2.5 7.5 7.5 0.5 0.5 0.5 0.5 0.5 2.5 10 5 0.5 0.5 0.5 0.5 0.5 2.5 12.5 2.5 0.5 0.5 0.5 0.5 0.5 3 2 12.5
我可以稍后使用 excel 过滤结果。我不需要复杂的代码,我只需要最终的结果集。可以看出,这段代码效率极低,因为它需要大量的时间来处理,并且还会给出大量的重复值。我没有深厚的编程知识,但我知道递归方法效率更高。我怎样才能得到我需要的结果?
【问题讨论】:
标签: python recursion permutation