鉴于下面的脚本,我需要帮助找出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语句是否会改变它。
答案 0 :(得分:0)
由于使用Big-oh表示法,您正在考虑上限,在最坏的情况下应该是O(n * lg n),在最好的情况下应该是O(n)。
编辑:我没注意到j = j * 2
,@ AbcAeffchen已经合并了。
关于最佳情况和最坏情况,请查看here。
答案 1 :(得分:0)
取决于输入a
和b
:
最佳案例(a ≥ b
):
从1
到n
的三个循环。所以这是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)
的最坏情况。
您发布的代码非常简单,可以找到最佳和最差的情况。如果算法要复杂得多,那么您只能查找最坏情况的复杂性。