我试图大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),但只迭代字符串。

10-06 05:03