Python 大O符号是如何工作的?

Python 大O符号是如何工作的?,python,function,time-complexity,big-o,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 该函数中不是只有两个赋值

好的,所以我对编码是相当陌生的,我要近似一个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

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

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


提前感谢。

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

在循环体中,赋值
x=x+1
在最坏的情况下发生
a*b

我不把它描述为O(N^2),而是把它描述为O(ab),然后注意a~=b~=N就是O(N^2)

WCET对于这个函数ab,其中a=nb=n,那么你可以说O(n^2) 如果always testFunction2返回True,则
x=x+1
将执行ab次,但不会影响执行时间的总和。 最后,将所有执行时间相加:

(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年没有什么,而你有200万。

除了你最后一行,我完全理解。对于这个问题,大的O复杂性不是用O(N^2)表示吗?另外,WCET是如何用T(a,b)表示作业数量的近似值的?不过,我确实理解for循环中的赋值是如何发生“a*b”次的。谢谢,它不能是O(N的任何函数),因为程序中没有提到N。好的,我能理解,这很有帮助。那么你说的对吗:“最坏的执行时间是:T(a,b)=2+a+b+2ab”。是的,如果你假设a和b等于n
如果a,b=n,那么O(n^2)
不,实际上它就是ab,它来自于数学,比如说a=2和b=2,所以ab=2*2,但我们可以把2*2写成2^2,它等于
a=n,b=n=>a*b=n*n=n^2
O(ab)是正确的。就在我们谈论计算机科学时,运行时复杂性使用O(n^2)。最重要的部分是当a,b=n时,其中n是一个大整数,这是正确的,但是在这种情况下,
if
条件必须始终为真。
(1 + a + b + a*b + a*b + 1)
2 + a + b + 2*a*b
2 + 1000 + 1000 + 2*1000*1000
2002 + 2000000