如何用while + for循环计算Big O

时间:2019-04-04 14:49:03

标签: python python-3.x

我得到了以下代码,并被告知函子函数的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)

2 个答案:

答案 0 :(得分:1)

该函数为O(n)。第一个while循环迭代少于n次,因为它的上限是nend),并且每次迭代计数器都增加1以上。

for循环遍历res的子集nums。由于它是一个子集,因此不会重复n次以上,使其成为O(n)。

O(n)+ O(n)= O(n),所以您的评估是正确的。

答案 1 :(得分:0)

实际上,此函数的大O为O(n)。假设代码格式正确。

res上的循环仍然具有线性运行时间。在任何情况下,都不会在第一个循环中将足够多的元素添加到res中,以使第二个循环的大O值为O(n ^ 2)。