使用for循环和without循环求解子集和。为什么for循环的版本更快?

时间:2017-02-21 00:32:50

标签: python runtime code-analysis subset-sum

所以我用两种不同的方法解决了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

0 个答案:

没有答案