在递推关系中,a 怎么可能小于 1?

问题描述

递减递推关系的一般形式为: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 没有任何意义 - 它不对应任何类别的算法或伪代码。