if-else循环的大哦符号

时间:2015-08-18 10:26:34

标签: big-o

鉴于下面的脚本,我需要帮助找出Big-Oh符号。

p = 0

if a < b :

   for i in range(1,n) :

    j = 1

    while j < i :

        p = p + j

        j = 2 * j

else :

    for i in range(1, n) :

      p = p + 1

    for j in range(1,n) :

      p = p + j

    for k in range(1,n) :

      p = p + k

这主要是因为我不确定if和else语句的Big-Oh表示法。我认为答案可能只是n因为for循环在n的范围内,但我不确定嵌套的while循环如何影响答案或者if else语句是否会改变它。

2 个答案:

答案 0 :(得分:0)

由于使用Big-oh表示法,您正在考虑上限,在最坏的情况下应该是O(n * lg n),在最好的情况下应该是O(n)。

编辑:我没注意到j = j * 2,@ AbcAeffchen已经合并了。

关于最佳情况和最坏情况,请查看here

答案 1 :(得分:0)

取决于输入ab

最佳案例(a ≥ b):
1n的三个循环。所以这是O(n)

最坏情况(a < b):
一个for循环从1运行到n,带有嵌套的while循环。 while循环具有中断条件j < i。在while循环中,j始终乘以2,因此j包含2的幂。问题是x有多大2x < i成立,答案是log₂ i ≤ log₂ n。所以你得到O(n⋅log n)的最坏情况。

您发布的代码非常简单,可以找到最佳和最差的情况。如果算法要复杂得多,那么您只能查找最坏情况的复杂性。