算法空间复杂度

来源:互联网 发布:pa数据 编辑:程序博客网 时间:2024/06/08 04:41
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。 
  当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(10g2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n).
比如java中int是4个字节,long是8个字节,你可以用long表示一个数字,long a=100,同样可以用int b=100;这样我们用int肯定比long要节省空间,再者就是同样让许多人编写一个C程序,其中用的变量的个数可能大不一样,变量越多可能你的程序越容易让别人看懂,但变量越少,程序可能看懂的人不多,不过现在都不再强调这复杂度,1G的内存多的是了,几个字节也不算什么了,不过在硬件驱动开发的时候比较讲究这个。
与时间复杂度的关系:对于某个程序,对他进行时间上的优化,可以想到用数组记录关键字,分治等方法。。。很多都是要用更多空间,甚至说当算法在基础空间下采用了最佳算法时,只有通过以空间换时间的方法优化。尤其是DP,对于不懂降维、滚动的新手来说,乱开内存导致爆cena的现象时有出现,曾经出现过开了2500MB+的。。。。。。但现在无论DEV C++还是FP或其它的什么都有极大的内存配置,考试时一般也允许开到128MB。所以放心开吧。

另外 在http://www.nowamagic.net/librarys/veda/detail/2197 里也有良好的讲述。