算法竞赛ICPC、CCPC、NIO、蓝桥杯、天梯赛

算法竞赛

  • 前言
  • 一、为什么学习算法竞赛
  • 二、学习算法的阶段
  • 三、算法竞赛具体学习内容
  • 1、基础数据结构
    • 1.1、链表
      • 1.1.1、动态链表
      • 1.1.2、静态链表
      • 1.1.3、STL list
    • 1.2、队列
      • 1.2.1、STL queue
      • 1.2.2、手写循环队列
      • 1.2.3、双端队列和单调队列
      • 1.2.4、优先队列
    • 1.3、栈
      • 1.3.1、STL stack
      • 1.3.2、手写栈
      • 1.3.3、单调栈
    • 1.4、二叉树和哈夫曼树
      • 1.4.1、二叉树的概念
      • 1.4.2、二叉树的遍历
      • 1.4.3、哈夫曼树和哈夫曼编码
    • 1.5、堆
      • 1.5.1、二叉堆的概念
      • 1.5.2、二叉堆的操作
      • 1.5.3、二叉堆的手写代码
      • 1.5.4、堆和priority_queue
  • 2、基本算法
    • 2.1、算法复杂度
      • 2.1.1、算法的概念
      • 2.1.2、复杂度和大O记号
    • 2.2、尺取法
      • 2.2.1、尺取法的概念
      • 2.2.2、反向扫描
      • 2.2.3、同向扫描
    • 2.3、二分法
      • 2.3.1、二分法的理论背景
      • 2.3.2、整数二分
      • 2.3.3、实数二分
    • 2.4、三分法
      • 2.4.1、原理
      • 2.4.2、实数三分
      • 2.4.3、整数三分
    • 2.5、倍增法与ST算法
      • 2.5.1、倍增法
      • 2.5.2、ST算法
    • 2.6、前缀和与差分
      • 2.6.1、一维差分
      • 2.6.2、二维差分
      • 2.6.3、三维差分
    • 2.7、离散化
      • 2.7.1、离散化的概念
      • 2.7.2、离散化手工编码
      • 2.7.3、用STL函数实现离散化
      • 2.7.4、离散化的应用
    • 2.8、排序和排列
      • 2.8.1、排序函数
      • 2.8.2、排列
    • 2.9、分治法
      • 2.9.1、汉诺塔和快速幂
      • 2.9.2、归并排序
      • 2.9.3、快速排序
    • 2.10、贪心法与拟阵
      • 2.10.1、贪心法
      • 2.10.2、拟阵
  • 3、搜索
    • 3.1、BFS和DFS基础
      • 3.1.1、搜索简介
      • 3.1.2、搜索算法的基本思路
      • 3.1.3、BFS的代码实现
      • 3.1.4、DFS的常见操作和代码框架
      • 3.1.5、BFS和DFS的对比
      • 3.1.6、连通性判断
    • 3.2、剪枝
      • 3.2.1、BFS判重
      • 3.2.2、剪枝的应用
    • 3.3、洪水填充
    • 3.4、BFS与最短路径
    • 3.5、双向广搜
      • 3.5.1、双向广播的原理和复杂度分析
      • 3.5.2、双向广搜的两种实现
      • 3.5.3、双向广搜例题
    • 3.6、BFS与优先队列
    • 3.7、BFS与双端队列
    • 3.8、A*算法
      • 3.8.1、贪心最优搜索和Dijkstra算法
      • 3.8.2、A*算法的原理和复杂度
      • 3.8.3、3种算法的对比
      • 3.8.4、h函数的设计
      • 3.8.5、A*算法例题
    • 3.9、IDDFS和IDA*
      • 3.9.1、IDDFS
      • 3.9.2、IDA*
  • 4、高级数据结构
    • 4.1、并查集
      • 4.1.1、并查集的基本操作
      • 4.1.2、合并的优化
      • 4.1.3、查询的优化(路径压缩)
      • 4.1.4、带权并查集
    • 4.2、树状数组
      • 4.2.1、树状数组的概念和基本编码
      • 4.2.2、树状数组的基本应用
      • 4.2.3、树状数组的扩展应用
    • 4.3、线段树
      • 4.3.1、线段树的概念
      • 4.3.2、区间查询
      • 4.3.3、区间操作与Lazy-Tag
      • 4.3.4、线段树的基础应用
      • 4.3.5、区间最值和区间历史最值
      • 4.3.6、区间合并
      • 4.3.7、扫描线
      • 4.3.8、二维线段树(树套树)
    • 4.4、可持久化线段树
      • 4.4.1、可持久化线段树的思想
      • 4.4.2、区间第k大/小问题
      • 4.4.3、其他经典问题
    • 4.5、分块与莫队算法
      • 4.5.1、分块
      • 4.5.2、基础莫队算法
      • 4.5.3、待修改的莫队算法
      • 4.5.4、树上莫队
    • 4.6、块状链表
    • 4.7、简单树上问题
      • 4.7.1、树的重心
      • 4.7.2、树的直径
    • 4.8、LCA
      • 4.8.1、倍增法求LCA
      • 4.8.2、Tarjan算法求LCA
      • 4.8.3、LCA应用
    • 4.9、树上的分治
      • 4.9.1、静态点分治
      • 4.9.2、动态分治
    • 4.10、树链部分
      • 4.10.1、树链剖分的概念
      • 4.10.2、树链剖分的典型应用
    • 4.11、二叉查找树
    • 4.12、替罪羊树
      • 4.12.1、不平衡率
      • 4.12.2、替罪羊树的操作
      • 4.12.3、例题
    • 4.13、Treap树
      • 4.13.1、Treap树的性质
      • 4.13.2、基于旋转法的Treap树操作
    • 4.14、FHQ Treap树
      • 4.14.1、FHQ的基本操作
      • 4.14.2、FHQ Treap树的基本应用
    • 4.15、笛卡尔树
      • 4.15.1、笛卡尔树的概念
      • 4.15.2、用单调栈建笛卡尔树
      • 4.15.3、笛卡尔树和RMQ问题
    • 4.16、Splay树
      • 4.16.1、Splay旋转
      • 4.16.2、Splay树的平摊分析
      • 4.16.3、Splay树的常用操作
    • 4.17、K-D树
      • 4.17.1、从空间到二叉树的转换
      • 4.17.2、K-D树的概念和基本操作
      • 4.17.3、寻找最近点
      • 4.17.4、区间查询
    • 4.18、动态树与LCT
      • 4.18.1、LCT的思想
      • 4.18.2、从原树到辅助树
      • 4.18.3、LCT的存储和性质
      • 4.18.4、LCT的操作
      • 4.18.5、LCT的基本应用
  • 5、动态规划
    • 5.1、DP概念和编程方法
      • 5.1.1、DP的概念
      • 5.1.2、DP的两种编程方式
      • 5.1.3、DP的设计和实现
    • 5.2、经典线性DP问题
    • 5.3、数位统计DP
      • 5.3.1、数位统计DP的递推实现
      • 5.3.2、数位统计DP的记忆化搜索实现
      • 5.3.3、数位统计DP的例题
    • 5.4、状态压缩DP
      • 5.4.1、引子
      • 5.4.2、状态压缩DP的原理
      • 5.4.3、状态压缩DP的例题
      • 5.4.4、三进制状态压缩DP
    • 5.5、区间DP
      • 5.5.1、石子合并问题和两种模板代码
      • 5.5.2、区间DP例题
      • 5.5.3、二维区间DP
    • 5.6、树形DP
      • 5.6.1、树形DP的基本操作
      • 5.6.2、背包与树形DP
    • 5.7、一般优化
    • 5.8、单调队列优化
      • 5.8.1、单调队列优化的原理
      • 5.8.2、单调队列优化例题
    • 5.9、斜率优化/凸壳优化
      • 5.9.1、把状态转移方程变换为平面的斜率问题
      • 5.9.2、求一个dp[i]
      • 5.9.3、求所有dp[i]
      • 5.9.4、例题
    • 5.10、四边形不等式优化
      • 5.10.1、应用场合
      • 5.10.2、四边形不等式优化操作
      • 5.10.3、四边形不等式定义和单调性定义
      • 5.10.4、四边形不等式定理
      • 5.10.5、例题
  • 6、数论和线性代数
    • 6.1、模运算
    • 6.2、快速幂
    • 6.3、矩阵的应用
      • 6.3.1、矩阵的计算
      • 6.3.2、矩阵快速幂
      • 6.3.3、矩阵快速幂加速递推
      • 6.3.4、矩阵乘法与路径问题
    • 6.4、高斯消元
      • 6.4.1、高斯消元的基本操作
      • 6.4.2、高斯约当消元法
      • 6.4.3、例题
    • 6.5、异或空间线性基
      • 6.5.1、线性基的构造
      • 6.5.2、线性基的应用
    • 6.6、0/1分数规则
      • 6.6.1、二分法与0/1分数规则
      • 6.6.2、应用场景
    • 6.7、GCD和LCM
      • 6.7.1、GCD
      • 6.7.2、LCM
      • 6.7.3、裴蜀定理
    • 6.8、线性丢番图方程
      • 6.8.1、二元线性丢番图方程
      • 6.8.2、扩展欧几里得算法与二元线性丢番方程的解
      • 6.8.3、多元线性方程丢番图方程
    • 6.9、同余
      • 6.9.1、同余概述
      • 6.9.2、一元线性同余方程
      • 6.9.3、逆
      • 6.9.4、同余方程组
    • 6.10、素数(质素)
      • 6.10.1、小素数的判定
      • 6.10.2、大素数的判定
      • 6.10.3、素数筛
      • 6.10.4、质因数分解
    • 6.11、威尔逊定理
    • 6.12、积极函数
    • 6.13、欧拉函数
      • 6.13.1、欧拉函数的定理和性质
      • 6.13.2、求欧拉函数的通解公式
      • 6.13.3、用线性筛(欧拉筛)求1~n内所有的欧拉函数
    • 6.14、整除分块(数论分块)
    • 6.15、迪利克雷卷积
    • 6.16、莫比乌斯函数和莫比乌斯反演
    • 6.17、杜教筛
      • 6.17.1、杜教筛的起源
      • 6.17.2、杜教筛公式的推导
      • 6.17.2、杜教筛算法和复杂度
      • 6.17.3、杜教筛模板代码
  • 7、组合数学
    • 7.1、基本概念
    • 7.2、鸽巢原理
    • 7.3、二项式定理和杨辉三角
    • 7.4、卢卡斯定理
    • 7.5、容斥原理
    • 7.6、Catalan数和Stirling数
      • 7.6.1、Catalan数
      • 7.6.2、Stirling数
    • 7.7、Burnside定理和polya计数
      • 7.7.1、置换群
      • 7.7.2、Burnside定理
      • 7.7.3、polya计数
    • 7.8、母函数
      • 7.8.1、普通型母函数
      • 7.8.2、指数型母函数
      • 7.8.3、母函数与泰勒级数
    • 7.9、公平组合游戏(博弈论)
      • 7.9.1、巴什游戏与P-position
      • 7.9.2、尼姆游戏
      • 7.9.3、图游戏与Sprague-Grundy函数
      • 7.9.4、威佐夫游戏
  • 8、计算几何
    • 8.1、二维几何
      • 8.1.1、点和向量
      • 8.1.2、点积和叉积
      • 8.1.3、点和线
      • 8.1.4、多边形
      • 8.1.5、凸包
      • 8.1.6、最近点对
      • 8.1.7、旋转卡壳
      • 8.1.8、半平面交
    • 8.2、圆
      • 8.2.1、基本计算
      • 8.1.2、最小圆覆盖
    • 8.3、三维几何
      • 8.3.1、三维点和线
      • 8.3.2、三维点积
      • 8.3.3、三维叉积
      • 8.3.4、最小球覆盖
      • 8.3.5、三维凸包
      • 8.3.6、三维几何例题
  • 9、字符串
    • 9.1、进制哈希
      • 9.1.1、哈希函数BKDRHash
      • 9.1.2、进制哈希的应用
    • 9.2、Manacher
      • 9.2.1、暴力法求最长回文子串
      • 9.2.2、Manacher算法
      • 9.2.3、模板代码
    • 9.3、字典树
      • 9.3.1、字典树的构造
      • 9.3.2、模板代码
    • 9.4、回文树
      • 9.4.1、回文数的关键技术
      • 9.4.2、模板代码
    • 9.5、KMP
      • 9.5.1、朴素的模式匹配算法
      • 9.5.2、KMP算法
      • 9.5.3、模板代码和例题
      • 9.5.4、扩展KMP
    • 9.6、AC自动机
      • 9.6.1、AC自动机算法
      • 9.6.2、模板代码
    • 9.7、后缀树和后缀树组
      • 9.7.1、后缀树和后缀树组的概念
      • 9.7.2、倍增法求
      • 9.7.3、后缀树的经典应用
    • 9.8、后缀自动机
      • 9.8.1、后缀自动机的概念
      • 9.8.2、endpos和等价类
      • 9.8.3、后缀自动机的构造
      • 9.8.4、模板代码
      • 9.8.5、后缀自动机的应用
  • 10、图论
    • 10.1、图的储存
      • 10.1.1、邻接矩阵
      • 10.1.2、邻接表
      • 10.1.3、链式前向星
    • 10.2、拓扑结构
      • 10.2.1拓扑排序的概念
      • 10.2.2基于BFS的拓扑排序
      • 10.2.3基于DFS的拓扑排序
      • 10.2.4、输出拓扑排序
    • 10.3欧拉路
      • 10.3.1、欧拉路和欧拉回路的存在性判断
      • 10.3.2、输出一个欧拉回路
    • 10.4、无向图的连通性
      • 10.4.1、割点和割边
      • 10.4.2双连通分量
    • 10.5、有向图的连通性
      • 10.5.1、Kosaraju算法
      • 10.5.2、Tarjan算法
    • 10.6、基环树
    • 10.7、2-SAT
    • 10.8、最短路径
      • 10.8.1、Floyd算法
      • 10.8.2、传递闭包
      • 10.8.3、Dijkstra算法
      • 10.8.4、Bellman-Ford算法
      • 10.8.5、SPFA算法
      • 10.8.6、比较Bellman-Ford算法和Dijkstra算法
      • 10.8.7、负环和差分约束系统
    • 10.9、最小生成树
      • 10.9.1、Kruskal算法
      • 10.9.2、Prim算法
      • 10.9.3、扩展问题
    • 10.10、最大流
      • 10.10.1、Ford-Fullkerson方法
      • 10.10.2、Edmonds-Karp算法
      • 10.10.3、Dinic算法
      • 10.10.4、SAP算法
      • 10.10.5、混合圆的欧拉回路
    • 10.11、二分圆
    • 10.12、最小割
    • 10.13、费用流

