常用/常考算法总结

转自tangjz的博客...

基础算法

模拟

搜索

  1. 广度优先搜索(BFS)
  2. 优化:双向BFS
  3. 深度优先搜索(DFS)
  4. 优化:折半DFS
  5. 迭代加深搜索(IDS)
  6. 启发式搜索(Astar)
  7. 优化:IDAstar
  8. 优化:剪枝、位运算

排序

  1. 冒泡排序/选择排序
  2. 基数排序/桶排序
  3. 计数排序
  4. 插入排序/希尔排序
  5. 快速排序
  6. 归并排序/求逆序对数
  7. 堆排序

贪心

分治

  1. 二分/三分/n分
  2. cdq分治

倍增/ST

离散化

二分答案

快速幂/十进制快速幂

基础数学

数列求和

泰勒展开

矩阵

  1. 矩阵乘法
  2. 高斯消元
  3. 判断线性相关

Catalan数

组合数学

  1. 加法原理/乘法原理
  2. 组合数递推/杨辉三角
  3. 二项式定理
  4. 抽屉原理/鸽笼原理
  5. Lucas定理
  6. 容斥原理

数论

质数判定/Miller-Rabin检验

分解质因数/求约数

欧几里得算法/辗转相除法

扩展欧几里得算法/乘法逆元/二元一次同余方程

线性预处理1-n乘法逆元

素数筛

  1. 埃拉托斯特尼筛
  2. 欧拉筛

欧拉函数

莫比乌斯函数

费马小定理

威尔逊定理

中国剩余定理/孙子定理

二次剩余/Cipolla‘s Algorithm

原根

离散对数/Baby-Step Giant-Step

群论

置换

Burnside引理

Polya定理

动态规划

背包dp

  1. 01背包
  2. 完全背包
  3. 多重背包
  4. 混合背包
  5. 二维背包
  6. 分组背包
  7. 树形背包
  8. 泛型背包

按维度

  1. 线性dp
  2. 区间dp
  3. 高维dp

按类型

  1. 划分dp
  2. 最长上升子序列(LIS)
  3. 最长公共子序列(LCS)
  4. 有向无环图(DAG)上dp
  5. (基于联通性的)状态压缩dp

优化

  1. 滚动数组
  2. 前缀和
  3. 四边形不等式
  4. 斜率优化
  5. 位运算
  6. 数据结构
  7. cdq分治

技巧

  1. 记忆化搜索
  2. 顺推/逆推
  3. 最小表示法

图论

连通性

  1. 图的遍历
  2. 拓扑排序
  3. 强联通分量
  4. 割点、桥、双联通分量/tarjan算法

  1. 最近公共祖先(LCA)/tarjan算法
  2. 树的中心/直径
  3. 树的重心
  4. 树的同构

最短路

  1. 多源最短路径(APSP)/floyd
  2. 最小环
  3. 传递闭包
  4. 单源最短路径(SSSP)/queue+bellman-ford/heap+dijkstra

生成树

  1. 最小生成树
  2. 最小比例生成树
  3. 最小瓶颈树

二分图

  1. 二分图验证
  2. 二分图染色
  3. 最大匹配/匈牙利算法
  4. 最优匹配/KM算法

网络流

  1. dinic算法
  2. isap算法
  3. 预流推进算法
  4. 技巧:拆点
  5. 优化:合点/合边
  6. 优化:线段树

数据结构

高精度

  1. 高精度对低精度加减乘除取余
  2. 高精度对高精度加减乘除取余
  3. 优化:快速傅里叶变换

链表

  1. 单双向链表
  2. 块状链表
  3. 邻接表/边表

队列

  1. 循环队列
  2. 优先队列/最小二叉堆
  3. 左偏树
  4. Fibonacci堆

  1. 二叉查找树
  2. 堆(同上)
  3. 笛卡尔树
  4. 树状数组
  5. 线段树
  6. 拓展:动态线段树、四分树
  7. 重量平衡树
  8. 伸展树

并查集

哈希表(Hash)

自动机

字符串

  1. Trie树
  2. KMP
  3. Manacher
  4. AC自动机(Aho-Corasick Automaton)
  5. 后缀数组/后缀树/后缀自动机/后缀平衡树等

动态树

  1. 树链剖分/树块剖分
  2. Link-Cut Tree/Euler-Tour tree

计算几何

平面几何/立体几何/解析几何/参数方程

判断点与多边形关系(转角法/扫描线法)

多边形面积交/面积并

极角排序

凸包/旋转卡壳

半平面交

三角剖分/Voronoi图

博弈论

SG组合游戏/SG函数

Bash游戏/Wythoff游戏/NIM游戏

对抗搜索

概率论

完全概率

Bayes定理

Markov过程

