所以我用两种不同的方法解决了Subset Sum。在第一个我使用回溯for循环方法,在第二个我使用回溯技术没有forloop。 我已经尝试了几个随机测试,并且带有forloop的版本执行版本而没有它一致。这违背了我的直觉和我使用大师定理的分析。
有人可以解释为什么我的forloop版本更快。我错过了什么?
def subset_sum_loop(idx , nums , sub_size , target , sum , cur):
global S_res
if sub_size == 0 and sum == target:
S_res = True
N = len(nums)
for i in range(idx , N):
if sum + nums[i] <= target:
sum += nums[i]
cur.append(nums[i])
subset_sum_loop(i + 1 , nums , sub_size - 1 , target , sum, cur)
sum -= nums[i]
cur.pop()
return S_res
def sub_sum_solo(idx , nums , sub_size, target , sum , cur):
global S_res
N = len(nums)
if sub_size == 0 and target == sum:
S_res = True
return
if idx >= N:
return
if sum + nums[idx] <= target:
cur.append(nums[idx])
sum += nums[idx]
sub_sum_solo(idx + 1 , nums , sub_size - 1 , target , sum, cur)
sum -= nums[idx]
cur.pop()
sub_sum_solo(idx + 1 , nums , sub_size , target , sum, cur)
return S_res