当前位置: 首页 > news >正文

算法竞赛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、费用流

相关文章:

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

算法竞赛前言一、为什么学习算法竞赛二、学习算法的阶段三、算法竞赛具体学习内容1、基础数据结构1.1、链表1.1.1、动态链表1.1.2、静态链表1.1.3、STL list1.2、队列1.2.1、STL queue1.2.2、手写循环队列1.2.3、双端队列和单调队列1.2.4、优先队列1.3、栈1.3.1、STL stack1.3.…...

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

图像分割技术及经典实例分割网络Mask R-CNN(含Python源码定义) 文章目录图像分割技术及经典实例分割网络Mask R-CNN(含Python源码定义)1. 图像分割技术概述2. FCN与语义分割2.1 FCN简介2.2 反卷积2.2 FCN与语义分割的关系3. Mask …...

元宇宙和医疗保健

让我们明确定义医疗保健领域的元宇宙 元宇宙这个概念已经有几十年的存在历史了,尽管当Facebook改名为Meta时,这个话题才成了头版头条。现在卫生部门的领导们也开始关注这个话题。 数字卫生领域对元宇宙的定义是如今的医疗科技主要是由医疗软件解决方案…...

iOS_从相机或相册里扫描二维码或条形码

文章目录1. 从相机里扫描1.1 申请相机权限1.2 创建Scanner1.3 开始扫描1.4 处理扫描结果2. 从相册里扫描2.1 获取相册权限2.2 打开相册2.3 获得选择结果2.4 解析相片中的二维码或条形码1. 从相机里扫描 1.1 申请相机权限 导入: import AVFoundation在项目的 Info.…...

Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你学习了如何从 PDF 和 Word 文档中提取文本。这些文件是二进制格式的,需要特殊的 Python 模块来访问它们的数据。另一方面,CSV 和 JSON 文件只是纯文本文件。…...

knife4j接口文档

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!其底层是对Springfox的封装,使用方式也和Springfox一致,只是对接口文档UI进行了优化。 核心功能…...

Windows机器安装SSH搭建,自己搞个局域网机房玩一玩

Windows机器安装SSH搭建为啥要装SSH安装OpenSSH使用 Windows 设置来安装 OpenSSHps脚本在线安装ps脚本离线安装其他二进制安装包安装为啥要装SSH 家里有多台Win机器,一台主机两个笔记本,本着不浪费的原则,打算把它们在平时的工作学习中利用起…...

二叉树的前序遍历(力扣144)

目录 题目描述: 解法一:递归法 解法二:迭代法 解法三:Morris 遍历 二叉树的前序遍历 题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root […...

【数据库管理】①实例与数据库

1.Oracle RDBMS 架构图 2. Oracle 体系结构 由此区分database和instance的区别 No.1.oracle serverdatabase instance2.databasedata file、control file、redo log file3.instancean instance accesses a database4.oracle memorySGA PGA(oracle的内存结构)5.instanceSGA …...

vba:单元格的选择,查找,合并,批注,SpecialCells,图形插入

一: 活动单元格:activecell,工作表中活动单元格只有一个 Sub activecells() a activecell.Address 取得活动单元格地址 Cells(2, 3).Activate 激活指定单元格 End Sub selection光标所选区域 Sub 光标所选区域() Selection 1 End Sub Sub …...

【内网安全】横向移动域控提权NetLogonADCSPACKDC永恒之蓝

文章目录章节点横向移动-系统漏洞-CVE-2017-0146(永恒之蓝)影响版本插件检测-横向移动CS联动MSF-检测&利用横向移动-域控提权-CVE-2014-6324横向移动-域控提权-CVE-2020-1472影响版本横向移动-域控提权-CVE-2021-42287前提条件影响版本python版本EXP利用过程C#版本EXP利用过…...

将本地项目上传到远程仓库的步骤

文章目录将本地项目上传到远程仓库的步骤1.进入想上传的项目文件夹2.初始化本地仓库3.添加该项目下的所有文件4.将文件添加到本地仓库中5.添加远程仓库6.将文件更新到远程仓库上7.将本地文件推送回到指定的远程仓库中将本地项目上传到远程仓库的步骤 1.进入想上传的项目文件夹…...

selenium+opencv实现模拟登陆(滑块验证码)

很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程&#xf…...

辽宁申请互联网医院牌照流程

辽宁申请互联网医院牌照流程|沈阳市|大连市|鞍山市|抚顺市|本溪市|丹东市|锦州市|营口市|阜新市|辽阳市|盘锦市|铁岭市|朝阳市|葫芦岛市   很多的人对互联网医院都不是很了解,也不太清楚互联网医院牌照怎么申请,其实牌照申请每个地区都不太一样&#x…...

java实现布隆过滤器

什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出来的。 它实际上是由一个很长的二进制数组一系列hash算法映射函数,用于判断一个元素是否存在于集合中。 布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和…...

gitlab部署及整合Jenkins持续构建(三)nexus私服的安装及实战、linux安装mysql

文章目录敏捷持续集成是什么?linux安装jdk和maven安装jdk安装mavenlinux安装nexus3.xnexus私服的使用编译安装mysql可能遇到的问题使用cmake时报错敏捷持续集成是什么? 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作&#x…...

一、Java基础(2)

本章概要 异常的分类及处理 异常的概念异常的分类处理异常的方式 反射机制 动态语言的概念反射机制的概念反射的作用Java 的反射 API反射的过程创建对象的两种方式Method 的 invoke 方法 1.2 异常的分类及处理 1.2.1 异常的概念 异常指在方法不能按正常方式完成时&#xf…...

软件设计师重要知识点——第一章——计算机组成与体系结构

目录 1.1数据的表示 1.2数值表示范围 1.3浮点的运算 1.4计算机结构 1.5计算机体系结构分类——Flynn 1.6指令的基本概念 1.7寻址方式 1.8CISC与RISC 1.9流水线 1.10层次化存储结构 1.11Cache 1.12主存——编址与计算 1.13总线 1.14串联系统与并联系统 1.15N模混…...

编程学习心得

我来写一些,我关于编程的简单认识吧。 我觉得编程是一门艺术,也是一项技能,需要不断地学习和练习。无论是初学者还是有经验的开发人员,都需要耐心和恒心,才能够成为一名优秀的程序员。以下是一些关于编程学习的心得和…...

web获取媒体流

1. 下面例子演示了录屏和截图功能&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...