位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 如何衡量算法的优劣

提问人:刘团圆发布时间:2020-11-27

如何来衡量一个算法的好坏,通常要从以下几个方面来分析,如图所示。

image.png

1.正确性

    正确性是指所写的算法能满足具体问题的要求,即对任何合法的输入,算法都会得出正确的结果。


2.可读性

    可读性是指算法被写好之后,该算法被理解的难易程度。一个算法可读性的好坏十分重要,如果一个算法比较抽象,难于理解,那么这个算法就不易交流和推广,对于修改、扩展、维护都十分不利。所 以在写算法的时候,要尽量将该算法写得简明易懂。

3.健壮性

    —个程序完成后,运行该程序的用户对程序的理解因人而异,并不能保证每个人都能按照要求进行输入,健壮性就是指当输入的数据非法时,算法也会做出相应的判断,而不会因为输入的错误造成程序瘫痪。


4.时间复杂度与空间复杂度

    时间复杂度,简单地说就是算法运行所需要的时间。一个程序在计算机中运行时间的长短与很多因素相关,这些因素主要有:

    ©问题规模的大小。例如,求10的阶乘和求100的阶乘所花费的时间是有明显差异的,显然,求100的阶乘所花费的时间要比求10的阶乘花费的时间多得多。

    ©源程序编译功能的强弱以及经过编译后产生的机器代码质量的优劣。

    ©机器执行一条目标指令所需要的时间。这个因素是与计算机系统的硬件息息相关的,随着硬件技术的提高,硬件性能越来越好,执行一条目标指令所花费的时间也会相应地越来越少。

    ©程序中语句的执行次数。这个因素与算法本身有直接关系,一个好的算法应该使程序中语句执行次数尽量少。

由于同一个算法使用不同的计算机语言实现的效率会不相同,使用不同的编译器编译效率也不相同,运行于不同的计算机系统中效率也不相同,因此使用前3个因素来衡量一个算法的时间复杂度通常是不恰当的。因此我们使用第4个因素,即将程序中语句的执行次数作为一个算法的时间复杂度的度量。

    不同的算法具有不同的时间复杂度,当一个程序较小时,往往感觉不到时间复杂度的重要性,当一个程序特别大时,便会察觉到时间复杂度实际上是十分重要的,所以如何写出更高速的算法一直是算法不断改进的目标。

    空间复杂度是指算法运行所需的存储空间的大小。一个算法在计算机存储器上所占用的存储空间包括算法本身所占的存储空间、算法的输入/输出数据所占的存储空间,以及算法运行过程中所占用的临时存储空间。随着计算机硬件的发展,空间复杂度已经显得不再那么重要了,但在编程时也应该注意。


继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部