算法與程序有什么區(qū)別?
人帥被人欺
算法是為一個(gè)問題或一類問題給出的解決方法與具體步驟,是對(duì)問題求解過程的一種準(zhǔn)確而完整的邏輯描述。程序則是為了用計(jì)算機(jī)解題或控制某一過程而編排的一系列指令的集合。程序不等于算法。但是,通過程序設(shè)計(jì)可以在計(jì)算機(jī)上實(shí)現(xiàn)算法。
你可能解答過一個(gè)有趣的問題——“人、狼、羊過河”問題。有個(gè)人帶著三只狼、三只羊,要過河去。有一條小船。船上除了運(yùn)載一個(gè)人外,至多再載狼或羊中的任意兩只。但難點(diǎn)是:當(dāng)人不在場(chǎng)時(shí),如果狼的數(shù)量大于等于羊的數(shù)量,那么羊會(huì)被狼吃掉。為了安全過河,你有什么辦法呢?
解決它的算法有多個(gè),其中一個(gè)解決方案是這樣的:
開始,運(yùn)一只狼過河,空船回來;
接著,運(yùn)一只狼和一只羊再過河,到對(duì)岸后,再運(yùn)兩只狼回來;
然后,運(yùn)兩只羊過河,空船回來;
最后,分兩次將狼全部運(yùn)過河;
由此,過河問題就得以解決了。
可見,算法是為一個(gè)問題或一類問題給出的解決方法與具體步驟,是對(duì)問題求解過程的一種準(zhǔn)確而完整的邏輯描述。它由有限步驟的操作序列組成,代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制。
算法是一組嚴(yán)謹(jǐn)定義運(yùn)算順序的規(guī)則,每一個(gè)規(guī)則都是有效的、明確的,此順序必須在有限的次數(shù)下終止。在上面的過河問題中,如果第一步中改為:“運(yùn)一只狼過河,再運(yùn)這只狼回來”,那么,說明人沒找到好辦法,在反復(fù)進(jìn)行無用操作。此類算法,是失敗的,永遠(yuǎn)也實(shí)現(xiàn)不了既定目標(biāo)。
算法描述,一般可以使用漢、英等自然語言,比較通俗易懂。也可以使用流程圖、偽代碼表格等其他工具。
在古代,算法通常用于數(shù)值計(jì)算。中國(guó)古代的籌算口訣、珠算口訣及其執(zhí)行規(guī)則就是算法的雛形。它所解決的是數(shù)值計(jì)算問題?,F(xiàn)代算法,已超出數(shù)值計(jì)算范圍。
程序則是為了用計(jì)算機(jī)解題或控制某一過程而編排的一系列指令的集合。這些指令,可以是計(jì)算機(jī)的機(jī)器指令,也可以是匯編語言和高級(jí)程序設(shè)計(jì)語言。
程序不等于算法。但是,通過程序設(shè)計(jì)可以在計(jì)算機(jī)上實(shí)現(xiàn)算法。在實(shí)際應(yīng)用中,也許只需一條(組)程序設(shè)計(jì)語句,就可以完成算法的基本要素處理,包括數(shù)據(jù)對(duì)象的運(yùn)算和操作,以及順序、選擇、循環(huán)結(jié)構(gòu)的控制。通過程序模塊設(shè)計(jì),可以實(shí)現(xiàn)算法中的遞推、遞歸、迭代等一系列基本算法,也包括形式演繹、數(shù)據(jù)結(jié)構(gòu)、數(shù)論圖論、加密解密、科學(xué)決策等復(fù)雜算法。
因此,運(yùn)用計(jì)算機(jī)解決問題的過程,通常可以分成三個(gè)階段:分析問題、設(shè)計(jì)算法和編制程序?qū)崿F(xiàn)算法。由于計(jì)算機(jī)運(yùn)算速度快,存儲(chǔ)數(shù)據(jù)量大,大大提高了算法實(shí)現(xiàn)效率。