常用算法代码库.pdf

下载地址

ACM/ICPC 算法代码库,供日常使用参考。

目录 .............................................. 1

Graph 图论 ........................................ 3

| DAG 的深度优先搜索标记 ............................................. 3

| 无向图找桥 ..................................................................... 3

| 无向图连通度(割) ........................................................ 3

| 最大团问题 DP + DFS ................................................. 3

| 欧拉路径O(E) ............................................................... 3

| DIJKSTRA 数组实现O(N^2) ..................................... 3

| DIJKSTRA O(E * LOG E) ............................................. 4

| BELLMANFORD 单源最短路O(VE) ................................. 4

| SPFA(SHORTEST PATH FASTER ALGORITHM) .............. 4

| 第K 短路(DIJKSTRA) ................................................. 5

| 第K 短路(A*) ............................................................ 5

| PRIM 求MST .................................................................... 6

| 次小生成树O(V^2) ...................................................... 6

| 最小生成森林问题(K 颗树)O(MLOGM). ...................... 6

| 有向图最小树形图 ......................................................... 6

| MINIMAL STEINER TREE ................................................ 6

| TARJAN 强连通分量 ........................................................ 7

| 弦图判断 ......................................................................... 7

| 弦图的PERFECT ELIMINATION 点排列 .......................... 7

| 稳定婚姻问题 O(N^2) .................................................. 7

| 拓扑排序 ......................................................................... 8

| 无向图连通分支(DFS/BFS 邻接阵) ............................. 8

| 有向图强连通分支(DFS/BFS 邻接阵)O(N^2) ............ 8

| 有向图最小点基(邻接阵)O(N^2)............................... 9

| FLOYD 求最小环 .............................................................. 9

| 2-SAT 问题 ..................................................................... 9

Network 网络流 ................................... 11

| 二分图匹配(匈牙利算法DFS 实现) ...................... 11

| 二分图匹配(匈牙利算法BFS 实现) ...................... 11

| 二分图匹配(HOPCROFT-CARP 的算法) .................. 11

| 二分图最佳匹配(KUHN MUNKRAS 算法O(M*M*N)) 11

| 无向图最小割 O(N^3) ............................................... 12

| 有上下界的最小(最大)流 .......................................... 12

| DINIC 最大流 O(V^2 * E) ....................................... 12

| HLPP 最大流 O(V^3) ................................................ 13

| 最小费用流 O(V * E * F) ....................................... 13

| 最小费用流 O(V^2 * F) ........................................... 14

| 最佳边割集 ................................................................... 15

| 最佳点割集 ................................................................... 15

| 最小边割集 ................................................................... 15

| 最小点割集(点连通度) ........................................... 16

| 最小路径覆盖O(N^3) ................................................ 16

| 最小点集覆盖 ............................................................... 16

Structure 数据结构 ............................... 17

| 求某天是星期几 ........................................................... 17

| 左偏树 合并复杂度O(LOG N) ................................... 17

| 树状数组 ....................................................................... 17

| 二维树状数组 ............................................................... 17

| TRIE 树(K 叉) .............................................................. 17

| TRIE 树(左儿子又兄弟) ............................................. 18

| 后缀数组 O(N * LOG N) ............................................ 18

| 后缀数组 O(N) ............................................................ 18

| RMQ 离线算法 O(N*LOGN)+O(1) ............................. 19

| RMQ(RANGE MINIMUM/MAXIMUM QUERY)-ST 算法

(O(NLOGN + Q)) ............................................................. 19

| RMQ 离线算法 O(N*LOGN)+O(1)求解LCA ............. 19

| LCA 离线算法 O(E)+O(1) ........................................ 20

| 带权值的并查集 ........................................................... 20

| 快速排序 ....................................................................... 20

| 2 台机器工作调度 ........................................................ 20

| 比较高效的大数 ........................................................... 20

| 普通的大数运算 ........................................................... 21

| 最长公共递增子序列 O(N^2) .................................... 22

| 0-1 分数规划 ............................................................... 22

| 最长有序子序列(递增/递减/非递增/非递减) .... 22

| 最长公共子序列 ........................................................... 23

| 最少找硬币问题(贪心策略-深搜实现) ................. 23

| 棋盘分割 ....................................................................... 23

| 汉诺塔 ........................................................................... 23

| STL 中的PRIORITY_QUEUE .......................................... 24

| 堆栈 ............................................................................... 24

| 区间最大频率 ............................................................... 24

| 取第K 个元素................................................................ 25

| 归并排序求逆序数 ....................................................... 25

| 逆序数推排列数 ........................................................... 25

| 二分查找 ....................................................................... 25

