更新時間:2022-05-31 來源:黑馬程序員 瀏覽量:
人工智能培訓課程中會講到許多算法,那么究竟什么是算法?
算法(algorithm)是解決特定問題的步驟描述,通俗地講,算法就是描述解決問題步驟的方法。例如,新學期開學,從家到學校的交通方式這個問題就有很多解決方案:有的學生乘坐火車,有的學生乘坐汽車,有的學生乘坐飛機,在本市的可能會自己開車或乘坐公共汽車,離學校近的可能會步行來學校。這里每一種方案就是一種算法,這么多解決方法就是這么多種算法。
在計算機中,算法也是對某一個問題的求解方法,只是它的表現(xiàn)形式是計算機指令的有序序列,執(zhí)行這些指令就能解決特定的問題。例如,在高級程序設計語言(如C語言)中,常用的排序算法如選擇排序、冒泡排序等,都是用計算機指令編寫算法,來解決排序問題。
在程序設計中,算法有3種較為常用的表示方法:偽代碼法、N-S結構化流程圖和流程圖法,用得最多的是流程圖法,接下來就簡單地學習算法的流程圖法。流程圖是描述問題處理步驟的一種常用圖形工具,它由一些圖框和流程線組成。使用流程圖描述問題的處理步驟,形象觀,便于閱讀。畫流程圖時必須按照功能選用相應的流程圖符號,常用的流程圖符號如圖所示。
圖1-12所示的流程圖符號中列舉了4個圖框、1個流程線和1個連接點,具體說明如下:
·起止框用于表示流程的開始或結束。
·輸入輸出框用平行四邊形表示,在平行四邊形內(nèi)可以寫明輸入或輸出的內(nèi)容。
·判斷框用菱形表示,它的作用是對條件進行判斷,根據(jù)條件是否成立來決定如何執(zhí)行后續(xù)的操作。
·處理框用矩形表示,它代表程序中的處理功能,如算術運算和賦值等。
·流程線用單向箭線或直線表示,可以連接不同位置的圖框。流程線的標準流向是從左到右和從上到下,可用直線表示,非標準流向的流程線應使用箭頭指示方向。
·連接點用圓形表示,用于流程圖的延續(xù)。通過上面的講解,讀者對流程圖符號有了簡單的認識。下面以一個數(shù)組選擇排序算法
的流程圖為例,學習簡單的流程圖,如圖所示。
假設一個數(shù)組要從小到大排序,結合流程圖來分析選擇排序的過程:
第一步,在數(shù)組中選擇出最小的元素,將它與0角標元素交換,即放在開頭第1位。
第二步,除0角標元素外,在剩下的待排序元素中選擇出最小的元素,將它與1角標元素交換,即放在第2位。
第三步,依次類推,直到完成最后兩個元素的排序交換,就完成了升序排列。這樣根據(jù)流程圖來編寫算法的指令代碼,就會變得清晰簡單。讀者在以后設計算法時,最好先根據(jù)設計思路出算法的流程圖,其次分析其可行性,最后再完成代碼。
算法的特性
一個好的算法,尤其是一個成熟的算法,應該具有以下5個特性:
(1)確定性。算法的每一步都有確定的含義,不會出現(xiàn)二義性。即在相同條件下,只有一條執(zhí)行路徑,相同的輸入只會產(chǎn)生相同的輸出結果。
(2)可行性。算法的每一步都是可執(zhí)行的,通過執(zhí)行有限次操作來完成其功能。
(3)有窮性。一個算法必須在執(zhí)行有窮步驟之后結束,且每一步都可在有窮時間內(nèi)完成。這里的有窮概念不是數(shù)學意義上的,而是指在實際應用當中可以接受的、合理的時間和步驟。
(4)高效率與低存儲。算法的效率通常指的是算法的執(zhí)行時間,對于同一個問題的多種算法,執(zhí)行時間短的其效率就高。存儲量指的是算法在執(zhí)行過程中所需的最大存儲空間,包括所用到的內(nèi)存及外存。設計算法時應考慮到執(zhí)行效率和存儲需求,設計出一個“性價比”較高的算法。
要設計出一個好的算法,就要綜合考慮其正確性、可讀性、健壯性,還要考慮其執(zhí)行效率和存儲量需求。