gpt4 book ai didi

algorithm - 子集和枚举的时间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:48 24 4
gpt4 key购买 nike

通常,在处理组合时,Big-O 复杂度似乎是O(n choose k)。在此算法中,我在数组中生成与目标总和匹配的所有组合:

def combos(candidates,start, target):
if target == 0:
return [[]]
res = []
for i in range(start,len(candidates)):
for c in combos(candidates, i+1, target-candidates[i]):
res.append([candidates[i]]+ c)
return res


print combos([2,1,10,5,6,4], 10)
# [[1, 5, 4], [10], [6, 4]]

我在这里很难确定 Big-O,这是一个 O(n choose t) 算法吗?如果不是,那是什么以及为什么?

最佳答案

如果重点是根据集合大小给出最差的复杂度,n,那么它是Θ(2n)。给定任何集合,如果目标总和足够大,您将最终枚举该集合的所有可能子集。这是 Θ(2n),可以通过两种方式看出:

  • 每一项都可以选择,也可以不选择。

  • 这是您的 Θ(n 选择 k),只是对所有 k 求和。


更精确的边界将同时考虑 n 和目标总和 t。在这种情况下,按照上面第 2 点的推理,如果所有元素(和目标总和)都是正整数,那么复杂度将为 Θ(n choose k) 的总和 k 总计最多为 t

关于algorithm - 子集和枚举的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com