演算法-程序的靈魂
?一個程序主要包括以下兩方面的信息:
(1)對數據的描述。在程序中要指定用到哪些數據以及這些數據的類型和數據的組織形式
u這就是數據結構(datastructure)
(2)對操作的描述。即要求計算機進行操作的步驟
u也就是演算法(algorithm)
?數據是操作的對象?操作的目的是對數據進行加工處理,以得到期望的結果?著名計算機科學家沃思(NikiklausWirth)提出一個公式:
演算法+數據結構=程序
μ演算法是靈魂,數據結構是加工對象,語言是工具,編程需要採用合適的方法。
?廣義地說,為解決一個問題而採取的方法和步驟,就稱為「演算法」?對同一個問題,可以有不同的解題方法和步驟?為了有效地進行解題,不僅需要保證演算法正確,還要考慮演算法的質量,選擇合適的演算法
?計算機演算法可分為兩大類別:u數值運算演算法u非數值運算演算法?數值運算的目的是求數值解?非數值運算包括的面十分廣泛,最常見的是用於事務管理領域
下面以一個簡單演算法為列。
?一個有效演算法應該具有以下特點:
(1)有窮性。一個演算法應包含有限的操作步驟,而不能是無限的。
(2)確定性。演算法中的每一個步驟都應當是確定的,而不應當是含糊的、模稜兩可的。
(3)有零個或多個輸入。所謂輸入是指在執行演算法時需要從外界取得必要的信息。
(4)有一個或多個輸出。演算法的目的是為了求解,「解」就是輸出。
u沒有輸出的演算法是沒有意義的。
(5)有效性。演算法中的每一個步驟都應當能有效地執行,並得到確定的結果。
怎樣表示一個演算法
?常用的方法有:
u自然語言
u傳統流程圖
u結構化流程圖
u偽代碼……
?用自然語言表示通俗易懂,但文字冗長,容易出現歧義性?用自然語言描述包含分支和循環的演算法,不很方便?除了很簡單的問題外,一般不用自然語言。
?通過以上幾個例子可以看出流程圖是表示演算法的較好的工具?一個流程圖包括以下幾部分:
(1)表示相應操作的框
(2)帶箭頭的流程線
(3)框內外必要的文字說明
?流程線不要忘記畫箭頭,否則難以判定各框的執行次序
三種基本結構和改進的流程圖
1.傳統流程圖的弊端
?傳統的流程圖用流程線指出各框的執行順序,對流程線的使用沒有嚴格限制?使用者可以毫不受限制地使流程隨意地轉來轉去,使人難以理解演算法的邏輯
三種基本結構
(1)順序結構
(2)選擇結構
(3)循環結構
①當型循環結構
②直到型循環結構
?以上三種基本結構,有以下共同特點:
(1)只有一個入口
(2)只有一個出口
l一個判斷框有兩個出口
l一個選擇結構只有一個出口
(3)結構內的每一部分都有機會被執行到。也就是說,對每一個框來說,都應當有一條從入口到出口的路徑通過它
(4)結構內不存在「死循環」
?一個結構化的演算法是由一些基本結構順序組成的
?在基本結構之間不存在向前或向後的跳轉,流程的轉移只存在於一個基本結構範圍之內
?一個非結構化的演算法可以用一個等價的結構化演算法代替,其功能不變
?如果一個演算法不能分解為若干個基本結構,則它必然不是一個結構化的演算法


TAG:國風士子 |