搞定程式設計競賽必知哪10個演算法?

2021-06-26 11:31:04 字數 845 閱讀 2432

動態規劃(dp)似乎佔據了大部分的競賽題目(有估計說佔了三分之一)。當然,dp也不是乙個學一次就ok的單一演算法,所以,也許這並沒有回答你的問題。

我想這還取決於你是否把資料結構與演算法放在同乙個等級中考慮。如果你想要在程式設計競賽中一展風采的話,當然,有些資料結構是你應該熟悉的。其中最重要的有範圍樹(range tree,也被稱為線段樹或區間樹)和樹狀陣列(bits),也被稱作fenwick樹。除此之外,許多dp演算法使用了乙個字首和陣列(prefix sum array)。

我能想到的最精華的單一演算法如下所列,排名不分先後。然而,你可能會因為這其中的一些演算法在真正的競賽中很少出現而感到失望。絕大多數非動態規劃問題似乎都是各種ad hoc網路與資料結構,所以你只需要練習練習以熟練掌握它們。

(再一次宣告,我僅列出了滿足如下性質的演算法:有單一輸入集;計算輸入集的某個函式;不攜帶輸入值之間的狀態。這些性質將下面的演算法與資料結構區分開來。由定義,資料結構要保留狀態以及演算法的等級,還有像是dp這樣的演算法技術,它們並沒有前者所計算的某個具體函式。)

1.eratosthenes篩法,或另一種素數篩法

2.深度優先搜尋

3.廣度優先搜尋

4.dijkstra演算法

5.floyd–warshall 演算法

6.either kruskal演算法 或稱 prim演算法

7.一些拓撲排序的實現,比如使用dfs

8.凸包(我推薦單調鏈演算法)

9.座標壓縮

10.edmonds–karp,或者ford–fulkerson方法的另一種實現;亦或預流推進演算法;又或者,如果你在準備acm codebook,那麼就dinic演算法。(注意:最大流不允許出現在國際資訊賽中,儘管如此,它也可能會出現在國家隊選拔賽中。)

提高程式設計效率必知 CODEBLOCKS

參考 sdfgh2046 tips 本文主要是個人使用經驗,同時結合前輩部落格經驗創作而成的 一 日常編輯 按住ctrl滾滾輪,的字型會隨你心意變大變小,對保護視力特別有好處。在編輯區按住右鍵可拖動 省去拉 尤其是橫向 滾動條之麻煩 相關設定 mouse drag scrolling。ctrl d可...

必知必會 一文搞定理解RPC

rpc的優點 rpc與http的區別 rpc的概念相信很多軟體從業人員或多或少都接觸過,從開發到測試都可能需要跟它打交道。但是對於為什麼要用rpc?rpc的優點是什麼?rpc是什麼原理?它跟http有什麼不同?相信並不是每個人都比較熟悉。那麼今天我們就來了解下到底什麼是rpc?通常我們所說的rpc其...

C 程式設計必知 生存期

自然界中的事物都有產生和消亡,都有生存期,程式中的簡單變數和類的物件也一樣有它們的生存期,它們也會產生和消亡。物件的生存期分為靜態生存期和動態生存期兩種。什麼叫做靜態生存期和動態生存期呢?1.靜態生存期 若某個物件它的生存期與程式的執行期相同,我們就說它具有靜態生存期,就是說在程式執行期間它都不會釋...