在我们遇到问题的时候,首先在大脑形成一种解题思路,然后根据可行的思路运用具体的步骤解决问题。在程序设计中,也需要有一种编程思路,这就是算法。
算法的概念
广义上的算法指的是解决问题的方法。就程序设计而言,算法是指计算机求解某一问题而采用的具体方法、步骤。事实上,在日常生活中解决问题经常要用算法,只是通常不用“算法”这个词罢了,例如,乐谱是乐队指挥和演奏的算法;菜谱是厨师做菜的算法,等等。
在程序设计中,算法应该能够离散成具体的若干个操作步骤,每一个步骤都是能够用程序设计语言提供的语句或者语句串来完成的。
例如,求两个整数中较大的数。解决这个问题的算法如下:
第1步 开始
第2步 输入两个整数a、b。
第3步 比较a,b的大小,如果a>b,输出a,否则输出b。
第4步 结束。
需要注意的是,程序是有开始和结束的,所以算法必须有“开始”和“结束”
计算机解题算法分为两大类:数值运算和非数值运算算法。数值运算算法解决的是求数值的问题,运用一定的求值公式如二元一次方程的求根公式、圆面积的计算公式等。这类算法相对比较成熟。非数值运算的算法涉及的内容比较广,而且难以量化,一般都需要参考已有的类似算法,针对具体问题重新设计。
算法的特点
解决问题我们需要一个可行的算法,而如何取衡量这个算法是否得当,是否可行呢?通常,算法具有以下5个重要的特征。
- 有穷性
一个算法应包括有限个操作步骤,其中每一步都应在合理的时间范围内完成。有的可能要花很长的时间来执行指定的任务,但仍将在一定的时间内终止。执行的时间没有严格的限制,受所要处理问题的约束。
- 确定性
算法在指导计算执行每步程序时,这些指令都是明确的,没有任何歧义。例如:
输出:A/正整数
是无法执行的,因为正整数指的是一类数,没有指定A除以哪一个正整数,所以这个步骤是不确定的。
- 有效性
算法中的每个步骤都应该