Noip知識點總結


本人親手整理,用html一個字一個字敲的Orz,看在我那么不容易的份上就點個關注吧(后續會根據更新的文章不斷的加上超鏈接來便於大家查詢、觀看)ps.文末附oi知識表

算法思想

  1. 模擬
  2. 搜索 (Search) 枚舉(窮舉) / 遍歷 / 剪枝 / 產生式系統(估價函數)/雙向BFS/記憶化搜索
  3. 查找(字典):折半查找(二分法) / 樹形查找(二叉排序樹) / Hash
  4. 遞推或歸納(To 數學方法) > 遞推式 > DP
  5. 分治(Divided and Conquer) > 二分答案
  6. 貪心 (Greedy)

實現技巧

  1. 循環
  2. 遞推(順/逆) > 博弈 > DP
  3. 遞歸(棧/DFS)
  4. 滾動數組
    1. x ^ y = exp(y*ln(x))
    2. x ^ (1/n) = exp(1/n*ln(x))

數學方法

  1. 數論:質數 / 因數 / 約數個數(種數)/ 最大公約數 / 最小公倍數 / 回文數/擴展歐幾里得/快速冪/線性篩法/逆元/歐拉函數……
  2. 進制轉換(注意負進制)
  3. 高精度運算(考得不多)
  4. 排列組合:全排列、二項式定理
  5. 經典遞推關系:
    1. Fibonacci
      1. fib(1)=1 ;fib(2)=1
      2. fib(n)=fib(n-1)+fib(n-2)
      3. 通項:設g5=sqrt(5) 則fib(n)=(1/g5)*( ((1+g5)/2)^n-((1-g5)/2)^n )
    2. Catalan數 :Catalan(n)=C(n,2*n)/(n+1)
  6. 高斯消元(省選內容)

數據結構(Data Structure)

  1. 物理結構
    1. 數組 > 二維平面/字符串(Ansistring)及其操作
    2. 指針 > 鏈表 (單鏈表 / 雙向鏈表 / 環狀鏈表)
  2. 抽象數據結構(Abstract Data Type)
    1. 初級ADT
      1. 集合
      2. 線性結構
        1. 棧(LIFO表)
          1. 后綴表達式
          2. 進出站序列問題(Catalan 枚舉 > 歸納)
          3. DFS
        2. 隊列(FIFO表)
          1. BFS
          2. 求和廣義線性表
      3. 非線性結構
        1. 樹(多是二叉)
          1. 樹的遍歷:前/中/后(遞歸實現)
          2. 最優二叉樹(哈夫曼樹Huffman tree)(貪心)
          3. 二叉堆
          4. 樹規(樹形DP)
          5. Trie樹(字典樹)
        2. 圖(graph)
          1. 圖的遍歷:
            1. DFS
            2. BFS
          2. 最小生成樹:(貪心)
            1. Prim:邊稠密
            2. Kruskal: 邊稀疏(排序 + 並查集)
          3. 最短路徑算法:
            1. Dijkstra(單源 O(n2) BFS )
            2. Floyed(所有點間 O(n3) )
            3. Bellman-Ford(負權環)
            4. SPFA
          4. 拓撲序列
          5. 關鍵路徑(AOV網)
          6. 無向圖傳遞閉包、有向圖強連通分量SCC
          7. 路、回路
          8. 二分圖匹配
          9. LCA、RMQ
    2. 高級ADT
      1. 集合型
        1. 並查集(disjoint-set)
      2. 字典型
        1. 哈希(hash)
      3. 樹型
        1. 二叉堆(Heap) > Treap
        2. Binary Search Tree(BST)
        3. 線段樹、樹狀數組、樹鏈剖分......

排序算法

  1. O(n2)
    • 直接插入排序(Inserting Sort)
    • 直接選擇排序(Choosing Sort)
    • 冒泡排序(Bubble Sort)
  2. O(nlongn)
    • 堆排(Heap Sort)
    • 快排(Quick Sort)
    • 歸並(Merge Sort)
  3. O(n)
    • 基數排序(Radix Sort)
    • 計數排序(Counting Sort)
    • 桶排序(Bucket Sort)

動態規划(Dynamic programming)

  1. 注意事項
    1. 狀態轉移方程+邊界條件
    2. 合適的實現方法(To 實現技巧)
  2. 經典題目
    1. 最長不下降(上升)序列
    2. 最大子段和 & 最大M子段和
    3. 最長公共子序列(LCS)
    4. 區間DP(鏈,環)
    5. 背包問題
      1. 01背包-可重復(DP)
      2. 01背包-不可重復(DP)
      3. 完全背包
      4. 部分背包(貪心)
    6. 狀壓DP
    7. DP的簡單優化(滾動數組、數據結構優化、隊列優化)

博弈問題

  1. 關鍵字:必勝態 / 必敗態
  2. 遞推找規律
  3. 歸納法

另附一張OI知識表(Ctrl+滾輪手動放大)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM