Algorithm 如何将递归定义的输入大小函数转换为问题输入大小的直接函数?

Algorithm 如何将递归定义的输入大小函数转换为问题输入大小的直接函数?,algorithm,math,time,Algorithm,Math,Time,假设我有一个对大小为n的输入进行运算的算法,我知道n所用的时间是n-1所用时间的两倍。在这个简单的例子中(假设n=0需要1秒),我可以观察到算法需要2n秒 是否有一种通用方法可以将递归定义的定义转换为更熟悉的直接表达式类型? 特别是: T(n)=(n/b)+nc时 如果logbac,则T(n)=O(nlogba) 这是一个有用的定理,但并不能完全回答你的问题 你要找的是递归关系的生成函数。一般来说,这些问题只在非常简单的情况下可解,即当f(n)=Af(n-1)+Bf(n-1)和f(0)=f(1)

假设我有一个对大小为n的输入进行运算的算法,我知道n所用的时间是n-1所用时间的两倍。在这个简单的例子中(假设n=0需要1秒),我可以观察到算法需要2n秒

是否有一种通用方法可以将递归定义的定义转换为更熟悉的直接表达式类型?

特别是:

T(n)=(n/b)+nc时

如果logba 如果logba=c,那么T(n)=O(nclog[n])

如果logba>c,则T(n)=O(nlogba)

这是一个有用的定理,但并不能完全回答你的问题

你要找的是递归关系的生成函数。一般来说,这些问题只在非常简单的情况下可解,即当f(n)=Af(n-1)+Bf(n-1)和f(0)=f(1)=1(或f(1)=A)时。其他递归关系很难求解

有关更多信息,请参见。

像这样的“递归函数”称为递归关系,它们的“直接类型”称为闭式解

虽然Poita列出的主定理在计算时间复杂度方面非常有用,但它与实际求解递推关系无关


和(在“另请参阅”下)列出一些常见递归关系类的封闭形式。然而,复杂的(非线性)递推关系可能很难找到的封闭形式的解决方案,如果一个存在的话。没有解决这些问题的通用算法。

如果是线性的,可以将关系表示为矩阵,并找到特征值,将其分解为一种形式,使特征值可以提高到一个幂次,如前所述

f(n)=2**n而不是f(n)=2*f(n-1)