从多种参数的算法中查找封闭表格

function What(n,a,total) 

if n=0

return total

elseif n is even and n>0

return What(n/2, a+1, total)

elseif n is odd

return What((n-1)/2, a+1, total + 2^n)

endif

end What

我不知道如何找到此算法的封闭形式。这不是一个家庭作业问题,只是为我即将到来的决赛学习以前的考试。根据给定的标记/空间,它应该是一个小/简单的解决方案。从多种参数的算法中查找封闭表格

假设总开始于0,

我可以看到,该算法返回图2,如果n为2的幂;如果n是偶数,则 返回2 ^(n/2)+2;如果n是奇数,则2^n + 2。对于第一个elseif我得到了T(n/2)+ 1时间,对于第二个elseif我得到了T((n-1)/ 2)+ 2^n + 1(?)时间。总体而言,我不知道如何去寻找这里的封闭表格/使用重复的替代。

回答:

欣赏What()函数的复杂性似乎只取决于传递给它的第一项。通过检查,这是相当清楚地看到,运行时间为O(lg_2 N + 2),整数N> 0。为了证明这一点,只考虑要求对2的前几个整数倍的功能数量:

num | # function calls 

2 | 3 = lg_2(2) + 2

4 | 4 = lg_2(4) + 2

8 | 5 = lg_2(8) + 2

16 | 6 = lg_2(16) + 2

具体,每次调用What(n)将调用What(floor(n/2)),这意味着n在递归的每个线性步骤中被分成两半。

以上是 从多种参数的算法中查找封闭表格 的全部内容, 来源链接: utcz.com/qa/259796.html

回到顶部