前言

🎁🎁🎁本文章将进行超链接,建议大家收藏,在接下来的一年时间,本文章基本可以完成更新,请大家耐心等待~~

⭐️本博客深入解析与算法竞赛相关的数据结构、算法、代码。包括基础数据结构、基本算法、搜索、高级数据结构、动态规划、数论和线性代数、组合数学、计算机几何、字符串和图论。

⭐️适用人群:参加算法竞赛的中学生大学生、准备面试IT企业算法题的求职者、需要提高算法能力的开发人员,以及对计算机算法有兴趣的广大科技工作者。

大家对算法有任何疑问都可以在评论区提出来哦!博主会尽最大可能回答哦!因为博主对机器学习、深度学习、AIOT比较感兴趣,所以平时会观看一些算法和数据结构方面的书籍,以下内容是通过罗勇军老师的书籍所写。无论你学习算法的起点在哪里,只要你肯努力,持之以恒,不断探索和实践,你一定会取得进步。每次遇到困难,不要放弃,而是要勇敢地面对它,坚信自己能够克服它。相信自己,相信自己的能力! 希望大家通过接下来的学习,在算法方面更上一层楼。

以下为学习算法竞赛的思维导图,可能会看不清,请联系博主取图

在这里插入图片描述

一、为什么学习算法竞赛

