【问题标题】:Solving Running time Big Theta Notation求解运行时间 Big Theta 表示法
【发布时间】:2021-02-10 17:30:04
【问题描述】:

考虑在这两个循环中找到作为 n 函数的总运行时间:

(1)

q  <- 1
while q <= n
     p  <- 1
          while p <= q 
           p <- p + 1
     q  <-  2 * q 

(2)
q,s <- 1, 1
while s < n
    for j <- 1 to s        
          k  <- 1
          while k < = j  
                 k  <- 2 * k        
     q  <- q + 1
     s  <- q * q  

脱离我所知道的我所相信的: (1) 是 theta(n * lg(n)) 其中 n 表示内部循环的时间,并且 lg(n) 用于外循环。 (2) 是 theta(n * lg(n) * sqrt(n)) 其中 n 表示 for 循环的时间, sqrt(n) 用于外部循环,lg(n) 用于内部 while 循环。

我不确定这是否正确。任何建议将不胜感激。

【问题讨论】:

    标签: algorithm big-o notation


    【解决方案1】:

    (1):

    这不是正确的看待这个的方式,其实内部while-loop不做“n循环lg n次”,它做了q循环不管这个数字可能是每次迭代!

    分析这个的正确方法是说内部while循环运行q次,q取数字1, 2, 4, ... , n(是的,out while循环运行Θ(lg n)次)。

    因此整个运行时间为:

    1 + 2 + 4 + ... + L 请注意,如果 n 不是 2 的完美幂,它会上升到小于 n 的最大幂。因此我们可以说它一直运行到它到达n (L = Θ(n))

    计算这个给我们一个几何级数与 lg(n) 元素:

    1 + 2 + 4 + ... + n = Θ(n)

    (2):

    不是最终解决方案,而是提示/启动 通过说for-loop 运行~n 次,您的分析仍然是错误的,这个循环只是运行s 次,而s 每次迭代都在变化。在迭代 t 时,我们有 s = t^2

    分析如下: for-loop 和它的内部 while-loop 是相关的,j1-s 运行,while 循环运行 lg(j) - 它们是相关的,因为 jfor-loop 的每次迭代中都会更改。但我们需要记住,s 也在发生变化,因此 for-loop 运行 s ∈ {1, 4, 9, ..., n}

    【讨论】:

    • 所以,我通过你的建议确定了s和j之间的相关性是:s lg (s)。外循环是sqrt(n),所以它是theta (sqrt(n) (sqrt(n) lg sqrt(n))) == n lg(n^1/2) == n lg(n) .
    • @hollyjolly 再想一想!让我们以 s=1,4,9 为例(q=1,2,3),我们将 for 循环与 while 循环结合在以下位置运行:(lg 1) + (lg1 + lg2 + lg3 + lg4) + (lg1 + lg2 + lg3 + ... + lg9)。你看到图案了吗?可以描述一个公式,使用 2 个求和,一个从 1 to sqrt(n)(信号 q)运行在 t 上,在求和内部,我们有 for-while 循环和来自 c=2 to t^2 的总和(信号s)
    • 对不起,我在你回复的时候重新编辑了评论。
    • 还是不正确,用嵌套求和公式表示
    • 感谢您的回复,我删除了评论,因为它只是点击了我。很抱歉给您添麻烦了。这东西对我来说有点难以掌握,所以我不断地回到它。
    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多