3.1 如何让机器自动计算一个多项式
假设机器有一个运算器,该运算器仅能够完成两个操作数的加法、减法、乘法和除法等简单运算,并保存临时计算结果。同时有一个存储器,用于存储数据和程序。该机器能够完成取数据(即将存储器中数据取到运算器中)、存数据(即将运算器中数据保存到存储器中)等功能。下面来看是如何让这台机器完成一个复杂计算的。
示例1 让机器自动计算一个多项式8×32+ 2×3 + 6。
如何计算呢?下面给出计算该多项式的一个算法。这里,“算法”是指一组有先后次序的计算步骤。如果算法所涉及的计算步骤都是机器可以直接执行的基本步骤,则该算法便被认为是机器级算法。
算法1
Step 1:取出数3至运算器中。
Step 2:乘以数3(在运算器中)。
Step 3:乘以数8(在运算器中)。
Step 4:存数8*3*3至存储器中。
Step 5:取出数2至运算器中。
Step 6:乘以数3(在运算器中)。
Step 7:加上8*3*3(在运算器中)。
Step 8:加上数6(在运算器中)。
上述算法将示例中的多项式分解成了8个步骤,依序让机器执行,便可获得计算结果。该示例揭示,虽然机器仅能完成简单运算,但通过按一定次序编排,组合这些简单运算便可实现各式各样复杂的运算。
还有无其他算法呢?做一个简单的变换:8×32+ 2×3 + 6=(8×3+2)×3+6。按变换后的式子给出一个算法。
算法2
Step 1:取出数3至运算器中。
Step 2:乘以数8(在运算器中)。
Step 3:加上数2(在运算器中)。
Step 4:乘以数3(在运算器中)。
Step 5:加上数6(在运算器中)。
可以看出,算法2比算法1节省了3个步骤。不要看低节省3个步骤的作用,要知道这是在机器层级,这样的程序可能要被执行成千上万遍,因此哪怕节省一步都是机器计算性能的重要改进。这也告诉我们,算法是需要优化的,尤其机器级的算法更需要优化。
虽然上述算法看起来可被机器执行,但确实只是“看起来”,因为它还不够严谨,离真正能让机器执行还有差距。怎样解决呢?这就需要理解数据在机器中如何表达、机器的功能如何表达、机器级算法如何表达为机器可以执行的程序等。