目前国内影响比较大的计算机算法竞赛有全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计大赛(CCPC)、蓝桥杯全国软件和信息技术专业人才大赛(软件类)、中国高校计算机大赛-团体程序设计天梯赛等。

学习和参加算法竞赛是通往杰出程序员的捷径。算法竞赛在提高代码量、掌握丰富的算法知识、培养计算思维和逻辑思维、培养团队合作精神等多个方面都有很大的帮助。

二、学习算法的阶段

⭐️初学者
一名刚学过C/C++、Java、Python中任意一门编程语言的学生,做了一些编程题目,建立了编码兴趣,对进一步学习有信心和动力。
⭐️中级者
精通编程语言,编码得心应手,做过几百道基础算法题,并且准备继续对算法竞赛倾心投入,可能遇到学习瓶颈,计算思维还不够。
⭐️高级者
获得过蓝桥杯、ICPC、CCPC、NIO的奖牌。

以下内容按难度进行了划分

阶段内容初级中级高级
阶段一基础数据结构掌握链表、队列、栈,树掌握堆
阶段二基本算法掌握二分法、排序与排列掌握倍增法、分治法、贪心法
阶段三搜索掌握BFS和DFS、洪水填充掌握双向广搜、IDDFS和IDA*掌握BFS与双端队列、A*算法
阶段四高级数据结构掌握并查集、二叉查找树掌握树状数组、线段树、LCA、笛卡尔树集掌握可持久化线段树、动态树与LCT
阶段五动态规划掌握DP概念和编程方法、经典线性DP问题掌握数位统计DP、区间DP、树形DP掌握一般优化、单调队列优化、四边形不等式优化
阶段六数论和线性代数掌握模运算、高斯消元、素数掌握矩阵的应用、0/1分数规则、威尔逊定理掌握积性函数、欧拉函数、杜教筛
阶段七组合数学掌握鸽巢原理、二项式定理和杨辉三角掌握卢卡斯定理、容斥原理掌握母函数、公平组合游戏(博弈论)
阶段八计算几何掌握二维几何、圆掌握三维几何
阶段九字符串掌握进制哈希、Manacher掌握字典树、回文树、KMP掌握AC自动机、后缀自动机
阶段十图论掌握图的储存、拓扑排序掌握无向图的连通性、有向图的连通性、最短路径掌握最大流、二分图

