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+滚轮手动放大)

posted @ 2017-05-01 17:05  GuanHuaEdison  阅读(2016)  评论(0编辑  收藏  举报