计算机程序设计艺术(第I卷)(续2)

类别:软件工程 点击:0 评论:0 推荐:
    3)输入    一个算法有0个或多个的输入。它即是,在算法开始之前,对算法最初给出的量。这些输入取自于特定的对象集合。例如,在算法E中,有两个输入,即m和n,它们都取自于正整数集合。
    4)输出    一个算法有一个或多个的输出。它即是,同输入有某个特定关系的量。算法E有一个输出,即是步骤E2中的n,它是两个输入的最大公因子。
    (此数确实是最大公因子,我们可以很容易证明如下。在步骤E1后,我们有
              m=qn+r
其中q是某个整数。若r=0,则m是n的一个倍数,且显然在这种情况下,n就是m和n的最大公因子。若r≠0,注意同时除尽m和n两数的任何数必定也除尽m-qn=r,而且同时除尽n和r两数的任何数必定也除尽qn+r=m;所以m和n的公因子的集合必定与n和r的公因子的集合相同,而且,特别地,m和n的最大公因子与n和r的最大公因子相同。因此步骤E3并不改变原来问题的答案)。
    5)能行性    一般说来,还期望一个算法是能行的。这意味着算法中所有有待实现的运算必须都是相当基本的,即是说,它们原则上都是能够精确地进行的,而且人们用笔和纸做有穷次即可完成。算法E仅仅使用一个正整数除以另一个正整数的除法,测试一个整数是否为0,并置一个变量的值等于另一个变量的值这样一些运算。这些运算都是能行的,因为整数可以用有穷的方式在纸上表示之,而且至少有一个方法(“除法算法”)来进行一个整数除以另一个整数的运算。但若两数之值是由无穷的十进展开所确定的任何实数,则同一运算就不是能行的。又若两数之值是不能精确地加以确定的物理线段的长度,则同一运算也就不是能行的。非能行的步骤的另一个例子是,“如果2是使方程 ‘x的n次方+y的n次方=z的n次方’ 有正整数解x,y,z的n当中最大的整数,则进行步骤E4”。这样一个语句不是一个能行的运算,除非有人能够说明有一个算法来确定2是否具有所说的性质的最大整数。

(未完待续)

本文地址:http://com.8s8s.com/it/it35046.htm