Chebyshev定理

杂项

分块

随机调整/模拟退火/随机爬山

单纯形法

时间: 2024-10-14 03:34:22

常用/常考算法总结的相关文章

2017校招常考算法题归纳&典型题目汇总

2017校招即将来临,我们为大家整理了2017校招的常考算法类型,以及对应的典型题目. 另附参考答案地址:http://www.jiuzhang.com/solution/ 数学 尾部的零 斐波纳契数列 x的平方根 x的平方根 2 大整数乘法 骰子求和 最多有多少个点在一条直线上 超级丑数 比特位操作 将整数A转换为B 更新二进制位 二进制表示 O(1)时间检测2的幂次 二进制中有多少个1 动态规划 编辑距离 正则表达式匹配 交叉字符串 乘积最大子序列 二叉树中的最大路径和 不同的路径 通配符匹

.NET面试常考算法

1.求质数    质数也成为素数,质数就是这个数除了1和他本身两个因数以外,没有其他因数的数,叫做质数,和他相反的是合数,    就是除了1和他本身两个因数以外,还友其他因数的数叫做合数. 1 namespace ConsoleApp 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 long i; 8 while (true) 9 { 10 Console.Write("请输入要计算的质数(0退出):");

校招的常考算法类型以及对应的典型题目

数学 尾部的零斐波纳契数列x的平方根x的平方根2大整数乘法骰子求和最多有多少个点在一条直线上超级丑数 比特位操作 将整数A转换为B更新二进制位二进制表示O(1)时间检测2的幂次二进制中有多少个1 动态规划 编辑距离正则表达式匹配交叉字符串乘积最大子序列二叉树中的最大路径和不同的路径通配符匹配 堆 滑动窗口的中位数数据流中位数最高频的K个单词接雨水堆化排序矩阵中的从小到大第k个数 二叉树 二叉树中序遍历二叉树的序列化和反序列化子树最近公共祖先二叉树的层次遍历将二叉树拆成链表在二叉查找树中插入节点

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

常考面试算法题之暴力枚举

结合2017春招和秋招真题,以下几类算法题最常考,汇总了一下: 好多鱼! 牛牛有一个鱼缸.鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸.鱼缸内存在着大鱼吃小鱼的定律.经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B.考虑到这个,牛牛要放入的鱼就需要保证: 1.放进去的鱼是安全的,不会被其他鱼吃掉 2.这条鱼放进去也不能吃掉其他鱼 鱼缸里面已经存在的鱼已经相

浅析常用的排序算法

排序分内排序和外排序.内排序:指在排序期间数据对象全部存放在内存的排序.外排序:指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内.外存之间移动的排序.内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序.选择排序.交换排序.归并排序.分配排序和计数排序.插入排序主要包括直接插入排序,折半插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序主要包括冒泡排序和快速排序;归并排序主要包括二路归并(常用的归并排序)和自然归并.分配排序主要包括箱

2014年软考程序员-常考知识点复习笔记【第三章】

51CTO学院,在软考备考季特别整理了"2014年软考程序员-常考知识点复习笔记[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考程序员-常考知识点复习笔记[汇总篇]  2.线性表 (1) 性表的链式存储方式及以下几种常用链表的特点和运算:单链表.循环链表,双向链表,双向循环链表. (2)单链表的归并算法.循环链表的归并算法.双向链表及双向循环链表的插入和删除算法等都是较为常见的考查方式. (3)单链表中设置头指

网络工程师考试上午题常考哪些内容

网络工程师考试是全国计算机技术与软件水平考试的一项中级资格考试,通过考试的合格人员能根据应用部门的要求进行网络系统的规划.设计和网络设备的软硬件安装调试工作,能进行网络系统的运行.维护和管理,能高效.可靠.安全地管理网络资源,作为网络专业人员对系统开发进行技术支持和指导,具有工程师的实际工作能力和业务水平,能指导网络管理员从事网络系统的构建和管理工作.网络工程师考试是软考的一大热门,怎样才能顺利通过考试是广大考生都想知道的,下面希赛软考学院为您带来网络工程师备考锦囊之应战篇,专业老师整理的上午题

C语言常考基本问题

C语言基本问题 1. 结构化编码:if else while等等控制结构的使用.模块化设计:划分为若干子模块例如函数这种功能. 2. 解决问题的方法和步骤称为算法.好算法的要求:正确性,健壮性,可读性,效率和低存储率. 3. 算法的特点:有穷性,确定性,有零个或多个输入,有一个或多个输出,有效性. 4. 三种基本结构:顺序,选择,循环. 5. 直到型循环 是表达式值为真时结束循环.do-while 并不是直到型循环,它是典型的当型循环,当条件成立时,执行或者继续执行do中的语句. 6. size