十類常用演算法

2021-08-28 15:33:59 字數 3306 閱讀 7097

1. 蒙特卡羅演算法。該演算法又稱隨機性模擬演算法,是通過計算機**來解決問題的演算法,同時可以通過

模擬來檢驗自己模型的正確性,幾乎是比賽時必用的方法。

2. 資料擬合、引數估計、插值等資料處理演算法。比賽中通常會遇到大量的資料需要處理,而處理資料

的關鍵就在於這些演算法,通常使用matlab 作為工具。

3. 線性規劃、整數規劃、多元規劃、二次規劃等規劃類演算法。建模競賽大多數問題屬於最優化問題,很

多時候這些問題可以用數學規劃演算法來描述,通常使用lindo、lingo 軟體求解。

4. 圖論演算法。這類演算法可以分為很多種,包括最短路、網路流、二分圖等演算法,涉及到圖論的問題可以

用這些方法解決,需要認真準備。

5. 動態規劃、回溯搜尋、分治演算法、分支定界等計算機演算法。這些演算法是演算法設計中比較常用的方法,

競賽中很多場合會用到。

6. 最優化理論的三大非經典演算法:模擬退火演算法、神經網路演算法、遺傳演算法。這些問題是用來解決一

些較困難的最優化問題的,對於有些問題非常有幫助,但是演算法的實現比較困難,需慎重使用。

7. 網格演算法和窮舉法。兩者都是暴力搜尋最優點的演算法,在很多競賽題中有應用,當重點討論模型本

身而輕視演算法的時候,可以使用這種暴力方案,最好使用一些高階語言作為程式設計工具。

8. 一些連續資料離散化方法。很多問題都是實際來的,資料可以是連續的,而計算機只能處理離散的

資料,因此將其離散化後進行差分代替微分、求和代替積分等思想是非常重要的。

9. 數值分析演算法。如果在比賽中採用高階語言進行程式設計的話,那些數值分析中常用的演算法比如方程組

求解、矩陣運算、函式積分等演算法就需要額外編寫庫函式進行呼叫。

10. 圖象處理演算法。賽題中有一類問題與圖形有關,即使問題與圖形無關,**中也會需要來說明

問題,這些圖形如何展示以及如何處理就是需要解決的問題,通常使用matlab 進行處理。

以下將結合歷年的競賽題,對這十類演算法進行詳細地說明。

2 十類演算法的詳細說明

2.1 蒙特卡羅演算法

大多數建模賽題中都離不開計算機**,隨機性模擬是非常常見的演算法之一。

舉個例子就是97 年的a 題,每個零件都有自己的標定值,也都有自己的容差等級,而求解最優的

組合方案將要面對著的是乙個極其複雜的公式和108 種容差選取方案,根本不可能去求解析解,那如何

去找到最優的方案呢?隨機性模擬搜尋最優方案就是其中的一種方法,在每個零件可行的區間中按照正

態分布隨機的選取乙個標定值和選取乙個容差值作為一種方案,然後通過蒙特卡羅演算法**出大量的方

案,從中選取乙個最佳的。另乙個例子就是去年y的彩票第二問,要求設計一種更好的方案,首先方案的

優劣取決於很多複雜的因素,同樣不可能刻畫出乙個模型進行求解,只能靠隨機**模擬。

2.2 資料擬合、引數估計、插值等演算法

資料擬合在很多賽題中有應用,與圖形處理有關的問題很多與擬合有關係,乙個例子就是98 年美國

賽a 題,生物組織切片的三維插值處理,94 年a 題逢山開路,山體海拔高度的插值計算,還有吵的沸沸

揚揚可能會考的「非典」問題也要用到資料擬合演算法,觀察資料的走向進行處理。此類問題在matlab

中有很多現成的函式可以呼叫,熟悉matlab,這些方法都能游刃有餘的用好。

2.3 規劃類問題演算法

競賽中很多問題都和數學規劃有關,可以說不少的模型都可以歸結為一組不等式作為約束條件、幾

個函式表示式作為目標函式的問題,遇到這類問題,求解就是關鍵了,比如98年b 題,用很多不等式完

全可以把問題刻畫清楚,因此列舉出規劃後用lindo、lingo 等軟體來進行解決比較方便,所以還需要熟

悉這兩個軟體。