⭐️⭐️⭐️下面部分将进行超链接,未进行超链接的部分表示还没有更新

三、算法竞赛具体学习内容

1、基础数据结构

1.1、链表

1.1.1、动态链表

1.1.2、静态链表

1.1.3、STL list

1.2、队列

1.2.1、STL queue

1.2.2、手写循环队列

1.2.3、双端队列和单调队列

1.2.4、优先队列

1.3、栈

1.3.1、STL stack

1.3.2、手写栈

1.3.3、单调栈

1.4、二叉树和哈夫曼树

1.4.1、二叉树的概念

1.4.2、二叉树的遍历

1.4.3、哈夫曼树和哈夫曼编码

1.5、堆

1.5.1、二叉堆的概念

1.5.2、二叉堆的操作

1.5.3、二叉堆的手写代码

1.5.4、堆和priority_queue

2、基本算法

2.1、算法复杂度

2.1.1、算法的概念

2.1.2、复杂度和大O记号

2.2、尺取法

2.2.1、尺取法的概念

2.2.2、反向扫描

2.2.3、同向扫描

2.3、二分法

2.3.1、二分法的理论背景

2.3.2、整数二分

2.3.3、实数二分

2.4、三分法

2.4.1、原理

2.4.2、实数三分

2.4.3、整数三分

