确定函数的大O复杂性

时间:2016-03-15 05:12:44

标签: python function variables time-complexity

我的功能的大O复杂性是什么,O(n)?

def f(n):
    def g(m):
        m = 0
        for i in range(m):
            print m
    for i in range(n):
        g(n)

1 个答案:

答案 0 :(得分:0)

时间复杂度为O(n),因为m在第3行设置为0g(m)中的for循环从不运行。

如果评论第3行,即

def f(n):
    def g(m):
        # m = 0
        for i in range(m):
            print m
    for i in range(n):
        g(n)

时间复杂度为O(n ^ 2),因为print m中的g(m)将运行m次,g(n)运行n次。时间复杂度为O(n m)。这里m = n,所以O(n m)= O(n ^ 2)。

如果评论第3行并修改从g(n)g(i)的最后一行,即

def f(n):
    def g(m):
        # m = 0
        for i in range(m):
            print m
    for i in range(n):
        g(i)

时间复杂度为O(n *(n-1)/ 2)= O(n ^ 2)。调用g(i)时很容易找到,print m会运行i次。因此,g(0), g(1), ... , g(n-1)的总和运行时间为0 + 1 + ... + n-1 = n(n-1)/2,因此时间复杂度为O(n *(n-1)/ 2)= O(n ^ 2)。