1.1 算法的基本概念
1.1.1 算法的含义
算法和我们的生活息息相关。从广义的角度来说,算法是为了解决某一问题而采用的方法与步骤。例如:对于乐队来说,乐谱就是他们进行演奏和指挥的算法;对于厨师来说,菜谱就是用来烧菜的算法。
举例说明:假设现在厨师需要做一盘西红柿炒鸡蛋,基本步骤如下所示。
步骤1:准备食材;
步骤2:点好燃气,打开油烟机;
步骤3:放油入锅,烧热;
步骤4:放入鸡蛋,翻炒;
步骤5:放入西红柿,炒匀;
步骤6:放入盐,继续翻炒;
步骤7:熄火,将菜盛入盘中。
上述做菜步骤就称为厨师炒制“西红柿炒鸡蛋”的算法。
再比如金币问题,假设一位商人有9枚金币,其中有一枚是假币,其比其他金币略微轻一些,现在有一台没有砝码的天平,如何借助它把假币找出来,请思考解决这个问题的算法。
(1)算法1
步骤1:任取一枚金币放在天平的左边,再取一枚金币放在右边。若不平衡,则轻的一边是假币;否则,进行步骤2。
步骤2:取下右边的金币,把其余的金币依次放入天平的右边,直到天平不平衡为止,则轻的一边是假币。
(2)算法2
步骤1:将金币两个一组分别放在天平的两端,若天平不平衡,则轻的一边是假币;否则,进行步骤2。
步骤2:重复执行步骤1,如果前四组都平衡,则最后一枚是假币。
(3)算法3
步骤1:将9枚金币按三个一组分为三组。
步骤2:取出两组放在天平的两端,若不平衡,则轻的一边有假币,即假币在轻的一组中;否则,假币就在未放上天平的一组中。
步骤3:选择含有假币的那组,取出其中的任意两枚放在天平的两端。若天平不平衡,则轻的一边是假币;否则,未放上天平的是假币。
在计算机中,算法是为了解决具体的问题而设计的一系列计算步骤,以处理用户输入的数据并将其转换成结果输出,如图1.1所示。算法对于我们来说是工具,可用来解决实际问题。如果一个算法对于任意一个输入都能够输出正确的结果并终止,就称它为正确的算法;反之,就称它为错误的算法。在解决问题的时候,我们需要思考并关注如何给出正确的算法。
【例1.1】假设有两个杯子,杯子a中放的是牛奶,杯子b中放的是水,写出交换两个杯子中液体的算法。

图1.1 算法的含义
思路:如果想要交换,则必须借助第三个(空)杯子t。
步骤1:将杯子a中的牛奶倒入杯子t中。
步骤2:将杯子b中的水倒入杯子a中。
步骤3:将杯子t中的牛奶倒入杯子b中。
【例1.2】写出在有限整数序列中找到最大值的算法。
步骤1:假设第一个数就是最大值max。
步骤2:从第二个数开始将它们依次与max做比较,如果发现有大于max的数,就让max等于这个数。
步骤3:重复步骤2,直到比完最后一个数为止。
步骤4:此时,max中存放的就是最大数。
【例1.3】写出求三个整数中最小数的算法。
步骤1:假设第一个数a就是最小值min。
步骤2:对第二个数b与min进行比较,如果b小于min,令min=b。
步骤3:对第三个数c与min进行比较,如果c小于min,令min=c。
步骤4:此时,min中放的就是三个整数中的最小数。