2.5、倍增法与ST算法

2.5.1、倍增法

2.5.2、ST算法

2.6、前缀和与差分

2.6.1、一维差分

2.6.2、二维差分

2.6.3、三维差分

2.7、离散化

2.7.1、离散化的概念

2.7.2、离散化手工编码

2.7.3、用STL函数实现离散化

2.7.4、离散化的应用

2.8、排序和排列

2.8.1、排序函数

2.8.2、排列

2.9、分治法

2.9.1、汉诺塔和快速幂

2.9.2、归并排序

2.9.3、快速排序

2.10、贪心法与拟阵

2.10.1、贪心法

2.10.2、拟阵

3、搜索

3.1、BFS和DFS基础

3.1.1、搜索简介

3.1.2、搜索算法的基本思路

3.1.3、BFS的代码实现

3.1.4、DFS的常见操作和代码框架

3.1.5、BFS和DFS的对比

3.1.6、连通性判断

3.2、剪枝

3.2.1、BFS判重

3.2.2、剪枝的应用

3.3、洪水填充

3.4、BFS与最短路径

3.5、双向广搜

3.5.1、双向广播的原理和复杂度分析

3.5.2、双向广搜的两种实现

3.5.3、双向广搜例题

3.6、BFS与优先队列

3.7、BFS与双端队列

3.8、A*算法

3.8.1、贪心最优搜索和Dijkstra算法

3.8.2、A*算法的原理和复杂度

3.8.3、3种算法的对比

3.8.4、h函数的设计

3.8.5、A*算法例题

3.9、IDDFS和IDA*

3.9.1、IDDFS

3.9.2、IDA*

4、高级数据结构

4.1、并查集

4.1.1、并查集的基本操作

4.1.2、合并的优化

4.1.3、查询的优化(路径压缩)

4.1.4、带权并查集

4.2、树状数组

4.2.1、树状数组的概念和基本编码

4.2.2、树状数组的基本应用

4.2.3、树状数组的扩展应用

4.3、线段树

4.3.1、线段树的概念

4.3.2、区间查询

4.3.3、区间操作与Lazy-Tag

4.3.4、线段树的基础应用

4.3.5、区间最值和区间历史最值

4.3.6、区间合并

4.3.7、扫描线

4.3.8、二维线段树(树套树)

4.4、可持久化线段树

4.4.1、可持久化线段树的思想

4.4.2、区间第k大/小问题

4.4.3、其他经典问题

4.5、分块与莫队算法

4.5.1、分块

4.5.2、基础莫队算法

4.5.3、待修改的莫队算法

4.5.4、树上莫队

4.6、块状链表

4.7、简单树上问题

4.7.1、树的重心

4.7.2、树的直径

4.8、LCA

4.8.1、倍增法求LCA

4.8.2、Tarjan算法求LCA

4.8.3、LCA应用

4.9、树上的分治

4.9.1、静态点分治

4.9.2、动态分治

4.10、树链部分

4.10.1、树链剖分的概念

4.10.2、树链剖分的典型应用

4.11、二叉查找树

4.12、替罪羊树

4.12.1、不平衡率

4.12.2、替罪羊树的操作

4.12.3、例题

4.13、Treap树

4.13.1、Treap树的性质

4.13.2、基于旋转法的Treap树操作

4.14、FHQ Treap树

4.14.1、FHQ的基本操作

4.14.2、FHQ Treap树的基本应用

4.15、笛卡尔树

4.15.1、笛卡尔树的概念

4.15.2、用单调栈建笛卡尔树

4.15.3、笛卡尔树和RMQ问题

4.16、Splay树

4.16.1、Splay旋转

4.16.2、Splay树的平摊分析

4.16.3、Splay树的常用操作

4.17、K-D树

4.17.1、从空间到二叉树的转换

4.17.2、K-D树的概念和基本操作

4.17.3、寻找最近点

4.17.4、区间查询

4.18、动态树与LCT

4.18.1、LCT的思想

4.18.2、从原树到辅助树

