算法的正確性

我們面對一個 Problem,如排序問題時,我們會想到相應(yīng)的候選算法如快速排序(Quicksort),歸并排序(Merge sort)和堆排序(Heapsort)等,然后我們會去分析它們相應(yīng)的時間復(fù)雜度和空間復(fù)雜度,以選取符合我們應(yīng)用場景和需求的一個作為 Solution。

但在我們實現(xiàn)算法后,往往我們不知道或者不會去做的一步是證明算法的正確性

為什么要證明算法的正確性

假設(shè)計算機運行速度無限快,內(nèi)存無限大,那么是否還有必要學(xué)習(xí)算法呢?答案是肯定的,我們必須確保算法的正確性,否則無論你的算法運行得多么快,如果是錯誤的算法,得到錯誤的答案,那么一點用處都沒有。

在實現(xiàn)算法后,我們可以寫單元測試去驗證它是否如期運行,寫多種情況下的 test case。但對于某些算法我們不可能寫出所有輸入-期望輸出對,例如一個排序算法接受一個 list 的參數(shù),這個 list 的長度是為自然數(shù)的,也就是它可以為無窮大,因此單元測試實際上不可能覆蓋所有輸入-期望輸出對。
而正確性可以從理論層面上證明算法在接受 domain 內(nèi)任意輸入后,能產(chǎn)生期望的正確的輸出。

證明算法正確性的方法

算法內(nèi)部計算使用的方式,一般有循環(huán)和遞歸,分別可以使用循環(huán)不變量結(jié)構(gòu)歸納來證明它的正確性,在未來幾篇文章里會講解它們的概念和用法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容