Time complexity 证明时间复杂度
我试图确定这两个函数的复杂性,其中整数中的D和list是整数的列表:Time complexity 证明时间复杂度,time-complexity,proof,Time Complexity,Proof,我试图确定这两个函数的复杂性,其中整数中的D和list是整数的列表: def solve(D, list): for element in List: doFunc(element, D, list) def doFunc(element, D, list): quantityx = 0 if(D > 0): for otherElement in list: if otherElement == element: qua
def solve(D, list):
for element in List:
doFunc(element, D, list)
def doFunc(element, D, list):
quantityx = 0
if(D > 0):
for otherElement in list:
if otherElement == element:
quantityx += 1
return quantityx + (doFunc ((element+1), (D-1), list))
return 0
直观地说,我认为它有一个O(n²),其中n是列表中元素的数量,但我想用一种正式的方式证明它。第一个观察:
solve
调用doFunc
,但不是相反。因此,solve
的复杂性将取决于doFunc
的复杂性,而不是相反。我们需要先弄清楚doFunc
的复杂性
设T(E,D,N)
为doFunc
的时间复杂度,作为E
、D
和列表中元素数N
的函数。每次调用doFunc
时,我们对循环进行N
迭代,然后使用E+1
,D-1
调用doFunc
,列表保持不变。基于此,我们知道,doFunc
的时间复杂度由以下递归公式给出:
T(E,D,N)=aN+b+T(E+1,D-1,N)
这里,a
和b
是一些需要确定的常数
现在我们需要这个递归公式的基本情况。我们的基本情况是,当D时,我们唯一不递归的时候
D T(E, D, N)
0 c
1 c + b + aN
2 c + 2b + 2aN
3 c + 3b + 3aN
...
k c + kb + kaN