Time complexity 证明时间复杂度

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

我试图确定这两个函数的复杂性,其中整数中的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:
        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