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

  • 相关阅读:
    【动画】看动画轻松理解「Trie树」
    浅析HTTP/2的多路复用
    HTTPS 详解
    PHP写时复制(Copy On Write)
    golang 几种字符串的拼接方式
    正排索引和倒排索引简单介绍
    传值还是传引用
    lvs与nginx区别
    Docker运行操作系统环境(BusyBox&Alpine&Debian/Ubuntu&CentOS/Fedora)
    原创-thanos组件(聚合多个prometheus组件)原理介绍
  • 原文地址:https://www.cnblogs.com/GuanHuaEdison/p/6790487.html
Copyright © 2020-2023  润新知