我一直在学习python,这是我对NP完全问题(例如子集产品)的爱好和经验研究。我有算法,但是并没有按照我打算的方式进行。
我想做的是combinations一旦itertools 到达输入变量的子集,就停止它target。这会稍微加快代码的速度。该代码处于抛光阶段,因此有不必要的列表res_2
这是循环。
res_2 = [];
for i in range(1, len(s)+1):
var = (findsubsets(s, i))
kk = list(map(numpy.prod, var))
res_2.append(kk)
if target in kk:
print('yes')
print(var)
break
Run Code Online (Sandbox Code Playgroud)
这是我不需要的输出。请注意,脚本不会在(4,4)处停止。一旦目标被“击中”,继续检查所有组合是浪费资源的。
Enter numbers WITH SPACES: 4 4 3 12
enter target integer:
16
yes
[(4, 4), (4, 3), (4, 12), (4, 3), (4, 12), (3, 12)]
? kk
[16, 12, 48, 12, 48, 36]
Run Code Online (Sandbox Code Playgroud)
我的预期输出是在第一个“命中”处停止在(4,4)。对于其他任何子集,例如(1,2,3)或(1,2,3 ---任意长度),也是如此。我希望脚本继续执行直到找到匹配为止。一旦找到命中,它将停止,因为这将提高算法的速度。
# Naive Subset-Product solver
# with python's itertools
import itertools …Run Code Online (Sandbox Code Playgroud)