1

我有一个家庭作业:在数字 5**200,000 中找到 50,000 个连续数字的最大和。我知道如果我对这个数字进行 for 循环,它不会在可行的时间内结束。我试图把这个数字放在一个列表中并遍历列表,但我不明白它是如何工作的?为什么它不像第一种情况那样表现?是什么让它更快?那是我的代码:

def maxdigits(number,digits):
    s=str(number) #conversting the number to a string
    l = [int(char) for char in s]
    maximum = current = sum(l[:digits])
    for i in range(0,len(l)-digits):
        current = current-l[i]+l[i+digits]
        if current > maximum: maximum = current
    return maximum    
4

2 回答 2

2

我想你是在问为什么对数字的数字进行5**200000循环会很快完成,而0(5**200000)-1包含范围内的所有数字进行循环需要很长时间。

我认为这对您来说并不明显的唯一原因是因为这些数字很大,很难写下来。再想一想。从到循环 7 位1000000或超过 100 万个数字会更快吗?中有数字。做一个简单的循环时间并不是大量的工作。做一个简单的循环时间是一项庞大的工作。这是一个荒谬的数字。如果宇宙中的每个原子都是一台计算机,并且每个原子都在宇宙的整个生命周期中运行,我怀疑它们会成功地做任何事情。09999991397955**2000001397955**2000005**200000

于 2013-10-31T19:59:29.017 回答
1

代码运行得更快,因为不是迭代列表

[ 0, 1, ..., 5 ** 200000 ]

你正在迭代

[ 0, 1, ..., 139 795 - 50000 ]

这比第一个列表小几个数量级。

您计算该数字中位数的方式是:

200000 * log5 + 1
于 2013-10-31T19:58:52.777 回答