计算机科学数学中的递归关系 T(n) = 6T(n/6) + 2n + 3 对于 n 的 6 次方 T(1) = 1?

Recurrence relations in computer science mathematics T(n) = 6T(n/6) + 2n + 3 for n a power of 6 T(1) = 1?

递归关系可以直接从递归算法中导出,但是 它们的形式不允许我们快速确定效率 算法是。

请问我该如何解决

T(n) = 6T(n/6) + 2n + 3 对于 n 的 6 次幂 T(1) = 1 解 ?

可以使用 rsolve from SymPy、Python 的符号数学库解决此重复问题。

from sympy import Function, rsolve
from sympy.abc import k, n

f = Function('f')
g = Function('g')

# T(n) = 6T(n/6) + 2n + 3 for n a power of 6     T(1) = 1
T = f(n) - 6*f(n/6) - 2*n - 3
Tk = T.subs({n: 6**k, f(n): g(k), f(n/6):g(k-1)})

s = rsolve(Tk, g(k), {g(0): 1})
print ("solution for k:", s.cancel())

for k in range(0,11):
    print(f"k={k}, n={6**k}, T(n)={2*6**k*k + (8*6**k - 3)//5}")

这给出:

  • Tk(k) = 2*6**k*k + 8*6**k/5 - 3/5 或 Tk(k) = ((10k+8)6k - 3)/5
  • T(n) = 2*n*log(n)/log(6) + 8*n/5 - 3/5 或 T(n) = ((n(10log6(n)+8) - 3)/5

前 11 个值:

k=0, n=1, T(n)=1
k=1, n=6, T(n)=21
k=2, n=36, T(n)=201
k=3, n=216, T(n)=1641
k=4, n=1296, T(n)=12441
k=5, n=7776, T(n)=90201
k=6, n=46656, T(n)=634521
k=7, n=279936, T(n)=4367001
k=8, n=1679616, T(n)=29561241
k=9, n=10077696, T(n)=197522841
k=10, n=60466176, T(n)=1306069401

我们可以通过递归公式来检查公式:

def recursive_t(n):
    if n == 1:
        res =  1
    else:
        t_ndiv6 = recursive_t(n//6)
        res = 6 * t_ndiv6 + 2 * n + 3
    print(f"T({n})={res}")
    return res

recursive_t(6**10)

这会为相同的 n 打印出相同的值。