ACM 中常用的演算法有哪些?

2022-05-08 20:42:18 字數 2045 閱讀 6668

網路上流傳的答案有很多,估計提問者也曾經去網上搜過。所以根據自己微薄的經驗提點看法。

我acm初期是訓練編碼能力,以水題為主(就是沒有任何演算法,自己靠動腦筋能夠實現的),這種題目特點是麻煩,但是不難,30-50道題目就可以了。

然後可以接觸一下基礎的演算法,我感覺搜尋方向的比較不錯,可以解決很多問題,深搜,廣搜,然後各種剪枝能力的鍛鍊。

搜尋感覺不錯了就可以去看看貪心,圖論,和動態規劃方向的了。圖論有最短路徑,最小生成樹,網路流,拓撲排序等等很多,動態規劃先去書上看經典例子,最長公共子串行等。各種變形的題目。

數學是acm中極具殺傷力的**,我一向很羨慕數學好的隊友,精力有限自己數學方面的演算法只能說入門。這方面經典的數論,組合數學方面的比較多,計算幾何是很重要的,經典模型要熟悉,最近點對,二維三維,凸包以及各種應用。

資料結構方面的就比較多了,基礎的堆,棧,佇列,並查集,二叉查詢樹,紅黑樹,trie樹,hash表等等。 用c++參賽的話stl要熟悉,有時候很有幫助,裡面的queue,list,map,stack等。

acm到後來演算法就成了工具,不斷的靠自己意淫乙個新的解法來解決問題是最開心的事情了。我們學校acm一直是一屆帶一屆的,老師只提供經濟上的援助,上面的內容是我在大三當隊長時教給大一的新隊員的入門內容,再深的就靠每個人自己發掘了。

我年輕的時候也覺得acm考察的是演算法和coding

年紀大了以後,我明白了,acm考察的其實是yy

有演算法的題都是秒殺題,

難題都是yy乙個方法,或是做乙個畸形的變化轉成乙個有固定解的模型

一位高手對我的建議:

一般要做到50行以內的程式不用除錯、100行以內的二分鐘內除錯成功.acm主要是考演算法的,主要時間是花在思考演算法上,不是花在寫程式與debug上。

下面給個計畫你練練:

第一階段:

練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡**,因為太常用,所以要練到寫時不用想,10-15分鐘內打完,甚至關掉顯示器都可以把程式打出來.

1.最短路(floyd、dijstra、bellmanford)

2.最小生成樹(先寫個prim,kruscal要用並查集,不好寫)

3.大數(高精度)加減乘除

4.二分查詢. (**可在五行以內)

5.叉乘、判線段相交、然後寫個凸包.

6.bfs、dfs,同時熟練hash表(要熟,要靈活,**要簡)

7.數學上的有:輾轉相除(兩行內),線段交點、多角形面積公式.

8. 呼叫系統的qsort, 技巧很多,慢慢掌握.

9. 任意進製間的轉換

第二階段:

練習複雜一點,但也較常用的演算法。如:

1. 二分圖匹配(匈牙利),最小路徑覆蓋

2. 網路流,最小費用流。

3. 線段樹.

4. 並查集。

5. 熟悉動態規劃的各個典型:lcs、最長遞增子串、三角剖分、記憶化dp

6.博弈類演算法。博弈樹,二進位制法等。

7.最大團,最大獨立集。

8.判斷點在多邊形內。

9. 差分約束系統.

10. 雙向廣度搜尋、a*演算法,最小耗散優先.

第三階段:

前兩個階段是打基礎,第三階段是鍛鍊在比賽中可以快速建立模型、想新演算法

。這就要平時多做做綜合的題型了。

1. 把oibh上的**看看(大概幾百篇的,我只看了一點點,呵呵)。

2. 平時掃掃zoj上的難題啦,別老做那些不用想的題.(中大acm的版主經常說我挑簡單的來做:-p )

3. 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力.

4. 一道題不要過了就算,問一下人,有更好的演算法也打一下。

5. 做過的題要記好

邏輯類:列舉、貪心、動態規劃、深搜廣搜

結構類:棧、並查集、堆、樹、拓撲圖、圖論

幾何類:凸包

公式類:fibonacci,排列組合,概率

幾何類的小演算法很多,比如求點線關係;還有線性方程組、最大最小流;還有一些特定的演算法:最短路徑、排序等。

我感覺最其中重要的是搜尋,搜尋可以對大部分問題提供通解,但會有效率問題,於是有雙向廣搜、a星搜尋等等。在現實應用中,我覺得相對其他一些來講,搜尋也是比較有用的。

機器學習中,常用的損失函式有哪些?

1 0 1 loss 記錄分類錯誤的次數。2 hinge loss 最常用在svm中 最大優化間隔分類 中,對可能的輸出t 1和分類器分數y,值y的hinge loss定義如下 l y max 0.1 t y 3 log loss對數損失 對於 對數函式 由於其具有 單調性 在求最優化問題時,結果與...

PHP中常見的header頭有哪些?

ok 正常訪問header http 1.1 404 not found 通知瀏覽器 頁面不存在 設定位址被永久的重定向 301 跳轉到乙個新的位址 header location 延遲轉向也就是隔幾秒跳轉 header refresh 10 url 內容型別 網頁編碼 header content...

介面測試中常見的bug有哪些?

介面測試常見bug 特殊值處理不當導致程式異常退出或者崩潰 型別邊界溢位,導致資料讀出和寫入不一致 取值邊界外值未返回正確的錯誤資訊 引數 為null或空字串 等 許可權未處理,可以訪問其他使用者的資訊 例如 無許可權可以訪問,或者 一般使用者可以訪問管理員許可權 邏輯校驗不完善,可利用漏洞獲取非正...