- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[J2EE程序最优化
第2章 程序最优化
2.1 空间与时间
计算机中最核心的资源就是CPU与存储器,任何程序的运行都离不开此二者。任何程序的运行都要进行计算,这就会消耗CPU时间;任何程序的运行也都需要进行数据处理,而CPU中是无法存储数据的,必须借助存储器来保存数据。如果程序的CPU时间消耗过大的话就会导致程序的运行时间变长;如果占用的存储空间太大的话就会使得系统能够运行的程序数量变少。因此如何保证程序占用的CPU时间和占用的存储空间都较小就成了我们研究的一个重点,任何系统的优化也都是以此为目标的。
2.1.1 空间与时间的概念和度量
通俗地讲,一个算法的空间消耗指的是这个算法运行所需要的存储空间大小,而时间消耗指的是算法运行所需要的时间。一个算法运行时所消耗的空间与时间通常与运行环境有关,同一个算法在配置不同的计算机上运行的时间消耗和空间消耗也不同。比如对于一个存储空间需求极大的算法,如果可用的存储空间不够,在运行的时候就要频繁地进行内外存的交换,这样需要运行的时间就会变长;如果可用空间足够大,但是CPU运行速度较慢的话,就会导致算法占据存储空间的时间变长,从而导致占用的存储空间的总体值上升。必须找到一种不依赖于软硬件条件的对空间与时间进行度量的方法,而算法的复杂性即与具体的运行环境无关,所以通过比较算法的复杂性来评价算法是比较合理的。
算法的复杂性分为空间复杂度和时间复杂度。空间复杂度是指当问题的规模以某种单位从1增加到n时,若解决这个问题的算法在执行时所占用的存储空间也以某种单位从1增加到f(n),那么就称此算法的空间复杂度为f(n);时间复杂度是指当问题的规模以某种单位从1增加到n时,若解决这个问题的算法在执行时所消耗的时间也以某种单位从1增加到g(n),那么就称此算法的时间复杂度为g(n)。空间单位一般规定为一个工作单元所占用的存储空间的大小,时间单位一般规定为一个程序步。
我们需要一种方式来把空间复杂度和时间复杂度的度量弄得更精确一些,为此,人们提出了一种标准的记法,被称为“大O记法”。在这种记法中使用的基本参数是n,也就是问题的规模,把复杂度表示为n的函数。这里的“O”是英文“Order”的缩写,此处的“Order”不是“顺序”的意思,而是代表“数量级”。比如说“数组遍历是O(n)的”,意思就是说“通过O(n)量级的步骤去遍历一个数组”。
2.1.2 空间与时间的背反
我们总是追求程序通过占用最少的存储空间以最快的速度(即最少的CPU时间占用)来完成任务,但是这两者常常是此消彼涨的:当一个程序改进到能够占用更少存储空间的时候,它消耗的CPU时间就会增加;当一个程序改进到占用较少的CPU时间的时候,它占用的存储空间通常又会上升。
比如,计算高精度的?值是非常消耗系统CPU时间的,而其占用的存储空间则相对较小。为了防止每次计算都消耗漫长的CPU时间,可以在一次计算以后把计算结果保存到存储器中,这样下次计算的时候直接从存储器中读取就可以了,这样占用的CPU时间就非常短了,但是占据的存储空间就增加了。
数据库的索引也是一个明显的例子。为了提高数据检索的速度,常常需要对数据表的字段建立索引,这样就可以用更少的CPU消耗来检索到需要的数据了,但索引是要占据存储空间的,这就导致了存储空间的上升。
既然空间与时间的占用存在着这种背反性,那么必须在空间与时间的优化上找到一个平衡点。现代的计算机的存储器容量非常大,而且价格也非常低廉,而CPU则属于比较宝贵的资源,所以现代的程序设计更多的是以空间换取时间,也就是用较高的存储空间占用来换取较少的CPU时间。
2.1.3 以空间换时间
以空间换时间的例子是非常多的。
【例2.1】阶乘计算。
本实例给定一个整数n(n大于等于0,小于等于10),计算它的阶乘值。
算法1(普通的阶乘计算):
public class JCCalc01
{
public static void main(String[] args)
{
for (int i = 0, n = 10; i n; i++)
System.out.println(calcFactor(i));
}
private static int calcFactor(int value)
{
if (value 0 || value 10)
{
throw new IllegalArgumentException();
}
if (value == 0)
{
return 1;
} else
{
return calcFactor(value - 1) * value;
}
}
}
算法2(优化的阶乘计算):
public class JCCalc02
{
文档评论(0)