我试图大o最坏的情况下的编程逻辑,需要一些澄清。
这是一个非常简单的程序,它需要一个数字-2938023,每个字符乘以一个随机数并填充在一个列表中。
一旦列表被填充,我就得到最大值作为结果。
from random import randint
def test(A):
result = []
for each in str(A):
result.append(int(each)*randint(0,9))
return max(result)
print test(2938023)
这次行动中最糟糕的情况是什么由于list-str(a)只迭代一次,我是否应该将其视为log(n)或
我是否应该考虑n*n,因为列表将再次迭代以获得最大值基于n的列表上有2个pass。
最佳答案
好的,所以这些评论给出了一个非常明确的答案——但只是为了澄清(并且正确地回答问题):
定义big-O的两个操作是:for each in str(A):
-这是一个O(n)
操作,它查看字符串中的每个字符(A
)。max(result)
这也是一个O(n)
,因为我们必须遍历整个列表来修复最大值(result
)。
因为len(A) == len(result)
我们可以称它为2n
(与nm
相反),而且因为它是大O,我们去掉常数因子,结果是:O(n)
。
如果要完全删除常数因子,可以将函数重写为:
from random import randint
def test(A):
max_item = 0
for each in str(A):
new_item = int(each)*randint(0,9)
if new_item > max_item:
max_item = new_item
return max_item
它也是
O(n)
,但只迭代字符串。