| 二分查找(大于等于V 的第一个值)........................ 25

| 所有数位相加 ............................................................... 25

Number 数论 ...................................... 26

2

|递推求欧拉函数PHI(I) ............................................... 26

|单独求欧拉函数PHI(X) ............................................... 26

| GCD 最大公约数 .......................................................... 26

| 快速 GCD ...................................................................... 26

| 扩展 GCD ...................................................................... 26

| 模线性方程 A * X = B (% N) .................................. 26

| 模线性方程组 ............................................................... 26

| 筛素数 [1..N] ............................................................ 26

| 高效求小范围素数 [1..N] ........................................ 26

| 随机素数测试(伪素数原理) ...................................... 26

| 组合数学相关 ............................................................... 26

| POLYA 计数 .................................................................... 27

| 组合数C(N, R) ........................................................... 27

| 最大1 矩阵 ................................................................... 27

| 约瑟夫环问题(数学方法) ....................................... 27

| 约瑟夫环问题(数组模拟) ....................................... 27

| 取石子游戏1 ................................................................ 27

| 集合划分问题 ............................................................... 27

| 大数平方根(字符串数组表示) ............................... 28

| 大数取模的二进制方法 ............................................... 28

| 线性方程组A[][]X[]=B[] ....................................... 28

| 追赶法解周期性方程 ................................................... 28

| 阶乘最后非零位,复杂度O(NLOGN) ........................... 29

递归方法求解排列组合问题 ......................... 30

| 类循环排列 ................................................................... 30

| 全排列 ........................................................................... 30

| 不重复排列 ................................................................... 30

| 全组合 ........................................................................... 31

| 不重复组合 ................................................................... 31

| 应用 ............................................................................... 31

模式串匹配问题总结 ............................... 32

| 字符串HASH .................................................................. 32

| KMP 匹配算法O(M+N) ............................................... 32

| KARP-RABIN 字符串匹配 ............................................. 32

| 基于KARP-RABIN 的字符块匹配................................. 32

| 函数名: STRSTR ........................................................... 32

| BM 算法的改进的算法SUNDAY ALGORITHM ................ 32

| 最短公共祖先(两个长字符串) ............................... 33

| 最短公共祖先(多个短字符串) ............................... 33

Geometry 计算几何 ................................ 34

| GRAHAM 求凸包 O(N * LOGN) .................................... 34

| 判断线段相交 ............................................................... 34

| 求多边形重心 ............................................................... 34

| 三角形几个重要的点 ................................................... 34

| 平面最近点对 O(N * LOGN) ...................................... 34

| LIUCTIC 的计算几何库 ................................................ 35

| 求平面上两点之间的距离 ........................................... 35

| (P1-P0)*(P2-P0)的叉积 ....................................... 35

| 确定两条线段是否相交 ............................................... 35

| 判断点P 是否在线段L 上 ............................................ 35

| 判断两个点是否相等 ................................................... 35

| 线段相交判断函数 ....................................................... 35

| 判断点Q 是否在多边形内 .......................................... 35

| 计算多边形的面积 ....................................................... 35

| 解二次方程 AX^2+BX+C=0 ........................................ 36

| 计算直线的一般式 AX+BY+C=0 ................................. 36

| 点到直线距离 ............................................................... 36

| 直线与圆的交点,已知直线与圆相交 ....................... 36

| 点是否在射线的正向 ................................................... 36

| 射线与圆的第一个交点 ............................................... 36

| 求点P1 关于直线LN 的对称点P2 .............................. 36

| 两直线夹角(弧度) ................................................... 36

ACM/ICPC 竞赛之STL ............................... 37

ACM/ICPC 竞赛之STL 简介 .......................................... 37

ACM/ICPC 竞赛之STL--PAIR ...................................... 37

ACM/ICPC 竞赛之STL--VECTOR .................................. 37

ACM/ICPC 竞赛之STL--ITERATOR 简介 ...................... 38

ACM/ICPC 竞赛之STL--STRING .................................. 38

ACM/ICPC 竞赛之STL--STACK/QUEUE ........................ 38

ACM/ICPC 竞赛之STL--MAP ........................................ 40

ACM/ICPC 竞赛之STL--ALGORITHM ............................. 40

STL IN ACM ..................................................................... 41

头文件 ............................................................................... 42

线段树 ........................................... 43

求矩形并的面积(线段树+离散化+扫描线) ............... 43

