(致酷德與熱愛算法、編程的小伙伴們)
在查閱了相當多的資料后,發現沒有那篇博客、文章很符合我們備戰藍橋杯的學習路徑。所以,干脆自己整理一篇,歡迎大家補充!
一、藍橋必備高頻考點
我們以此為重點學習方向:
1. 基礎算法
枚舉 | 模擬 | 貪心 | 遞歸 | 分治 |
構造 | 前綴和 | 差分 |
2.?搜索與排序
線性搜索 | 二分法 | BFS | DFS | 回溯剪枝 |
深搜優化 | 記憶化搜索 | 位運算 | 冒泡排序 | 歸并排序 |
快速排序 | 桶排序 |
3. 動態規劃
編輯距離 | 最長不重復子串 | 整數背包 | 矩陣連乘 | 最長公共子序列 |
最長公共子串 | 最長上升子序列 | 最長回文子序列 | 最長回文子串 | 回文分割 |
最大子段合 | 最大正方形子矩陣 | 滾動數組 | ||
數位dp | 概率dp | 樹形dp | 區間dp | 狀壓dp |
4. 數學
GCD&LCM | 素數判斷 | 素數生成 | 分解質因數 | 費馬小定理 |
擴展歐幾里得 | 逆元 | 高斯消元 | 整數拆分 | 模運算 |
5. 組合數學
容斥原理 | 鴿巢定理 | 乘法原理 | 調和級數 | 斐波那契數 |
6. 圖論
鄰接矩陣 | 關聯矩陣 | 鄰接表 | 鏈式前向星 | 有向無環圖 |
判圈 | 拓撲排序 | 最短路徑 | Prim | Kruskal |
Dijkstra(堆優化) | Bellman | Floyd | SPFA |
7. 數據結構
數組 | 鏈表 | 棧 | 隊列 | 先隊列 |
塊狀鏈表 | LCA | 并查集 | 線段樹 | 樹狀數組 |
二叉樹 |
8. 幾何
點和向量 | 點積、叉積 | 點和線的關系 | 多邊形 | 面積、周長、體積 |
判點在多邊形 多面體內外 | 坐標旋轉 |
二、藍橋杯知識點總覽
以下為藍橋杯所有考點,可根據興趣,借鑒補充題目。
1. 基礎算法
-
枚舉:通過遍歷所有可能的情況來解決問題。
-
模擬:按照題目要求模擬實際操作過程。
-
貪心:在每一步選擇中都采取最優(即最有利)的選擇,從而希望導致結果是全局最優解。
-
遞歸:通過函數自己調用自己來解決問題。
-
分治:將原問題分解為若干個規模更小但結構相同的子問題,遞歸解決這些子問題,然后將子問題的解合并得到原問題的解。
2. 搜索與排序
-
子集生成:生成一個集合的所有子集。
-
線性搜索:在數組或列表中從頭到尾依次查找元素。
-
二分法:在有序數組中通過折半查找的方式快速定位元素。
-
三分法:將數組分成三部分進行查找或排序。
-
BFS(廣度優先搜索):從根節點開始,逐層遍歷所有節點。
-
DFS(深度優先搜索):從根節點開始,盡可能深地搜索樹的分支。
-
回溯剪枝:在深度優先搜索中,通過剪枝減少搜索空間,提高搜索效率。
-
記憶化搜索:通過緩存中間結果,避免重復計算,提高搜索效率。
-
IDA*算法:一種迭代加深的 A* 算法,結合了深度優先搜索和 A* 算法的優點。
-
位運算:利用位操作進行高效計算。
-
按位壓縮存儲狀態:通過位運算壓縮存儲狀態,減少內存占用。
-
選擇排序:每次從未排序部分選擇最小(或最大)元素放到已排序部分。
-
冒泡排序:通過相鄰元素之間的比較和交換來排序。
-
歸并排序:通過遞歸地將數組分成兩半,排序后再合并。
-
快速排序:通過選擇一個基準元素,將數組分成兩部分,一部分小于基準,另一部分大于基準,然后遞歸排序。
-
堆排序:利用堆這種數據結構進行排序。
-
計數排序:通過統計每個元素出現的次數來進行排序。
-
桶排序:將元素分布到若干個桶中,每個桶再分別排序。
3. 動態規劃
-
編輯距離:計算兩個字符串之間,將一個字符串轉換成另一個字符串所需的最少編輯操作次數。
-
最長不重復子串:在字符串中找到最長的不重復字符子串。
-
整數背包:解決背包問題的一種方法,背包容量和物品重量都是整數。
-
矩陣連乘:計算矩陣連乘的最小代價。
-
最長公共子序列:在兩個序列中找到最長的公共子序列。
-
最長公共遞增子序列:在兩個序列中找到最長的公共遞增子序列。
-
最長上升子序列:在序列中找到最長的上升子序列。
-
最長回文子序列:在字符串中找到最長的回文子序列。
-
最長回文子串:在字符串中找到最長的回文子串。
-
回文分割:將字符串分割成多個回文子串。
-
最大子段和:在數組中找到連續子數組的最大和。
-
最大正方形子矩陣:在矩陣中找到最大的正方形子矩陣。
-
最長鏈對:在一組區間中找到最長的不重疊區間鏈。
-
最大遞增子序列和:在序列中找到遞增子序列的最大和。
-
滾動數組:通過使用較小的數組來減少空間復雜度。
-
數位dp:通過動態規劃解決與數字位數相關的問題。
-
概率dp:通過動態規劃解決概率相關的問題。
-
樹形dp:在樹結構上進行動態規劃。
-
區間dp:在區間上進行動態規劃。
-
狀壓dp:通過狀態壓縮進行動態規劃。
-
插頭dp:通過插頭狀態進行動態規劃。
-
斜率優化:通過斜率優化動態規劃的轉移方程。
-
平行四邊形優化:通過平行四邊形性質優化動態規劃的轉移方程。
-
單調隊列優化:通過單調隊列優化動態規劃的轉移方程。
-
數據結構優化:通過數據結構優化動態規劃的實現。
4. 數學
-
GCD&LCM:最大公約數和最小公倍數。
-
素數判斷:判斷一個數是否為素數。
-
素數生成:生成一定范圍內的所有素數。
-
分解質因數:將一個數分解為質因數的乘積。
-
歐拉定理:計算歐拉函數的值。
-
費馬定理:費馬小定理及其擴展。
-
擴展歐幾里得:求解線性同余方程。
-
逆元:計算模逆元。
-
隨機素數測試和大數分解:通過隨機測試判斷素數,以及大數分解。
-
高斯消元:通過高斯消元法解線性方程組。
-
偶合方程:解偶合方程組。
-
整數拆分:將一個整數拆分為多個整數的和。
-
大步小步算法:解決某些特定的數學問題。
-
中國剩余定理:解同余方程組。
-
原根:計算原根。
-
快速數論變換:通過快速數論變換進行高效計算。
-
線性丟番圖方程:解線性丟番圖方程。
-
模運算:進行模運算。
-
盧卡斯定理:計算組合數的模。
-
杜教篩:通過杜教篩法計算某些特定的數學問題。
-
威爾遜定理:通過威爾遜定理判斷素數。
-
米勒羅賓隨機素數測試:通過米勒羅賓測試判斷素數。
-
完全數:判斷一個數是否為完全數。
-
連分數:處理連分數。
5. 組合數學
-
容斥原理:通過容斥原理計算集合的大小。
-
鴿巢定理:通過鴿巢定理解決某些組合問題。
-
乘法原理:通過乘法原理計算排列和組合的數量。
-
斯特林數:計算斯特林數。
-
卡特蘭數:計算卡特蘭數。
-
斐波那契數:計算斐波那契數。
-
幻方:生成幻方。
-
莫比烏斯反演:通過莫比烏斯反演解決某些組合問題。
-
母函數:通過母函數解決某些組合問題。
-
調和級數:計算調和級數。
6. 圖論
-
鄰接矩陣:通過鄰接矩陣表示圖。
-
關聯矩陣:通過關聯矩陣表示圖。
-
鄰接表:通過鄰接表表示圖。
-
鏈式前向星:通過鏈式前向星表示圖。
-
有向無環圖:處理有向無環圖。
-
歐拉圖:判斷圖是否為歐拉圖。
-
判圈:判斷圖中是否存在環。
-
割點:找到圖中的割點。
-
割邊:找到圖中的割邊。
-
橋:找到圖中的橋。
-
雙連通分量:找到圖中的雙連通分量。
-
強連通分量:找到圖中的強連通分量。
-
有向圖的強連通分量:找到有向圖中的強連通分量。
-
拓撲排序:對有向無環圖進行拓撲排序。
-
二分圖判定:判斷圖是否為二分圖。
-
最短路徑:計算圖中的最短路徑。
-
連通分量:找到圖中的連通分量。
-
次小生成樹:找到圖中的次小生成樹。
-
曼哈頓最小生成樹:找到曼哈頓距離下的最小生成樹。
-
Dijkstra(堆優化):通過堆優化的 Dijkstra 算法計算最短路徑。
-
Bellman:通過 Bellman-Ford 算法計算最短路徑。
-
Floyd:通過 Floyd-Warshall 算法計算最短路徑。
-
差分約束:通過差分約束解決某些問題。
-
SPFA:通過 SPFA 算法計算最短路徑。
-
最小費用最大流:計算圖中的最小費用最大流。
-
二分圖匹配:在二分圖中找到最大匹配。
-
歐拉路:找到圖中的歐拉路。
7. 數據結構
-
數組:基本的數據結構,用于存儲和訪問數據。
-
鏈表:通過節點鏈接存儲數據。
-
棧:后進先出的數據結構。
-
隊列:先進先出的數據結構。
-
先隊列:優先隊列,用于存儲和訪問數據。
-
雙端隊列:可以在兩端進行插入和刪除操作的數據結構。
-
塊狀鏈表:通過塊狀結構優化鏈表的訪問。
-
堆:通過堆結構存儲和訪問數據。
-
哈希:通過哈希表存儲和訪問數據。
-
LCA:通過 LCA 算法解決某些樹結構問題。
-
跳躍表:通過跳躍表優化鏈表的訪問。
-
并查集:通過并查集解決某些集合問題。
-
字典樹:通過字典樹存儲和訪問字符串數據。
-
線段樹:通過線段樹解決區間查詢和更新問題。
-
樹狀數組:通過樹狀數組解決某些數組問題。
-
莫隊算法:通過莫隊算法解決某些數組問題。
-
平衡二叉樹:通過平衡二叉樹存儲和訪問數據。
-
二叉搜索樹:通過二叉搜索樹存儲和訪問數據。
-
Treap樹:通過 Treap 樹存儲和訪問數據。
-
二叉樹:基本的樹結構。
-
笛卡爾樹:通過笛卡爾樹解決某些數組問題。
-
劃分樹:通過劃分樹解決某些數組問題。
-
表達式樹:通過表達式樹解決某些表達式問題。
-
替罪羊樹:通過替罪羊樹解決某些樹結構問題。
-
伸展樹:通過伸展樹解決某些樹結構問題。
-
動態樹:通過動態樹解決某些樹結構問題。
-
左偏堆:通過左偏堆解決某些堆問題。
-
可并堆:通過可并堆解決某些堆問題。
-
主席樹:通過主席樹解決某些樹結構問題。
-
樹鏈剖分:通過樹鏈剖分解決某些樹結構問題。
-
KD樹:通過 KD 樹解決某些空間問題。
-
樹套樹:通過樹套樹解決某些樹結構問題。
-
FHQ_Treap:通過 FHQ_Treap 解決某些樹結構問題。
8. 幾何
-
點和向量:處理點和向量的基本操作。
-
點積、叉積:計算點積和叉積。
-
點和線的關系:判斷點和線的位置關系。
-
多邊形:處理多邊形的基本操作。
-
三角形內心、外心、重心、垂心:計算三角形的內心、外心、重心和垂心。
-
費馬點:計算費馬點。
-
面積、周長、體積:計算幾何圖形的面積、周長和體積。
-
判點在多邊形內外:判斷點是否在多邊形內部或外部。
-
三角剖分:對多邊形進行三角剖分。
-
梯形剖分:對多邊形進行梯形剖分。
-
多邊形重心:計算多邊形的重心。
-
多邊形切割:對多邊形進行切割操作。
-
多面體體積:計算多面體的體積。
-
坐標旋轉:對坐標進行旋轉操作。
-
凸包:計算點集的凸包。
-
最近點對:找到點集中的最近點對。
-
旋轉卡殼:通過旋轉卡殼算法解決某些幾何問題。
-
半平面交:計算半平面的交集。
-
最小圓覆蓋:找到覆蓋點集的最小圓。
-
三維點和向量:處理三維點和向量的基本操作。
-
三維點積&叉積:計算三維點積和叉積。
-
最小球覆蓋:找到覆蓋點集的最小球。
-
三維凸包:計算三維點集的凸包。
指導思想:“農村包圍城市,武裝奪取政權”,教員的這句話太有指導含義了,大概意思就是星星之火可以燎原。從簡單題開始做,不要好高騖遠!當量變引起質變那一刻,藍橋杯必能拿下!