官术网_书友最值得收藏!

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{算法結束}
主站蜘蛛池模板: 景洪市| 临城县| 吕梁市| 奉化市| 吐鲁番市| 平和县| 宣恩县| 观塘区| 桃园市| 玛沁县| 胶南市| 嘉义市| 西峡县| 合山市| 平乡县| 宜丰县| 布拖县| 大悟县| 齐河县| 凤冈县| 乾安县| 固镇县| 浮山县| 翼城县| 秭归县| 红原县| 凤城市| 黔西| 读书| 清水县| 鲁山县| 通许县| 西丰县| 山东省| 防城港市| 呼和浩特市| 北安市| 固安县| 云龙县| 定西市| 乐山市|