我正在尝试编程逻辑的最坏情况,需要一些澄清。
这是一个非常简单的程序,需要一个数字 - 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个传球答案 0 :(得分:1)
好的,所以评论给出了一个非常明确的答案 - 但只是为了澄清(并且也正确回答了问题):
这里定义big-O的两个操作是:
for each in str(A):
- 这是O(n)
操作,它会查看字符串中的每个字符(A
)。max(result)
- 这也是O(n)
,因为我们必须迭代整个列表以修复最大值(result
)。从len(A) == len(result)
我们可以调用此2n
(而不是nm
),并且由于它是大O,我们会删除常量因子,从而导致:{ {1}}。
如果您想完全删除常数因子,可以将函数重写为:
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
,但只迭代字符串。