检查代码的时间复杂度

时间:2014-03-23 19:13:00

标签: python time-complexity

def sort_list(lst):
    result = []
    result.append(lst[0])
    for i in range(1,len(lst)):
        insert_list(lst[i], result)
    return result

def insert_list(x, lst):
    a = search(x, lst)
    lst.insert(a, x)
    return lst

def search(x, seq):
    for i in seq: 
        if x<i:
            return seq.index(i)
        elif x == i:
            return seq.index(i)
        elif x>seq[-1]:
            return (seq.index(seq[-1]))+1

此代码的时间复杂度是否为O(n)?

2 个答案:

答案 0 :(得分:0)

取决于'insert_list'的复杂性。在这种情况下,由于insert_list在for循环中,复杂性将是n *(insert_list的复杂性)。

答案 1 :(得分:0)

如果循环花费n个单位时间,因为列表中有n个元素,每个剩余步骤有一个单位时间。总时间为1 + 1 + n *(insert_list的时间)+1 = n *(insert_list的时间)+3。

同样,时间复杂度还取决于insert_list步骤。

考虑这一步,

  

a = search(x,lst)

它有两个部分,搜索和分配。 让我们进行线性搜索。它的时间复杂度是O(n)。 所以对于insert_list函数所用的时间是(搜索)+(赋值)+(插入)= n + 1 + 1 = n + 2

所以总时间= n *(n + 2)+3 = n ^ 2 + 2n + 3

由于O(n)是渐近符号,因此n被视为非常大的值。在那种情况下,可以省略2n和3。所以时间复杂度是O(n ^ 2),这是多项式时间复杂度