我正在做一个算法设计课程,我有一个功课来计算一个函数的成本,我做了一些研究并发现了关于主定理,但我看到的所有例子都是关于 n 在这个函数中我有2个参数,但都不是n。
function estudia(i,j){
if i = j then resulta(i,j);
M = (i+j)/2;
C = (j-i)/4;
estudia(i,M);
estudia(i+C,M+C);
combina(i,j);
}
function combina(i,j){
ancho = j-i-1;
p = 1;
while p * p < ancho loop
p = p+1;
resulta(p,j);
}
我们知道结果(x,y)是O(1),但是如何计算递归函数的代价,主定理有2个参数i和j而不是n?是不可能的,我必须使用替换方法?
答案 0 :(得分:0)
根据您的设置,我们假设i和j是固定参数。让n = j - i
,距离。
对于estudia(i,M)
,M-i=n/2
的距离为estudia(i+C,M+C)
,距离仍为n/2
。 combina(i,j)=combina(n)
。
让T(n)
= estudia的费用。您可以将estudia
的递归公式构造为:
T(n) = 2 * T(n/2) + combina(n)
。
正如你所说,你可以解决combina(n)
(我不会解决它,因为它仍然是你的任务)。插入combina(n)
的结果,你得到主定理。