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