试图找出函数的时间复杂度。
功能是:
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)
答案 0 :(得分:0)
由于您在func1
循环中的每次迭代时调用for
,因此复杂性将取决于self.items
,func1
的长度并创建{{1}实例。
因此,如果same
的长度为self.items
且创建n
的复杂度为same
,则总复杂度将根据以下公式计算:
x
上述等式的复杂性取决于X,即如果X大于x + ns
则表示ns
,否则它是O(x)
。一般来说,你可以写下来如下:
O(ns)
另请注意,如果O(max{x, ns})
为O(1),则复杂性与您声称的不同。它将是func1
。