1. 程式人生 > >ACM 演算法競賽 八大基礎演算法 模擬法 字串 遞迴分治 排序 列舉 貪心 遞推

ACM 演算法競賽 八大基礎演算法 模擬法 字串 遞迴分治 排序 列舉 貪心 遞推

查閱了一些資料,對幾個基礎演算法做一個思路上的彙總。

1.模擬法:

將自然的過程或者語言直白的程式化,比如題目中的求解過程,我們直接程式化模擬求解。

2.字串處理:

常用的字串操作,KMP字串匹配演算法(用於複雜度高,需要優化時)。

3.遞迴:

古之慾明明德於天下者,先治其國;欲治其國者,先齊其家;欲齊其家者,先修其身;欲修其身者,先正其心;欲正其心者,先誠其意;欲誠其意者,先致其知,致知在格物。物格而後知至,知至而後意誠,意誠而後心正,心正而後身修,身修而後家齊,家齊而後國治,國治而後天下平。

當棧底不可見的時候,我們更適合用遞迴,當然遞迴也可以轉化為 陣列或變數和迴圈,但大多數情況下沒有這個必要。
很多簡單的遞迴我們完全可以利用迴圈來解決。比如很淺的呼叫之前的資料,且資料量固定。
和迴圈相比是兩種思考的方向。

4.分治法:

將大的問題轉化為很多小問題來解決,比如我要給8個數排序,我可以先給兩組4個數排序,給4個數排序可以先給兩組兩個數排序,這樣就講大問題化成了小問題。

5.排序:

熟練的掌握sort()的用法。sort(arr,arr+len,cmp),瞭解各大排序法的思想。

6.列舉法:

當可能的結果不多時,我們可以利用模擬法求解,然後利用陣列儲存,直接利用列舉法進行匹配。

7.貪心演算法:

選擇目前的最優解,還要選取合適的策略,此處的最優解可以累積成為最後的最優解。對於一些處理過的值,可以進行標記和儲存,便於我們從中選擇最優解,並在最優解的基礎上更加接近最後的最優解。

8.遞推法:

分為順推和逆推,根據相對應的關係和值進行遞推,比如斐波那契數列就是順推。順推有點像模擬。