Python 大(O)符号 2. 3.

Python 大(O)符号 2. 3.,python,performance,runtime,time-complexity,big-o,Python,Performance,Runtime,Time Complexity,Big O,我正在学习大O符号。我希望得到上述代码的正确答案。因此,对于第一个问题,我认为它是nlog(n),因为它有a.sort(),即nlog(n),还有for循环,即n。我对这个问题的回答是n+nlog(n)。既然如此小的数字被放弃了,我想说它是nlog(n) 对于问题2,我想说它也是n+log(n)(nlog(n)froma.sort和nfrom For loop)。因此,最终答案与Q1相同nlog(n) 对于问题3,我会说它是nlog(n)+2n(nlog(n)froma.sort和2nfrom

我正在学习大O符号。我希望得到上述代码的正确答案。因此,对于第一个问题,我认为它是
nlog(n)
,因为它有
a.sort()
,即
nlog(n)
,还有for循环,即
n
。我对这个问题的回答是
n+nlog(n)
。既然如此小的数字被放弃了,我想说它是
nlog(n)

对于问题2,我想说它也是
n+log(n)
nlog(n)
from
a.sort
n
from For loop)。因此,最终答案与Q1相同<代码>nlog(n)

对于问题3,我会说它是
nlog(n)+2n
nlog(n)
from
a.sort
2n
from For循环)


我能接受这个逻辑吗?如果没有,谁能解释一下如何分析这些代码吗?

对于问题2,
a.reverse()
的时间复杂度为
O(n)
。它不会影响最终的答案,但只是一些需要实现的东西。
a.sort()
然后
a.reverse()
是愚蠢的。最好这样做:
a.sort(reverse=True)
nlog(n)+2n是
n*(log(n)+2)
因此
O(nlog(n))
。它可能会慢一些,但比率是相同的:当n增加时,计算时间以相同的方式增加。
def largest_34(a:list):

    a.sort()
    m1, m2, m3, m4 = a[3], a[2], a[1], a[0]

    for i in a[4:]:
        if i > m1:
            m4 = m3
            m3 = m2
            m2 = m1
            m1 = i           

    return m3+m4
def largest_third(a:list):

    n = len(a)//3
    a.sort()
    a.reverse()
    sum_n = 0

    for i in range(n):
        sum_n += a[i]

    return sum_n
def third_at_least(a:list):
    L2 = []
    a.sort()
    MatchNum = (len(a)//3 + 1)
    Return_Val_in_List = []
    for i in range(len(a)):
        if (i == len(a)-1):
            CountNum = (a[i], a.count(a[i]))
            L2.append(CountNum)     

        elif a[i] != a[i+1] and i != (len(a)-1):
            CountNum = (a[i], a.count(a[i]))
            L2.append(CountNum)

    for j in range(len(L2)):
        if L2[j][1] >= MatchNum:
                Return_Val_in_List.append(L2[j][0])

    if Return_Val_in_List == []:
        return None
    else:
        return Return_Val_in_List