【问题标题】:Find Closed Form from Algorithm with multiple arguments从具有多个参数的算法中查找封闭形式
【发布时间】:2016-08-01 23:00:04
【问题描述】:
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 开始,

如果 n 是 2 的幂,我可以看到算法返回 2; 如果 n 是偶数,则返回 2^(n/2) + 2;如果 n 是奇数,则为 2^n + 2。

第一个 elseif 我得到了 T(n/2) + 1 次,第二个 elseif 我得到了 T((n-1)/2) + 2^n + 1 (?) 次。

总的来说,我不知道如何在这里找到一个封闭的表格/使用重复替换。

【问题讨论】:

  • 您是想为算法的返回值,还是为它的时间复杂度寻找一个封闭的形式?不清楚。
  • @user2357112 我给出了运行时间的答案。我不认为我有封闭形式的数学:-)

标签: algorithm recurrence


【解决方案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 被分成两半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多