【发布时间】:2017-10-05 16:36:42
【问题描述】:
我正在寻找方法使MaxPower() 函数的以下最小代码更节省内存和使用我的代码的示例。
MaxPower() 的用途:对于整数i 和N_remainder,返回m 的最大值,使得i^m 除以N_remainder。
MaxPower() 仅在 i 除以 N_remainder 时在 factorise() 函数中调用
目前,下面的链接代码对于要分解的数字具有以下结果(以标准形式编写):
- 1x10^8 - 工作正常。产生了两个结果数组并且是正确的
- 5x10^8 - 挂起 Linux 和操作系统完全没有响应。计算机需要硬重启。
- 1x10^9 - 在终端出现内存错误。
在 Linux Mint 17 上使用的 Python 版本是 2.74。
我目前正在学习python。
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in range (2, N_remainder + 1):
b = i**n
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
自最初发布以来的修订代码:
def MaxPower(i,N_remainder):
m=1
MxP=1
for n in xrange (2, N_remainder + 1):
b = pow(i,n)
a = N_remainder % b
if a==0:
m = m+1
else:
MxP = m
break
return MxP
我知道以下内容(自新以来我还没有尝试过,目前超出了我的深度);
- 可以在编译后的 C 代码中做更多的工作 - 转换为“列表理解”
- 使用线程并确保在使用后删除每个线程。
【问题讨论】:
-
你知道代码的哪一部分正在使用所有的内存吗?当可能只有一小部分实际存在问题时,需要执行大量代码。
-
我不确定,但我怀疑它可能是
maxpower()函数。一个例子是第三个例子 (1*10^9) - 这个手动分解为 2^9 * 5^9 - 这可能与在内存中存储大量数字有关吗? -
更新了
MaxPower()函数代码最少的问题 -
这个函数应该做什么?
-
只是让您知道:看起来其中一些数字的大小也可能非常大。
sys.getsizeof()报告10**8本身占用 16 个字节,2**(10**8)占用 13333346 个字节。
标签: python python-2.7 range memory-efficient xrange