2.4 圖論問題

98 年b 題、00 年b 題、95 年鎖具裝箱等問題體現了圖論問題的重要性,這類問題演算法有很多,包

括:dijkstra、floyd、prim、bellman-ford,最大流,二分匹配等問題。每乙個演算法都應該實現一遍,否則

到比賽時再寫就晚了。

2.5 計算機演算法設計中的問題

計算機演算法設計包括很多內容:動態規劃、回溯搜尋、分治演算法、分支定界。比如92 年b 題用分枝

定界法,97 年b 題是典型的動態規劃問題,此外98 年b 題體現了分治演算法。這方面問題和acm 程式

設計競賽中的問題類似,推薦看一下《計算機演算法設計與分析》(電子工業出版社)等與計算機演算法有關

的書。2.6 最優化理論的三大非經典演算法

這十幾年來最優化理論有了飛速發展,模擬退火法、神經網路、遺傳演算法這三類演算法發展很快。近

幾年的賽題越來越複雜,很多問題沒有什麼很好的模型可以借鑑,於是這三類演算法很多時候可以派上用

場,比如:97 年a 題的模擬退火演算法,00 年b 題的神經網路分類演算法,象01 年b 題這種難題也可以

使用神經網路,還有美國競賽89 年a 題也和bp 演算法有關係,當時是86 年剛提出bp 演算法,89 年就考

了,說明賽題可能是當今前沿科技的抽象體現。03 年b 題伽馬刀問題也是目前研究的課題,目前演算法最

佳的是遺傳演算法。

2.7 網格演算法和窮舉演算法

網格演算法和窮舉法一樣,只是網格法是連續問題的窮舉。比如要求在n 個變數情況下的最優化問

題,那麼對這些變數可取的空間進行採點,比如在[a; b] 區間內取m +1 個點,就是a; a+(b¡a)=m; a+

2 ¢ (b ¡ a)=m; ¢ ¢ ¢ ; b 那麼這樣迴圈就需要進行(m + 1)n 次運算,所以計算量很大。

比如97 年a 題、99 年b 題都可以用網格法搜尋,這種方法最好在運算速度較快的計算機中進行,

還有要用高階語言來做,最好不要用matlab 做網格,否則會算很久的。

y編者注:指2002 年

14 數模2004 年

窮舉法大家都熟悉,就不說了。

2.8 一些連續資料離散化的方法

大部分物理問題的程式設計解決,都和這種方法有一定的聯絡。物理問題是反映我們生活在乙個連續的

世界中,計算機只能處理離散的量,所以需要對連續量進行離散處理。這種方法應用很廣,而且和上面的

很多演算法有關。事實上,網格演算法、蒙特卡羅演算法、模擬退火都用了這個思想。

2.9 數值分析演算法

這類演算法是針對高階語言而專門設的,如果你用的是matlab、mathematica,大可不必準備,因為

象數值分析中有很多函式一般的數學軟體是具備的。

2.10 圖象處理演算法

01 年a 題中需要你會讀bmp 圖象、美國賽98 年a 題需要你知道三維插值計算,03 年b 題要求

更高,不但需要程式設計計算還要進行處理,而數模**中也有很多需要展示,因此圖象處理就是關鍵。

做好這類問題,重要的是把matlab 學好,特別是圖象處理的部分 

十 類的靜態成員

1 類的靜態成員 2 靜態成員宣告與定義 靜態成員變數 靜態成員函式 示例 exp 1.cpp include class test static void seti int i 靜態成員函式 void print int test ci 0 定義靜態成員變數,並初始化 int main 3 靜態成...

十類人才薪金觸頂

本文 http bbs.biz.163.com board rep.jsp?b worklife i 5962 最近,可銳職業顧問中心近日對職業白領薪金滿意度進行了一次調查,結果有81 的職業白領表示對薪金不滿,特別是在過去的三季度中,薪金滿意指數較去年同期降低了8.4個百分點。根據調查結果和諮詢案...

Swift 十 類和結構體

1 swift入門學習筆記 第一版 對swift的基礎知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準 2 在學習完基本的知識點以後會結合官方文件及相關資料,在此版本的基礎上進行新增更改。在swift中,類和結構體的例項稱作例項而不是物件 同時區別於oc,其自定義類和介面實現檔案...