【问题标题】:How do I calculate this logarithmic complexity using summations?如何使用求和计算这种对数复杂度?
【发布时间】:2018-04-01 20:02:59
【问题描述】:

我的问题

这段代码 sn-p 的 Big-O 复杂度是多少? 将 n 视为 4 的幂。

for(int i = 1; i <= n; i = i*4)                      
    for(int k = 1; k <= i; k++)                 
       // constant statement

到目前为止我所知道的

我尝试将此代码汇总以找出复杂性。 这就是我得到的:

我通过计算系列 4、4^2、4^3 ... 4^r = n 得到 (base 4) log(n)。 r = (base 4) log(n)。

我现在陷入了这个总结:

如果我做错了什么或有其他方法可以做到这一点,请告诉我。

【问题讨论】:

    标签: for-loop big-o computer-science


    【解决方案1】:

    您可以使用 wolframalpha 来获得极其准确的结果。

    https://www.wolframalpha.com/input/?i=sum+i,+i%3D1+to+log_4(n)

    【讨论】:

      【解决方案2】:

      你在正确的轨道上,但你内心深处的总结是错误的。你是对的,外部循环将迭代 log_4 n 次,但是你已经设置了外部总和,以便 i 计数为 1、2、3、...、log_4 n,而不是 4^0、4^1 , 4^2, ... 4^log_4 n。结果,内部求和的上限是不正确的。界限应该是 4^i,而不是 i。

      如果你这样设置,你会发现总和是

      4^0 + 4^1 + 4^2 + ... + 4^log_4 n

      = (4^(log_4 n + 1) - 1) / (4 - 1)(使用几何级数和的公式

      = (4(4^log_4 n) - 1) / 3

      = (4n - 1) / 3

      = Θ(n)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        相关资源
        最近更新 更多