算法复杂度

好文章就要收藏,学习,文章讲的很精辟!

计算机最核心的资源就是CPU与存储器,任何程序的运行都离不开二者。任何程序的运行都要进行计算,这就会消耗CPU任何程序的运行也都需要进行数据的处理,CPU中是无法存储数据的,必须借助存储器来保存数据。如果程序的CPU消耗过大会导致程序的运行时间变长;如果占用的存储空间太大会使得系统能够运行的程序数量变少。因此如何保证程序占用的CPU和占用的存储空间都较小就成为重点,任何系统的调优也都是以此为目标的。

2.1.1空间与时间的概念与度量
通俗的讲,一个算法的空间消耗指的是这个算法运行所需要的存储空间大小,而时间消耗指的是算法运行需要时间一个算法运行时所消耗的空间与时间通常与运行环境有关,同一个算法在配置不同的计算机上运行的时间消耗和空间消耗也不同。比如对于一个存储空间需求极大的算法,如果可用的存储空间不够,在运行的时候就要频繁的进行内外存的交换,这样需要运行的时间就会变长;可用空间足够大,但是CPU运行速度较慢的话,就会导致算法占据存储空间的时间变长,从而导致占用的存储空间的总体值上升。因此必须找到一种不依赖于软硬件条件的对空间与时间进行度量的方法,而算法的复杂性与具体的运行环境无关,所以通过比较算法的复杂性来评价算法是比较合理的。
算法的复杂性分为空间复杂度和时间复杂度。空间复杂度是指当问题的规模以某种单位从1增加到n时,解决这个问题的算法在执行时间所占用的存储空间也以某种单位从1增加到f(n),那么就称此算法的空间复杂度为f(n);时间复杂度是指当问题的规模以某种单位从1增加到n时,解决这个问题的算法在执行时间所消耗的时间也以某种单位从1增加到f(n),那么就称此算法的时间复杂度为g(n)。空间单位一般规定为一个工作单元所占用的存储空间的大小,时间单位一半规定为一个程序步。
我们需要一种方式来把空间复杂度和时间复杂度的度量弄的更精确一些,人们提出了一种标准的记法,被称为“O记法”。在这种记法中使用的基本参数是n,也就是问题的规模,把复杂度表示为n的函数。这里的“O”是英文“Order”的缩写,此处的“Order”不是“顺序”的意思,而是代表“数量级”。比如说“数组遍历是O(n)的”,意思就是说“通过O(n)量级的步骤去遍历一个数组”。
2.1.2空间与时间的背反
我们总是追求程序通过占用最少的存储空间以最快的速度(即最少的CPU时间占用)来完成任务,但是这两者常常是此消彼涨的:当一个程序改进到能够占用更少存储空间的时候,它消耗的CPU时间就会增加;当一个程序改进到占用较少的CPU时间的时候,它占用的存储空间通常又会上升。
比如,计算高精度的PI值是非常消耗系统CPU时间的,而其占用的存储空间则相对较小。为了防止每次计算都消耗漫长的CPU时间,可以在一次计算以后把计算结果保存到存储器中,这样下次计算的时候直接从存储器中读取就可以了,这样占用的CPU时间就非常短了,但是占据的存储空间就增加了。
数据库的索引也是一个明显的例子。为了提高数据检索的速度,常常需要对数据表的字段建立索引,这样就可以用更少的CPU消耗来检索到需要的数据了,但索引是要占据存储空间,这就导致了存储空间的上升。
既然空间与时间的占用存在着这种背反性,那么必须在空间与时间的优化上找到一个平衡点。现代的计算机的存储器容量非常大,而且价格也非常低廉,而CPU则属于比较宝贵的资源,所以现代的程序设计更多的是以空间换取时间,也就是用较高的存储空间占用来换取较少的CPU时间。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值