Big O符号如何工作?

时间:2016-12-01 10:00:44

标签: python function time-complexity big-o

好的,所以我对编码很新,我接近WCET T(a,b)和函数的复杂性。示例功能:

def testFunction(self):
    x = 0
    for r in range(a):
        for c in range(b):
            if testFunction2(r, c):
                x = x + 1
return x

据我所知,这个函数的复杂度是二次O(N ^ 2),但我不确定近似WCET?

该功能中也只有两个作业:

x = 0

x = x + 1

? 如果是这样,我如何用T(a,b)表达作业?

数学从来都不是我的强项,但我想学习如何做到这一点。我读过的所有材料都没有以我理解的方式解释它。

提前致谢。

2 个答案:

答案 0 :(得分:1)

def testFunction(self):
    x = 0                               # 1
    for r in range(a):                  # a
        for c in range(b):              # b
            if testFunction2(r, c):     # a*b
                x = x + 1               # depends testFunction2
    return x                            # 1

这个函数的WCET a b,其中a = n b = n然后你可以说O(n ^ 2) 如果总是testFunction2返回True,那么x = x +1将执行 b次,但它不会影响执行时间的总和。 最后,你总结所有这个执行时间:

(1 + a + b + a*b + a*b + 1)
2 + a + b + 2*a*b
例如,

,而n = 1000且a = b = n

2 + 1000 + 1000 + 2*1000*1000
2002 + 2000000

因此,当您评估此结果时,您将看到2002年没有任何东西,而您有2000000。

答案 1 :(得分:0)

对于最坏情况执行时间,您可以简单地假设有一个专门设计的输入以使您的程序变慢。在这种情况下,testfunction2将始终返回true。

在循环体内,在最坏的情况下,作业x = x + 1发生a * b次。

不是将其描述为O(N ^ 2),而是将其描述为O(ab),然后注意〜= b~ = N即O(N ^ 2)