示例程序的大值

时间:2017-05-12 03:08:33

标签: python algorithm

我正在尝试编程逻辑的最坏情况,需要一些澄清。

这是一个非常简单的程序,需要一个数字 - 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个传球

1 个答案:

答案 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 ,但只迭代字符串。