Python 大';O';-函数的时间复杂度
试图找出函数的时间复杂度 功能是:Python 大';O';-函数的时间复杂度,python,function,time-complexity,big-o,Python,Function,Time Complexity,Big O,试图找出函数的时间复杂度 功能是: def test(self, alt): same = Sample() for i in self.items: if alt.func1(i): same.func2(i) return same func1的复杂度为O(s),其中s是self的大小 func2的复杂度为O(1) 如果func1是O(1),那么我知道它会是 O(1+n*n)=O(1+n^2)=O(n^2) 但是我需要用f
def test(self, alt):
same = Sample()
for i in self.items:
if alt.func1(i):
same.func2(i)
return same
func1
的复杂度为O(s),其中s是self的大小
func2
的复杂度为O(1)
如果func1
是O(1),那么我知道它会是
O(1+n*n)=O(1+n^2)=O(n^2)
但是我需要用func1
作为O(s)来解决这个问题
编辑:
我的错误,我没有补充:
Sample()
是O(1)因为在for
循环的每次迭代中调用func1
,复杂性将取决于self.items
,func1
的长度,以及创建相同的
实例
因此,如果self.items
的长度为n
,并且创建相同的的复杂度为x
,则总复杂度将根据以下等式计算:
x + ns
上述方程的复杂度取决于X,也就是说,如果X大于ns
,它将是O(X)
,否则它是O(ns)
。一般来说,你可以这样写:
O(max{x, ns})
还要注意的是,如果func1
是O(1),那么复杂性就不会像您所说的那样。它将是O(max{x,n})
由于您在for
循环的每次迭代中调用func1
,因此复杂性将取决于self.items
、func1
的长度以及创建相同的实例
因此,如果self.items
的长度为n
,并且创建相同的的复杂度为x
,则总复杂度将根据以下等式计算:
x + ns
上述方程的复杂度取决于X,也就是说,如果X大于ns
,它将是O(X)
,否则它是O(ns)
。一般来说,你可以这样写:
O(max{x, ns})
还要注意的是,如果func1
是O(1),那么复杂性就不会像您所说的那样。它将是O(max{x,n})
“如果func1是O(1),那么我知道它将是O(1+n*n)=O(1+n^2)=O(n^2)”,你是怎么知道的?你的问题中的n是什么?我猜我对这种复杂性是错的,我认为我的理解是正确的,但显然不是。很抱歉那又是什么呢?不确定我会错在哪里“如果func1是O(1),那么我知道它会是O(1+n*n)=O(1+n^2)=O(n^2)”,你是怎么知道的?你的问题中的n是什么?我猜我对这种复杂性是错的,我认为我的理解是正确的,但显然不是。很抱歉那又是什么呢?我不知道我会错在哪里,这是否意味着大O复杂性是线性时间(O(n)),因为n是影响最大的重要部分?如果我误解了,请道歉。除非你知道x
,否则你不能这么说。如果ns
大于x
并且s
不是n
的一个因子,那么整个复杂性将是O(n)
。好的,我想我犯了一个错误。我知道创建与Sample()
的实例相同的是一个常量时间(O(1))。那么这会是O(n)吗?@user7262738不,是O(n)
。如果s
不是n
的一个因子,那么它将是O(n)
。是的,它将是O(n)@Kasramvd您应该删除最后一行中的“s”。那么这是否意味着最大的O复杂性是线性时间(O(n)),因为n是影响最大的重要部分?如果我误解了,请道歉。除非你知道x
,否则你不能这么说。如果ns
大于x
并且s
不是n
的一个因子,那么整个复杂性将是O(n)
。好的,我想我犯了一个错误。我知道创建与Sample()
的实例相同的是一个常量时间(O(1))。那么这会是O(n)吗?@user7262738不,是O(n)
。如果s
不是n
的一个因子,那么它将是O(n)
。是的,它将是O(n)@Kasramvd您应该删除最后一行中的“s”。