Python指数运算速度

Python指数运算速度,python,performance,number-theory,Python,Performance,Number Theory,你知道我该怎么估计这个项目需要多长时间吗?我已经运行了8个小时的程序,不知道还要等多久 print (9 ** ((9 ** 9) + 9)) 我知道答案是巨大的(我知道它将溢出十亿位数)。我只是想知道需要多长时间。做算术(9**(N**N+N))的时间与N的比例非常好(并且是指数级的),如下图所示。我的comp大约需要48分钟来计算N=9的答案。然而,在某个时刻,数字的文字表示将不适合RAM,这就是交换/分页开始的地方,并且由于一个不可预测的因素而减慢了整个过程。 (我知道这并没有回答你的

你知道我该怎么估计这个项目需要多长时间吗?我已经运行了8个小时的程序,不知道还要等多久

print (9 ** ((9 ** 9) + 9))
我知道答案是巨大的(我知道它将溢出十亿位数)。我只是想知道需要多长时间。

做算术(
9**(N**N+N)
)的时间与
N
的比例非常好(并且是指数级的),如下图所示。我的comp大约需要48分钟来计算N=9的答案。然而,在某个时刻,数字的文字表示将不适合RAM,这就是交换/分页开始的地方,并且由于一个不可预测的因素而减慢了整个过程。

(我知道这并没有回答你的问题,但我仍然想分享这个图表。请随意标记/否决投票。)

做算术的时间(
9**(N**N+N)
)与
N
的比例非常好(并且呈指数级),如下图所示。我的comp大约需要48分钟来计算N=9的答案。然而,在某个时刻,数字的文字表示将不适合RAM,这就是交换/分页开始的地方,并且由于一个不可预测的因素而减慢了整个过程。


(我知道这并没有回答你的问题,但我仍然想分享图表。请随意标记/否决投票。)

如上所述,你正在进行两个单独的计算。第一个是9**((9**9)+9)的幂运算。第二个是将结果转换为十进制字符串格式。第二次计算比第一次计算慢得多

让我们看看我的计算机上9**((N**N)+N)的大致运行时间

对于N=6,求幂需要0.01秒。转换为十进制字符串需要0.02秒

对于N=7,求幂需要0.15秒。转换为十进制字符串需要6.9秒

对于N=8,求幂运算需要16.9秒。转换为十进制字符串需要48分钟

对于N=9,求幂需要40分钟。转换为十进制字符串需要很长时间,可能需要几周

Python的整数到字符串转换算法是O(n^2),其运行时间最终将占主导地位。还有其他库可以更快地执行计算。GMPY2将在不到2分钟内执行这两个计算。有关更多详细信息,请查看此问题的第二个答案:


如上所述,您正在进行两个单独的计算。第一个是9**((9**9)+9)的幂运算。第二个是将结果转换为十进制字符串格式。第二次计算比第一次计算慢得多

让我们看看我的计算机上9**((N**N)+N)的大致运行时间

对于N=6,求幂需要0.01秒。转换为十进制字符串需要0.02秒

对于N=7,求幂需要0.15秒。转换为十进制字符串需要6.9秒

对于N=8,求幂运算需要16.9秒。转换为十进制字符串需要48分钟

对于N=9,求幂需要40分钟。转换为十进制字符串需要很长时间,可能需要几周

Python的整数到字符串转换算法是O(n^2),其运行时间最终将占主导地位。还有其他库可以更快地执行计算。GMPY2将在不到2分钟内执行这两个计算。有关更多详细信息,请查看此问题的第二个答案:



所需的时间因您打印而被粉碎。控制台的IO是SLO w-您正在测量控制台的输出-不是计算它所需的时间。好吧,但为什么您需要计算这个?时间取决于您的机器,也就是说您的CPU、RAM、硬盘(因为不,我认为您的RAM不够大)、操作系统。。。我认为没有人为这个项目做过基准;)这应该小于10**10位。Python每位数需要大约0.45字节。这意味着ram中的最终数字约为5GB。同样大小的计算需要大约2个温度变量。大约15GB。因此,只需开始计算并监控RAM使用情况。然后推算出达到这个数字需要多长时间。这应该会给你一个数量级的估计…在基数9中,你的答案是1,后面跟着0 387420498次。所需的时间被粉碎了,因为你打印了它。控制台的IO是SLO w-您正在测量控制台的输出-不是计算它所需的时间。好吧,但为什么您需要计算这个?时间取决于您的机器,也就是说您的CPU、RAM、硬盘(因为不,我认为您的RAM不够大)、操作系统。。。我认为没有人为这个项目做过基准;)这应该小于10**10位。Python每位数需要大约0.45字节。这意味着ram中的最终数字约为5GB。同样大小的计算需要大约2个温度变量。大约15GB。因此,只需开始计算并监控RAM使用情况。然后推算出达到这个数字需要多长时间。这应该会给你一个数量级的估计…在基数9中,你的答案是1,后面跟着0 387420498次。你的y轴刻度是多少?时间以秒为单位,由
%timeit
测量。如果我读对了,你能够计算出9**(8**8+8)不到一秒?我不相信。所以,如果你用大O表示法来描述它的运行时间,这是在O(n^2)时间内运行的,或者更糟。@CeciliaChen不,在29秒内-但是,同样,用
%timeit
来衡量。实际运行时间要长得多。您的y轴刻度是多少?时间以秒为单位,由
%timeit
测量。如果我读得正确,您可以计算出9**(8**8+8)是les