伪码的最坏情况复杂性

时间:2015-03-10 20:35:15

标签: performance algorithm big-o

我们有以下伪代码来查找数组中k个最小的数字。

partition(A, begin, end)
   x = A[end]
   i = begin – 1
   for j = begin to end – 1
      if A[j] <= x
         i = i + 1
         swap(A[i], A[j])
         swap(A[i + 1], A[end])
   return i + 1

select(A, begin, end, k)
   m = partition(A, begin, end)
   s1 = m – begin
   s2 = end – m
   s = s1 + s2 + 1
   if s1 >= k
      return select(A, begin, m – 1, k)
   else if s – s2 == k
      return m
   else
      return select(A, m + 1, end, k – s + s2)

swap()函数只是通过引用方式在参数中交换它的参数,并且它需要恒定的时间。对于长度为n的数组,big-O表示法中最坏情况的复杂性可能是什么?

1 个答案:

答案 0 :(得分:0)

Big O符号很简单,因为它可以根据最坏的情况为您提供复杂性的一般概念。

当您对事物进行分区时,通常意味着您有一个O log(n),当您查看它意味着您有O n时,当您有嵌套循环时,您将有O n ^ x,其中x是金额嵌套循环,2个循环意味着O n ^ 2,三个循环意味着O n ^ 3,依此类推。检查您的伪代码中的案例,您将得到答案。

我可能是错的,但我发现在最糟糕的情况下,你正在循环你的A的所有元素并对所有元素进行分区,因为它们都是相反的,这意味着O nlog(n)可以简单地作为O LOG(n)中。

为了更好地理解algorythms,我推荐这个Standford course

希望这有帮助。