Python 大O符号是如何工作的?
好的,所以我对编码是相当陌生的,我要近似一个WCET T(a,b)和一个函数的复杂度。示例函数: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 该函数中不是只有两个赋值
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