算法设计与分析:基于C++编程语言的描述
上QQ阅读APP看书,第一时间看更新

1.1.3 算法的描述方式

算法的设计者在构思和设计一个算法之后,必须清楚准确地将所设计的求解步骤记录下来,这就是算法描述。

算法可以使用各种不同的方式来描述,常用的描述方式有自然语言、图形、程序设计语言和伪代码等。下面以欧几里得算法为例逐一介绍它们的具体操作方法。

欧几里得算法的功能是:求两个非负整数ab的最大公约数。通常采用辗转相除法来实现该功能,其过程为:当b不为0时,辗转用操作r=a%ba=bb=r消去相同的因子,直到b为0时,a的值即为所求的解。

1.自然语言

自然语言也就是人们日常进行交流的语言,如汉语、英语等。其最大的优点是简单、通俗易懂,缺点是不够严谨、烦琐且不能被计算机直接执行。

欧几里得算法用自然语言描述如下:

(1)输入ab

(2)判断b是否为0,如果不为0,转步骤(3);否则转步骤(4)。

(3)ab取余,其结果赋值给rb赋值给ar赋值给b,转步骤(2)。

(4)输出a,算法结束。

2.图形

常用来描述算法的图形工具主要包括流程图、N-S图和PAD图。其优点是直观形象、简洁明了,缺点是画起来费事、不易修改且不能被计算机直接执行。下面以流程图为例简单介绍一下该算法描述方式。

欧几里得算法用流程图描述如图1-1所示。

图1-1 欧几里得算法的流程图

3.程序设计语言

程序设计语言通常是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的“符号系统”。该方式的优点是描述的算法能在计算机上直接执行。缺点是抽象性差、不易理解且有严格的格式要求和语法限制等,这给用户带来了一定的不便。但是对于从事计算机研究的专业人士,熟练掌握一门程序设计语言是最基本的条件。

本书采用程序设计语言C++来描述算法。选用该语言的理由有两点:一是它全面兼容C语言,保持了C语言的简洁、高效、良好的可读性和可移植性等特点,并对C语言的类型系统进行了改革和扩充,因此比C语言更安全,其编译系统能检查出更多的类型错误;二是支持面向对象的方法。

欧几里得算法用C++语言描述如下:

     class OJLD{
          int a,b;                //a和b是私有数据成员
       public:
          OJLD(int m,int n)       //OJLD是带两个整型参数的构造函数
           {a=m;b=n;}
          void zzf()              //zzf是类的成员函数,用于计算a和b的最大公约数
              {
              int r;
              while(b!=0)
                {r=a%b;a=b;b=r;}
              cout<<"a与b的最大公约数是:"<<a<<endl;
             }
      };                          //类OJLD的定义结束

4.伪代码

为了解决理解与执行之间的矛盾,人们常常使用一种称为伪代码语言的描述方式来对算法进行描述。伪代码是介于自然语言与程序设计语言之间的一种文字和符号结合的算法描述工具,它忽略了程序设计语言中一些严格的语法规则与描述细节,因此它比程序设计语言更容易描述和被人理解;它比自然语言更接近程序设计语言,因而较容易转换为能被计算机直接执行的程序。因此,对于计算机专业的初学者或非计算机人士来说,使用伪代码来描述算法是一个不错的选择。

欧几里得算法用伪代码描述如下:

     Begin{算法开始}
        Step1:input a,b;
        Step2:if(b不等于0)执行Step3,否则执行Step4;
        Step3:r=a%b,a=b,b=r,转Step2;
        Step4:output a;
     End{算法结束}