4.18.3、LCT的存储和性质

4.18.4、LCT的操作

4.18.5、LCT的基本应用

5、动态规划

5.1、DP概念和编程方法

5.1.1、DP的概念

5.1.2、DP的两种编程方式

5.1.3、DP的设计和实现

5.2、经典线性DP问题

5.3、数位统计DP

5.3.1、数位统计DP的递推实现

5.3.2、数位统计DP的记忆化搜索实现

5.3.3、数位统计DP的例题

5.4、状态压缩DP

5.4.1、引子

5.4.2、状态压缩DP的原理

5.4.3、状态压缩DP的例题

5.4.4、三进制状态压缩DP

5.5、区间DP

5.5.1、石子合并问题和两种模板代码

5.5.2、区间DP例题

5.5.3、二维区间DP

5.6、树形DP

5.6.1、树形DP的基本操作

5.6.2、背包与树形DP

5.7、一般优化

5.8、单调队列优化

5.8.1、单调队列优化的原理

5.8.2、单调队列优化例题

5.9、斜率优化/凸壳优化

5.9.1、把状态转移方程变换为平面的斜率问题

5.9.2、求一个dp[i]

5.9.3、求所有dp[i]

5.9.4、例题

5.10、四边形不等式优化

5.10.1、应用场合

5.10.2、四边形不等式优化操作

5.10.3、四边形不等式定义和单调性定义

5.10.4、四边形不等式定理

5.10.5、例题

6、数论和线性代数

6.1、模运算

6.2、快速幂

6.3、矩阵的应用

6.3.1、矩阵的计算

6.3.2、矩阵快速幂

6.3.3、矩阵快速幂加速递推

6.3.4、矩阵乘法与路径问题

6.4、高斯消元

6.4.1、高斯消元的基本操作

6.4.2、高斯约当消元法

6.4.3、例题

6.5、异或空间线性基

6.5.1、线性基的构造

6.5.2、线性基的应用

6.6、0/1分数规则

6.6.1、二分法与0/1分数规则

6.6.2、应用场景

6.7、GCD和LCM

6.7.1、GCD

6.7.2、LCM

6.7.3、裴蜀定理

6.8、线性丢番图方程

6.8.1、二元线性丢番图方程

6.8.2、扩展欧几里得算法与二元线性丢番方程的解

6.8.3、多元线性方程丢番图方程

6.9、同余

6.9.1、同余概述

6.9.2、一元线性同余方程

6.9.3、逆

6.9.4、同余方程组

6.10、素数(质素)

6.10.1、小素数的判定

6.10.2、大素数的判定

6.10.3、素数筛

6.10.4、质因数分解

6.11、威尔逊定理

6.12、积极函数

6.13、欧拉函数

6.13.1、欧拉函数的定理和性质

6.13.2、求欧拉函数的通解公式

6.13.3、用线性筛(欧拉筛)求1~n内所有的欧拉函数

6.14、整除分块(数论分块)

6.15、迪利克雷卷积

6.16、莫比乌斯函数和莫比乌斯反演

6.17、杜教筛

6.17.1、杜教筛的起源

6.17.2、杜教筛公式的推导

6.17.2、杜教筛算法和复杂度

6.17.3、杜教筛模板代码

7、组合数学

7.1、基本概念

7.2、鸽巢原理

7.3、二项式定理和杨辉三角

7.4、卢卡斯定理

7.5、容斥原理

7.6、Catalan数和Stirling数

7.6.1、Catalan数

7.6.2、Stirling数

7.7、Burnside定理和polya计数

7.7.1、置换群

7.7.2、Burnside定理

7.7.3、polya计数

7.8、母函数

7.8.1、普通型母函数

7.8.2、指数型母函数

7.8.3、母函数与泰勒级数

7.9、公平组合游戏(博弈论)

7.9.1、巴什游戏与P-position

7.9.2、尼姆游戏

7.9.3、图游戏与Sprague-Grundy函数

7.9.4、威佐夫游戏

8、计算几何

8.1、二维几何

8.1.1、点和向量

8.1.2、点积和叉积

8.1.3、点和线

8.1.4、多边形

8.1.5、凸包

8.1.6、最近点对

8.1.7、旋转卡壳

8.1.8、半平面交

8.2、圆

8.2.1、基本计算

8.1.2、最小圆覆盖

8.3、三维几何

8.3.1、三维点和线

8.3.2、三维点积

8.3.3、三维叉积

8.3.4、最小球覆盖

8.3.5、三维凸包

8.3.6、三维几何例题

9、字符串

9.1、进制哈希

9.1.1、哈希函数BKDRHash

9.1.2、进制哈希的应用

9.2、Manacher

9.2.1、暴力法求最长回文子串

9.2.2、Manacher算法

9.2.3、模板代码

9.3、字典树

9.3.1、字典树的构造

