大O,我怎么算呢?

Big O, how i can calculate it?

我正在做一个算法,我必须做 Big O,但我不知道怎么做,有人可以帮助我吗?代码是这样的。 我添加了时间库,可以看到算法中的执行时间,但是我不太清楚如何计算Big O

import time
arre=[1, 3, 2, 4, 5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
m=2
sumatoria=sum(arre)
cantidad=sumatoria/m
arre.sort(reverse=True)
arreglo=[]
arrAuxiliar=arre.copy()
definitivo = []

if sumatoria % m==0:
    for idx in range(m):
        if arre[idx] == cantidad:
            aux=[arre[idx]]
            definitivo.append(aux)
            arrAuxiliar.remove(arre[idx])
        else:
            arreglo.clear()
            arreglo.append(arre[idx])
            arrAuxiliar.remove(arre[idx])
            if cantidad-arre[idx] in arrAuxiliar:
                numero=arre[arre.index(cantidad-arre[idx])]
                arreglo.append(numero)
                arrAuxiliar.remove(numero)
            else:
                if idx==m-1:
                    arreglo+=arrAuxiliar
            definitivo.append(arreglo.copy())

print(definitivo)
print("El tiempo de ejecucion es: ", time.time())

Big-O 是一种用于计算算法复杂度的符号,它不能以这种方式计算,像 O(1) 这样的算法的复杂度是当您应用公式来解决问题时,当你使用 O(n) 时是你使用循环时,O(n^2) 是当你使用嵌套循环时,但它不能那样计算。您必须避免使用带有符号 O(n^2) 的算法,因为每个算法执行更多操作并消耗更多时间。

https://www.geeksforgeeks.org/analysis-algorithms-big-o-analysis/

如果第一次触发,您当前的 运行 时间是 O(N)。 N 等于您代码中的 m。所有这一切还假设以下操作都需要恒定的时间(我认为它确实如此)。

通常,您可以将 Big O 视为必须经历某事或迭代的次数。如果你有一个 运行s N 次的 for 循环,那么你需要 O(N) 时间。现在在 for 循环中,如果你正在做一些需要时间来计算的动作,你可能会有各种奇怪的计时。第一条评论解释的很详细,大家可以抽时间看看