更新時間:2020-12-29 17:48:27 來源:動力節(jié)點 瀏覽1256次
算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。算法概念的誕生到如今算法體系的成熟,經(jīng)歷了許多的波折,也孕育出了許多的優(yōu)質(zhì)算法。算法本身還是人為設計出來的,因此,算法設計要求也是客觀存在的。
算法中的指令描述的是一個計算,當其運行時能從一個初始狀態(tài)和(可能為空的)初始輸入開始,經(jīng)過一系列有限而清晰定義的狀態(tài),最終產(chǎn)生輸出并停止于一個終態(tài)。一個狀態(tài)到另一個狀態(tài)的轉(zhuǎn)移不一定是確定的。也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時間內(nèi)獲得所要求的輸出。如果一個算法有缺陷,或不適合于某個問題,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。下面我們從這些對算法的描述出發(fā)來看算法的設計要求。
1.正確性
算法至少應該具有輸入,輸出和加工處理無歧義性,能正確反映問題的需求,能夠得到問題的正確答案 算法程序沒有語法錯誤 算法程序?qū)τ诤戏ㄝ斎肽軌虍a(chǎn)生滿足要求的輸出。
2.可讀性(算法設計另一目的是為了便于閱讀,理解和交流)
算法主要是為了人的閱讀與交流,其次才是機器執(zhí)行。可讀性好有助于人對算法牟理解;晦澀難懂的程序易于隱藏較多錯誤,難以調(diào)試和修改。
3.健壯性
當輸入數(shù)據(jù)非法時,算法也能適當?shù)刈龀龇磻蜻M行處理,而不會產(chǎn)生黃曉明其妙的輸出結(jié)果。例如,一個求凸多邊形面積的算法,是采用求各三角形面積之和的策略來解決問題的。當輸入的坐標集合表示的是一個凹多邊形時,不應繼續(xù)計算,而應報告輸入出錯。并且處理出錯的方法應是返回一個表示錯誤或錯誤性質(zhì)的值,而不是打印錯誤信息或異常,并中止程序的執(zhí)行,以便在更高的抽象層次上進行處理。
4.時間效率高和存儲量低
通俗地說,效率指的是算法執(zhí)行的時間。對于同一個問題如果有多個算法可以解決,執(zhí)行時間短的算法效率高。存儲量需求算法執(zhí)行過程中所需要的最大存儲空間。效率與低存儲量需求這兩者都與問題的規(guī)模有關。求 100 個人的平均分與求 1000 個人的平均分所花的執(zhí)行時間或運行空間顯然有一空差別。
顯然,同一個算法用不同的語言實現(xiàn),或者用不同的編譯器進行編譯,或者在不同的計算機運行時,效率均不相同。這表明使用絕對的時間單位衡量算法的效率是不合適的。撇開這些與計算機硬件、軟件有關的因素,可以認為一個特定算法“運行工作量”的大小,只依賴于問題的規(guī)模(通常用整數(shù)量 n 表示),或者說,它是問題規(guī)模的函數(shù)。
以上就是算法設計要求的全部內(nèi)容,只有滿足這些要求,設計出來的算法才能算是合理的。從某種程度上來說,算法設計要求和算法的一些特征是不謀而合的。想要設計出一個優(yōu)秀的算法,還是有很大難度的,我們只能量力而行,在本站的數(shù)據(jù)結(jié)構(gòu)和算法教程中先學習一些廣為人知的優(yōu)秀算法,得出自己的心得,以便我們設計出合格的算法。