9.3.2、模板代码

9.4、回文树

9.4.1、回文数的关键技术

9.4.2、模板代码

9.5、KMP

9.5.1、朴素的模式匹配算法

9.5.2、KMP算法

9.5.3、模板代码和例题

9.5.4、扩展KMP

9.6、AC自动机

9.6.1、AC自动机算法

9.6.2、模板代码

9.7、后缀树和后缀树组

9.7.1、后缀树和后缀树组的概念

9.7.2、倍增法求

9.7.3、后缀树的经典应用

9.8、后缀自动机

9.8.1、后缀自动机的概念

9.8.2、endpos和等价类

9.8.3、后缀自动机的构造

9.8.4、模板代码

9.8.5、后缀自动机的应用

10、图论

10.1、图的储存

10.1.1、邻接矩阵

10.1.2、邻接表

10.1.3、链式前向星

10.2、拓扑结构

10.2.1拓扑排序的概念

10.2.2基于BFS的拓扑排序

10.2.3基于DFS的拓扑排序

10.2.4、输出拓扑排序

10.3欧拉路

10.3.1、欧拉路和欧拉回路的存在性判断

10.3.2、输出一个欧拉回路

10.4、无向图的连通性

10.4.1、割点和割边

10.4.2双连通分量

10.5、有向图的连通性

10.5.1、Kosaraju算法

10.5.2、Tarjan算法

10.6、基环树

10.7、2-SAT

10.8、最短路径

10.8.1、Floyd算法

10.8.2、传递闭包

10.8.3、Dijkstra算法

10.8.4、Bellman-Ford算法

10.8.5、SPFA算法

10.8.6、比较Bellman-Ford算法和Dijkstra算法

10.8.7、负环和差分约束系统

10.9、最小生成树

10.9.1、Kruskal算法

10.9.2、Prim算法

10.9.3、扩展问题

10.10、最大流

10.10.1、Ford-Fullkerson方法

10.10.2、Edmonds-Karp算法

10.10.3、Dinic算法

10.10.4、SAP算法

10.10.5、混合圆的欧拉回路

10.11、二分圆

10.12、最小割

10.13、费用流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

23 - x的平方根,快速幂,超级次方

