python - 为什么当n以10秒为单位增加时,Python将两个n位整数相乘所需的时间只会增加?

标签 python time-complexity multiplication

我正在计算计算机上计算两个 n 位整数的乘积所需的时间。

我正在使用此代码来执行此操作:

import timeit
for i in range(50):
    avg=0
    for j in range(30):
        avg+=timeit.timeit('a*b','a='+str(10**i)+';b='+str(10**i))
    print(avg/30)

它返回图形结果:

enter image description here

其中 X 轴为 n,Y 轴为所用时间(以秒为单位)。可以看到,当它是10的倍数时,所花费的时间大约在n处增加,并且不是不断增加的。

我不明白为什么花费的时间会有这样的变化。

最佳答案

Python int 的大小是 stored作为 30 位 block 的序列(有时是 15 位 block ,但现在这种情况很少见)。将数字延长 9 位十进制数字大约需要 30 位,而两个数字相乘所需的时间主要取决于每个数字需要多少个 30 位 block ,因此时间会以大约 9 位十进制数字的增量增加。

关于python - 为什么当n以10秒为单位增加时,Python将两个n位整数相乘所需的时间只会增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511908/

相关文章:

algorithm - 查找数组中最常见的条目

linux - 归一化值,加起来大于 1

assembly - 在 x86 汇编中是否可以用 mul 乘以立即数?

python - 你可以使用 wxPython 自动隐藏框架/对话框吗?

python - matplotlib 中的矢量格式热图

algorithm - 查找具有最少数量非零元素的矩阵以满足行和列总和

java - 如何在时间复杂度方面改进算法?

c++ - 在 C++ 错误中乘以 double

python - 无法访问 Python 模块

python - celery 击败不接受周期性任务