问题描述
递减递推关系的一般形式为:T(n)=aT(n-b)+f(n)
例如T(n)=T(n-1)+1 具有以下伪代码。这里a=1。
void rec(num)
{
if(num>0)
{
printf(num);
rec(num-1);
}
}
并且 T(n)=2T(n-1)+1 具有以下伪代码。这里a=2。
void rec(num)
{
if(num>0)
{
printf(num);
rec(num-1);
rec(num-1);
}
}
递减函数的大师定理指出,如果 a,T(n)=O(f(n))。 例如。 T(n)=0.5T(n-1)+1 是与 a=0.5 的关系。
我想问一下 a 到底如何才能小于 1?上述关系的一些可能的伪代码是什么?
解决方法
递推关系只是 ℕ 上(一类)函数的简洁数学描述。您的示例 T(n)=0.5T(n-1)+1
是一个完全有效的递归关系,它有许多解决方案,例如T(1) = 1,T(2) = 1.5,T(3) = 1.75,..
,或者一般来说,T(n) = O(1)
master theorem 使用递推关系来描述分治算法的运行时间。在这种情况下,a
代表原始问题被划分的子问题的数量。
很明显,对于任何非平凡算法,该数字必须是大于 0 的整数。在这种情况下,a=0.5
没有任何意义 - 它不对应任何类别的算法或伪代码。