【发布时间】:2022-09-22 23:57:13
【问题描述】:
我一直在研究 DSA 问题,并且一直在尝试计算我的解决方案的时间和空间复杂度。我觉得大多数解决方案都可以,但是有很多解决方案,比如下面的解决方案,让我很难过。
while paymentTotal <= k:
temp = heapq.heappop(heap)
if paymentTotal + temp > k:
break
paymentTotal += temp
toyCount += 1
在这种情况下,循环似乎可以分解成这样(堆是一个包含随机整数的 minHeap。k 也是一个随机整数):
k = n
p = 0
while p <= k:
t = heap.heapqpop(heap)
p += t
所以这意味着循环在 p+t <= k 时运行,但是因为 t 不会以一致的方式递增 p 并且 k 是随机的,所以我很难概念化这个时间复杂度。循环运行的次数显然会根据 k 是什么以及从堆中弹出的整数而变化,但我不知道如何用数学和大 O 来表达这一点。
-
想想最坏的情况,弹出的值始终为 1(假设不可能为零)。
-
这是否意味着最坏的情况将是 O(n),因为它必须运行 k+1 次?
标签: python time-complexity big-o