基本算法分析与循环行为

时间:2017-05-30 00:04:48

标签: algorithm time-complexity asymptotic-complexity big-theta

"分析下面的伪代码,并将每个函数的渐近最坏情况运行时间作为Big-Theta表达式。"

我已经包含了下面的代码,并评论了每一行的操作计数。这个问题是使用假设的架构,其中每个原始操作需要1个单位的时间。

1: procedure KSum1(n)
2:     S ← 0 // 1 for assignment
3:     k ← n // 1 for assignment
4:     while k ≥ 1 do // THIS IS THE PROBLEM
5:         for i = 1, 2, . . . , k do // n*(whatever the while loop is)
6:             S ← S + k // (1 for add + 1 for assignment)*(whatever the while loop is)
7:         end for
8:         k ← k/2  // (1 for divide + 1 for assignment)*(whatever the while loop is)
9:     end while
10:     return S // 1
11: end procedure

正如您所看到的,在这种情况下,我不确定如何处理while循环。

如果n = 4,那么它循环4→2→1,所以3加上额外的检查,共计4个。

如果n = 7,则循环7→3.5→1.75,3加1,总共4。

如果n = 9,则循环为9→4.5→2.25→1.125,4加1,总共5。

我很难想出一种模式来表达作为n的函数的while循环重复,并且它阻止我完成这个问题。有人能指出我正确的方向吗?新的算法分析和任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

时间复杂度为O(log(n)),这意味着对于给定的n,计算算法需要log(n)个步骤(或者更正式地说:代表函数的顺序给定的问题是log(n))。

在此分析中,您自己完成了大部分工作:

  

如果n = 4,那么它循环4→2→1,所以3加上额外的检查,共计4个。

     

如果n = 7,则循环7→3.5→1.75,3加1,总共4。

     

如果n = 9,则循环为9→4.5→2.25→1.125,4加1,总共5。

此处的“步骤”由单个右箭头表示,因此对于4和7有2个步骤,对于9有3个步骤。我们将其与floor(log(n))进行比较:

`n = 4, log_2(4) = 2,             floor(log_2(4)) = 2, #arrows = 2`
`n = 7, log_2(7) = 2.80735492206, floor(log_2(7)) = 2, #arrows = 2`
`n = 9, log_2(9) = 3.16992500144, floor(log_2(9)) = 3, #arrows = 3`