文章目录1. x的平方根2. 快速幂3. 超级次方1. x的平方根 二分查找 class Solution { public:int mySqrt(int x) {int left 1, right x;while(left < right){int mid left (right - left) / 2;if(mid > x / mid){right mid - 1;}else if(mid < x / mid){left mi…

OpenShift 4 - Red Hat 是如何对容器镜像的安全风险进行评估分级的

《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录RedHat 对 CVE 的风险级别的评级通用漏洞评分系统 CVSS红帽严重性分级RedHat 对容器镜像的整体风险的分级云原生应用的运行载体是容器镜像&#xff0c;因此容器镜像的安全便是云原生应用安全的关键因素。为此&#xff0c;Re…

联合解决方案|亚信科技AntDB携手蓝凌软件,助推企业数字化办公转型升级

随着企业数字化转型的深入&#xff0c;企业对于协同办公、移动门户、数字运营、智能客服等方面的需求越来越高&#xff0c;数智化正成为催生新动能和新优势的关键力量。数字化的办公平台可以帮助企业实现各类信息、流程的集中化、数字化和智能化管理&#xff0c;为企业管理者提…

老板,你的绩效管理该升级了!

中小企业的绩效考核&#xff0c;一直是一个备受关注的话题。虽然传统的绩效考核理论已经非常成熟&#xff0c;但是在实际应用中&#xff0c;我们往往会遇到各种各样的问题。因此&#xff0c;在选择绩效考核工具和方法时&#xff0c;我们应该注重实用性&#xff0c;不断探索新的…

32位单片机MM32G0140免费申请样品及开发板

灵动微MM32G系列MCU搭载ArmCortex-M0或安谋科技“星辰”STAR-MC1处理器&#xff0c;率先推出的产品支持64KB到128KB Flash存储范围&#xff0c;提供从20脚到64脚封装选项&#xff0c;适用于广泛的智能工业与电机&#xff0c;物联网&#xff0c;智能家居和消费类等应用。其中&am…

比亚迪车载Android开发岗三面经历~

前言 首先&#xff0c;我想说一下我为什么会想去比亚迪这样的车企做车载Android开发。我是一名有5年经验的Android开发工程师&#xff0c;之前一直在互联网软件公司工作&#xff0c;做过移动端App和IoT产品的开发。但我一直对汽车领域很感兴趣&#xff0c;也希望自己的技术能应…

【python+requests】接口自动化测试

这两天一直在找直接用python做接口自动化的方法&#xff0c;在网上也搜了一些博客参考&#xff0c;今天自己动手试了一下。 一、整体结构 上图是项目的目录结构&#xff0c;下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类&#xff0c;比如数据库sql…

前端算法codewhy第一章:队列

目录 认识队列 生活中的队列 开发中队列的应用 队列类的创建 队列的常见操作 击鼓传花 import ArrayQueue from "./01_实现队列结构Queue";function hotPotato(names: string[], num: number): number {if (names.length 0) return -1;// 1.创建队列结构const queue…

数据库安装与使用、mysql、sqlite、mongodb

一、MongoDB MongoDB Server 安装 优秀文章&#xff1a; link1 link2 MongoDB 是一个文档数据库&#xff0c;旨在简化开发和扩展。 下载 官网(社区版) &#xff1a;https://www.mongodb.com/try/download/community 下载完后一路安装即可。 添加环境变量 开启 mongodb服务…

[Linux]环境变量

一.什么是环境变量 为了满足不同的运行场景&#xff0c;操作系统预先设置了一大批全局变量&#xff0c;这种可以指定操作系统运行环境的变量就是环境变量。 我们平常使用的指令本质上也是用C语言实现的一个个小程序&#xff0c;但是我们在执行我们自己的可执行程序时往往是类…

go调用docker远程API(二)-docker API 的容器操作

文章目录1 获取容器列表2 查看指定容器信息3. 查看容器日志4 创建容器4.1 简单使用4.1.1 语法4.1.2 完整示例4.2 端口映射4.2.1 语法4.2.2 完整示例4.3 挂载本机目录/文件4.3.1 语法4.3.2 完整代码5. 启动容器6 停止容器7 删除&#xff08;已停止的&#xff09;容器8 进入容器执…

线程池的7种创建方式

文章目录普通方式创建线程存在的问题什么是线程池线程池的好处线程池设计思路线程池相关类的继承关系线程池的创建方式固定容量线程池——FixedThreadPool相关构造方法示例运行结果缓存线程池——CachedThreadPool相关构造方法示例运行结果单线程线程池——SingleThreadExecuto…

关于国产化系统银河麒麟(Kylin)的问题记录--持续更新

kylin 镜像 &#xff1a; Kylin-Server-10-SP2-x86-Release-Build09-20210524 Kylin-Server-10-SP1-Release-Build20-20210518-x86_64 1.ansible 模块无法使用yum 报错&#xff1a;"msg": "The Python 2 bindings for rpm are needed for this module. If you r…

Dart语言操作符?和!的用法

一.基本使用 1. ? 操作符跟在类型后面&#xff0c;表示当前变量可为null。 int a null; //这句代码在有空安全时&#xff0c;编译会提示错误如果想给一个变量赋值null要如何处理呢&#xff1f;只需要在类型 后面添加操作符&#xff1f;即可&#xff0c;eg: int? a null…

UWB高精度定位系统源码,工业安全定位系统源码

基于VueSpring boot前后端分离架构开发的一套UWB高精度定位系统源码。有演示。 文末获取联系 系统采用UWB高精度定位技术&#xff0c;可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术&#xff0c;目前应用主要聚焦在室内外精确定位。在工业自动化…

spring boot 实现根据用户名查找用户功能

目录 1、UserEnetity类 2、UserMapper类 3、UserService类 4、UserController类 5、postman测试结果 为了实现根据用户名查询用户功能&#xff0c;我们需要在spring boot框架当中编写一下几个类&#xff1a; 1、UserEnetity类 它是根据数据库表的实体类&#xff0c;用于…

Downie 4 4.6.13 MAC上最好的一款视频下载工具

Downie for Mac 简介 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…

蓝桥杯第19天(Python)(疯狂刷题第2天)

题型&#xff1a; 1.思维题/杂题&#xff1a;数学公式&#xff0c;分析题意&#xff0c;找规律 2.BFS/DFS&#xff1a;广搜&#xff08;递归实现&#xff09;&#xff0c;深搜&#xff08;deque实现&#xff09; 3.简单数论&#xff1a;模&#xff0c;素数&#xff08;只需要…

国产ARM+FPGA架构在“能源电力”中的典型应用详解

能源电力作为国民经济发展的“先导产业”和“基础行业”,面对当今复杂多变的国际形势,国内能源电力企业为追求更高的自主可控,正不断寻求各种经过行业验证的国产方案。 而单ARM架构已很难应对能源电力多通道/高速AD数据采集、处理、存储和显示的应用场景。目前,ARM + FPGA异…

Linux系统-gunzip命令简介以及常用参数

命令 – 解压提取文件内容 gzip命令 gzip命令是一种数据压缩方式&#xff0c;它是在Linux操作系统中常用的一种压缩工具&#xff0c;是GNU项目中自带的压缩程序之一。它是采用Lempel-Ziv编码(LZ77)和哈夫曼编码(Huffman Coding)进行压缩数据的&#xff0c;被广泛应用于软件发…