【发布时间】:2020-08-03 10:55:36
【问题描述】:
下面的代码的复杂度是多少?
在我看来,应该是O(N).
即使我们在 python 中采用 O(K) 的 for 循环中进行了数组切片,但它始终会运行恒定时间,即等于 pairLength。例如,如果字符串的长度,即st 是 6,pairLength 是 3,那么它将运行的总数是 6*3=12times。同样,如果我们有大小为 12 的 st,它将运行 36 次。这是混淆之处,我们也可以将其称为O(N*M),但 M 始终是恒定的(一旦设置,即 pairLength),因此我们可以将其视为O(N)。对吗?
编辑:让我们假设pairLength 是常数并且一直是3。那么复杂度会是O(N)吗?
def writeAllCombinations(st, pairLength):
for i in range((len(st)-pairLength)+1):
print(st[i:i+pairLength]) # could also be done using inner loops and concat
# calling function
writeAllCombinations("HelloWorld", 3)
【问题讨论】:
-
你的例子中的 N 是什么?
-
pairLength是一个参数,而不是一个常数。 -
字符串 (st) 的长度或将大致运行 len(st) 次的循环。
-
@user2357112supportsMonica:我们假设 pairLength 不是一个参数,它一直是 3。那么复杂度会是 O(N) 吗?
标签: python algorithm performance time-complexity slice