Catalan Numbersを計算する再帰関数を作成しました。再帰式はです。
私のコード:
def catalan(n): # We call this function. To my opinion it is more elegant.
d = dict()
return catalan_rec(n,d)
def catalan_rec(n,d):
if n == 0:
result = 1
elif n in d: return d[n]
else:
result = 0
for i in range(n):
result += catalan_rec(i,d)*catalan_rec(n-i-1,d)
d[n] = result
return result
ここで、再帰の深さが O(n) であることは明らかです。このアルゴリズムの時間の複雑さはわかりません。再帰ツリーには O(n) 個のノードがあり、任意のノード (葉を除く) で 2 つの呼び出しを行います。辞書に結果が既にあるかどうかのみを確認するため、すべての呼び出しは O(1) です。したがって、時間の複雑さは O(n) です。
私の推論は正しいですか?
ところで、O(n^2) よりも優れた時間計算量で実行される非再帰アルゴリズムを作成するオプションはありますか?
ありがとう!