我得到了以下代码,并被告知函子函数的Big O是Big O(n ^ 2)。我相信它是Big O(n),因为它应该是Big O(n + n),对吗?
what is Big O of following func?
nums = list(range(1, 11))
K = 4
def func(nums: list, K:int):
i, end = 0, len(nums)
res = []
x = []
while i < end:
res.append(nums[i:i+K])
i += K
for i in res:
x += i[::-1]
return x
func(nums, K)
答案 0 :(得分:1)
该函数为O(n)。第一个while循环迭代少于n
次,因为它的上限是n
(end
),并且每次迭代计数器都增加1以上。
for循环遍历res
的子集nums
。由于它是一个子集,因此不会重复n
次以上,使其成为O(n)。
O(n)+ O(n)= O(n),所以您的评估是正确的。
答案 1 :(得分:0)
实际上,此函数的大O为O(n)。假设代码格式正确。
res
上的循环仍然具有线性运行时间。在任何情况下,都不会在第一个循环中将足够多的元素添加到res
中,以使第二个循环的大O值为O(n ^ 2)。