对Python程序的时间和空间性能进行优化
1.空间性能的优化(通用的,Java或者是C/C++等其他语言都可用)
对空间性能的优化其实就是压缩空间,如果你创建的二维数组过大,并且对空间的利用率不高(好多都是空闲的),那就是造成空间的浪费了。
如何避免这个问题呢?
可以使用动态数组来解决,如下所示:
1 #不使用库,手动创建一个数组 2 dp=[] 3 for i in range(1000): 4 d=[] 5 for j in range(1000): 6 d.append(0) 7 dp.append(d) 8 #每i行输入i个1,然后i+1行等于前i行的1的个数加1 9 for i in range(1000): 10 for j in range(i+1): 11 if i==0: 12 dp[i][j]=1 13 break 14 dp[i][j]=dp[i-1][j]+1 15 #有此可知,使用上述的方法,虽能求出结果,但是空间消耗太大,尤其是i越小,空间浪费越多 16 #若使用动态数组,则是无需定义这么多,只需定义两行 17 dp=[] 18 for i in range(2): 19 d=[] 20 for j in range(1000): 21 d.append(0) 22 dp.append(d) 23 dp[0][0]=1 24 row=0 25 for i in range(1000): 26 row=1-row#使得数组滚动起来 27 for j in range(1000): 28 dp[row][j]=dp[1-row][j]+1 29 #这样一来,就能够大大的减少空间浪费
2.时间性能的优化
在编写python程序时,可以经过以下的几个方式,对时间性能进行优化:
(1)使用局部变量,尽量避免使用全局变量(当数据量较大时,该方法能够优化将近11秒左右)
1 def demo(): 2 global ans#全局变量 3 count=0#局部变量
(2)尽量使用python的内置函数(当数据量较大时,该方法能够优化将近2秒左右)
1 #比如使用python的内置函数来对输入的字符串进行处理 2 n=list(map(int,input().split())) 3 print(n)
(3)尽量使用a,b=1,2这种类型进行赋值(当数据量较大时,该方法能够优化将近1秒左右)
(4)如果上述的方法还是不能够很好的解决的话,可以利用python“胶水语言”的特性,进行跨平台使用,比如在python程序中去调用Java或者是C/C++语言(这种方法可以大大的缩减运行时间)
1 #这里以调用Java语言为例 2 #首先需要你先前去安装jpype的第三方库 3 import jpype 4 n=list(map(int,input().split())) 5 jarpath=os.path.join(os.path.abspath("."),r"D:\hr.jar")#打开jar文件 6 jvmpath=jpype.get_default_jvm_path()#获取jvm.dll的文件路径 7 jpype.startJVM(jvmpath,"-ea","-Djava.class.path=%s" % jarpath)#打开jvm 8 javaclass=jpype.JClass("com.java.python.JavaPython")#加载java类(参数是java的长类名) 9 print(javaclass.main(n[0],n[1],n[2],n[3]))#调用Java类中的方法(静态方法可直接用类名调用) 10 jpype.shutdownJVM()#关闭jvm
上述这个例子是我自己之前编写的,调用Java程序的具体步骤如上述的例子所示,如果想要具体了解的,可以查看下面这个链接:
https://www.cnblogs.com/jasmine-Jobs/p/10014643.html
3.在python中,单层for循环的循环次数小于等于7*10^6时,运行时间差不多就在1秒内
1 import time 2 a=[] 3 start=time.time() 4 for i in range(7000000): 5 a.append(i) 6 print(time.time()-start)
运行结果为: