4.时效高和存储量低
1.时间效率高
比如之前我们所说的高斯算法的程序应用。不同的运算方法会有着不同的循环次数和运算时间。时效越高,算法越好
2.尽可能小的存储量需求
如果某个算法造成了大量的内存空白和冗余,一个程序占了大量的运算空间,这也不是合理的算法设计。
关于效率的度量
一般来说,对于效率的度量,一般使看效果,一个是看预估的效率。就是事后统计和事前估算。
事后统计是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间及逆行比较,从而确定算法效率的高低。
由于事后统计太过占用资源,而且照成大量的时间浪费,效果和后果因为不预估可能会造成无法想像的结果。所以时候统计的方法就被废除了。
现在留给我们的就剩下了事前预估。
经过研究,高级语言编写的程序在计算机上运行所消耗的时间取决于以下因素
1.对于问题所采用的策略,方法(根本)
2.编译产生的代码质量(软件支持)3.问题输入的规模4.机器执行指令的速度(硬件的性能)
根据之前提到四点我在1,2,4点的后面加的括号,使限制他们的条件。第一条的策略和方法是你对问题设计的根本中的根本,之后都是按照这个计划进行设计。第二条的代码质量,这是需要软件支持,具体参照我之前写的代码质量和设计标准来理解。第四条的机器执行指令速度,这是对硬件的性能要求,这个比较好理解,第一代的苹果电脑的运算能力肯定不及现在最新的麦金塔。内存,软件编译,cpu运算能力这都是硬件层面的门槛和限制。
所以,到最后最不可控的就是问题的输入规模。
也就是说,一个程序的运行时间,依赖于算法的好坏的问题的输入规模。所谓问题输入规模是指输入量的多少。
最终,在分析程序的运行时间时,最重要的时把程序看成时独立于程序设计语言的算法或一些列步骤。
函数的渐进增长
(这个地方的内容实际上很多,我通过自己的理解,尽可能简单一点讲给你们听,但是这仅仅是我通过《大话数据结构》学到的相对简易的,难度大一点的就要从新进行系统的分析了)
输入规模n在没有限制的情况下,超过一个数值N,该函数就总是大于另一个函数,函数渐进增长。
ps:常数项是可以忽略,同时最高次项相乘的常数。
总结:判断效率,常数和次要项可以忽略,我们更应该关注(最高阶项)的阶数,可以理解为指数越大,增长越大。
ps:
很抱歉这段时间学校的一些事情让我没有精力来整理学习笔记和资料,所以这次写的有点草,更新也咕了。
接下来我会专门写一篇关于时间复杂度的博客,这个地方对很多人来说是个难点,我会着重来讲,会努力写的形象一点的。
点看看一眼就是支持,点个赞真的十分感谢!!!!!