求矩形并的周长(线段树+离散化+扫描线) ............... 44

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Algorithms   本次README修订为算法Algorithms的第100次commit,首先我们庆祝自2016年8月4日本仓建立以来Dev-XYS在算法学习方面取得的显著进步!   这里有各种算法的C++代码,任何人可以在自己的任何程序中使用,欢迎大家指出代码中的错误以及有待改进的地方。   本仓内所有代码的授权方式为Unlicense,大家如果使用我的代码开发自己的软件挣了大钱,或是参考我的代码在NOI中得了金牌,我都会很高兴的。使用这里的代码之后,你可以自主选择是否公开源代码。总而言之,你可以把这里的代码当作你自己写的一样,无论怎样使用都是被允许的。但是,我不对本仓代码的正确性负责。大家要是使用我的代码开发软件而导致程序崩溃,或是参考我的代码在考试时出错,请不要向我抱怨。如果你愿意,遇到问题可以在Issues中提出来,我们共同解决。我们不赞成Pull Request,因为本仓主要储存作者已经学习的算法,全部代码均由作者本人负责维护与更新。   以下索引提供了本仓算法的中文名,方便大家查找。更新可能有很长时间的延迟,不保证所有算法的名称都在列表中出现。 Index --------------------------Contents-------------------------- --------------------------FileName-------------------------- AC自动机 Aho-Corasick-Automation 单源最短路径(SPFA) Bellman-Ford(Queue-Optimised) 单源最短路径(Bellman-Ford) Bellman-Ford 使用Edmonds-Karp进行二分图匹配 Bigrpah-Matching(Edmonds-Karp) 普通的二叉搜索树 Binary-Search-Tree 广度优先搜索 Breadth-First-Search 冒泡排序 Bubble-Sort 桶排序 Bucket-Sort 组合数的递推求解 Combination(Recursion) 枚举组合 Combination 基本的复数类 Complex-Number 割点 Cut-Vertex 深度优先搜索 Depth-First-Search 堆优化的Dijkstra算法 Dijkstra(Heap-Optimised) 并查集 Disjoint-Set-Union 最大流Edmonds-Karp算法 Edmonds-Karp 欧拉函数 Euler's-Totient-Function 有向图的欧拉回路 Eulerian-Tour(Digraph) 拓展欧几里得算法 Extended-Euclid 简单的快速幂 Fast-Exponentiation 树状数组 Fenwick-Tree 所有结点对之间的最短路径(Floyd) Floyd-Warshall 凸包算法(Graham扫描法) Graham-Scan 辗转相除法求最大公约数 Greatest-Common-Divisor 堆排序 Heap-Sort ISAP算法 Improved-Shortest-Augmenting-Path(Naive) 插入排序 Insertion-Sort 字符串匹配(KMP) Knuth-Morris-Pratt 最小生成树(Kruskal) Kruskal 最近公共祖先(Tarjan) Least-Common-Ancestor(Tarjan) 使用后缀数组求解最长公共子串 Longest-Common-Substring 最长上升子序列(n·log(n)) Longest-Increasing-Subsequence(n·log(n)) 倍增法求最近公共祖先 Lowest-Common-Ancestor(Doubling) 朴素的矩阵乘法 Matrix-Multiplication(Naive) 归并排序 Merge-Sort 最小堆 Min-Heap 乘法逆元 Modular-Multiplicative-Inverse 仅支持单点修改的可持久化线段树(维护区间和值) Persistent-Segment-Tree(Sum) 试除法素数测试 Prime-Check(Naive) 线性的素数筛法 Prime-Sieve(Linear) 队列的基本操作 Queue 快速排序的优化版本 Quick-Sort(Extra-Optimised) 快速排序的随机化版本 Quick-Sort(Randomized) 快速排序 Quick-Sort 使用向量叉积判断两个有向线段的时针关系 Segment-Direction 线段树维护区间最大值 Segment-Tree(Maximum) 线段树维护区间最小值 Segment-Tree(Minimum) 线段树维护区间和值 Segment-Tree(Sum) 普通的选择算法 Selection Eratosthenes素数筛法 Sieve-of-Erotosthenes 指针版的单向链表 Singly-Linked-List(Pointer) 跳表 Skip-List ST表 Sparse-Table 伸展树 Splay 博弈论SG函数 Sprague-Grundy 栈的基本操作 Stack 递推法求解无符号第一类斯特林数 Stirling-Number(Cycle,Unsigned,Recursion) 递推法求解第二类斯特林数 Stirling-Number(Subset,Recursion) 倍增法求解后缀数组 Suffix-Array(Doubling) 倍增法求解后缀数组(附带Height数组) Suffix-Array-with-Height(Doubling) 使用Tarjan算法求解强连通分量 Tarjan(Strongly-Connected-Components) 数组版的字典树 Trie(Array) 指针版的字典树 Trie(Pointer)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值