zoukankan      html  css  js  c++  java
  • 算法理解汇总

    (可能有错别字和误用)

    基础算法

    二分

    把求解问题转化为判定问题,int->bool

    牺牲一个log,使得思维简单化

    使用前提有单调性

    比较经典的是:第K大,0/1分数规划,凸包上二分

    平衡树、权值线段树的查询,一定程度上都类似于二分的过程

    三分

    凸函数,找最值

    复杂度:$O(2*log_{frac{3}{2}}n)$其实并不优秀

    分治

    顾名思义,就是分而治之

    一般分治就是分治,考虑本层[l,r],考虑[l,mid],[mid+1,r]

    好处是有的放矢,可以范围地划分统计答案的位置。

    划分为子问题是条件

    对于处理区间问题尤为经典

    对于本层的[l,r],可以统计左端点在[l,mid],右端点在[mid+1,r]部分的答案。一般再用数据结构维护

    以及:位运算按位分治,splay分治建树

    利用分治的思想算法很多:
    多项式系列,(动态)点分治,cdq分治,,

    cdq分治

    和一般分治不同的是,cdq分治更着眼于前一半对后一半的影响,也就是有极性(普通分治一般没有极性)

    经常处理条件含偏序的问题,cdq分治本身的排序和处理顺序就无形中进行了降维

    就对cdq分治的顺序有要求了。cdq左,合并,cdq右,对于分治dp是必要的。一般的多维偏序顺序无所谓

    [学习笔记]CDQ分治

    点分治

    处理树上路径统计(点对)的一大利器。

    枚举重心,统计过重心的所有路径,典型地分治“有的放矢”的特点

    类似树形dp的处理方式,更易于数据结构的维护

    O(nlogn)logn的上界仅仅在树为链的时候才会达到。

    非常常规而优秀的一个算法

    分治本质是一个树形结构(线段树),点分治维护分治树,就可以支持一些小范围的修改操作了。

    动态点分治

    为了不重不漏,经常维护到分治树父亲部分的一些信息(因为父亲只有一个)

    边分治

    线段树分治

    贪心

    智商与直觉的算法

    (这个是NOIP热门算法(逃~))

    当前最优解->局部最优解。复杂度通常较低

    经典的问题:字典序问题

    一些题是直接贪心:可以严谨(打表)证明

    [学习笔记]贪心

    一些高端的贪心为了保证是对的,干脆支持反悔操作:

    反悔自动机与反悔堆——有关贪心的反悔操作

    往往利用差分得以实际上的反悔

    网络流的退流就是经典的模型

    模拟

    [学习笔记]模拟

    emmm

    考察选手的代码能力和心态~~~

    倍增

    本质是进行2进制拆分

    一次跳跃2^k使得复杂度在log

    经典:倍增求LCA,后缀排序。经常见于树上路径处理

    也有不同的:NOIP2018保卫王国

    经常也有倍增预处理

    快速幂

    [学习笔记]快速幂&&快速乘

    枚举

    动态规划

    正所谓万物皆可DP

    只要问题具有最优子结构,无后效性,子问题重叠性性质

    本质是对搜索的路径压缩(也即记忆化搜索)

    状态、阶段、决策、转移

    状态设计还是比较灵活的,因题而异。

    (对于一些后面dp还要考虑前面一些填法的时候,不妨在填入的时候,对未来做出承诺或者限制[学习笔记]对未来做出承诺的DP小结

    阶段主要为了防止后效性考虑

    决策就是合法性和最优性了

    转移的影响也是考虑定义

    方式有如:递推,记忆化搜索,甚至map当做队列来存(12.26模拟赛T3)

    基础DP

    基础dp例题整理

    背包

    0/1,完全,分组,多重

    是动态规划的基础问题,对于物品的组合处理有借鉴的意义

    FFT可以优化背包问题

    状压DP

    对于一类数据范围较小,但是要求精确打击的问题

    可以用状压dp解决。即暴力记录一些物质的属性

    通常复杂度是2^k,3^k这种

    斯坦纳树

    连接一些关键点的最小生成树

    [学习笔记]斯坦纳树

    插头dp

    基于连通性的状压dp

    暂时没写过什么题。。。

    数学期望DP

    做多了其实不是很麻烦

    考虑期望的线性优美性质

    概率和数学期望小结

    数位DP

    基于数字数位一类(无聊)DP

    写起来细节很多

    通常对拍好写,通常不对拍一定丸

    数位dp——奏响数字数位的美妙乐章

    动态DP

    [学习笔记]动态dp

    [动态dp]线段树维护转移矩阵

    带修改,但是最后的结果还要通过dp来实现

    dp的转移矩阵就出现辣!可以每次只改一个值,最后花费一定时间,直接算出答案

    各种线段树、树剖、全局平衡树(不会)维护转移矩阵就出现辣!

    DP套DP

    ???

    然后是各种优化

    使得基本上列出正确的DP式子

    没有不能做的

    单调队列优化DP

    对于决策的取值是一段区间

    并且“某些决策”在一次不优秀之后,一定“到死”不可能更优秀

    以此排除没用的决策。使得队头永远是最优决策

    O(N)优秀复杂度

    数据结构优化DP

    非常暴力了,没有单调的优秀性质,只能再费一个logn(甚至2个)。数据结构维护每个决策点的贡献。

    线段树维护单调栈,树状数组LIS,区间贡献拆成L加R+1减………………

    斜率优化DP

    属于数形结合

    可以化成:y=k[i]*x+f[i]+b[i]的形式,其中f[i]是dp值,(有交叉项,那么推式子的时候往这边想)

    就转化为了给定一条斜率为k的直线,选择(x,y)使得截距达到最值

    维护凸包

    根据x、k的单调性问题,单调队列,二分三分,平衡树维护凸包(还不会),线段树维护vector维护区间凸包(前提是加入一定按照x递增)

    决策单调性优化DP

    DP中最玄学一块

    决策单调性优化dp

    四边形不等式:

    如果w(l,r-1)+w(l+1,r)<=w(l,r)+w(l+1,r-1)(取min情况)

    那么w满足四边形不等式

    如果f[i][j]=min(f[i][k]+f[k+1][j]+w[i][j])w满足四边形不等式

    那么f满足决策单调性

    (好像)对于:f[i][j]=min(f[i][k]+w[k+1][j]),w满足四边形不等式,那么f也满足决策单调性。。

    DP凸优化/WQS二分

    一类有限制的选择的DP,把选择看成横坐标,最值看成纵坐标,画出的函数图像是一个凸包。那么可以DP凸优化

    通过二分进行降维,实现O(n^2)-O(nlogn)的转化

    [学习笔记]凸优化/WQS二分/带权二分

    数据结构

    队列

    链表

    并查集

    并查集重构树

    按秩合并

    路径压缩

    可持久化

    树状数组

    线段树

    李超线段树

    SegmentTree Beats

    线段树分治

    线段树优化建图

    平衡树

    Trie树

    KD-Tree

    Link-Cut-Tree

    树套树

    分块

    左偏树

    虚树

    Kruskal重构树

    并查集重构树

    二进制分组

     

    图论

    最小生成树

    LCA

    树链剖分

    dfs序

    bfs序

    欧拉遍历序

    最短路

     

    二分图

    网络流

    最大流

    最小割

    费用流

    上下界网络流

    Tarjan

    强连通分量

    2-SAT

    点双联通分量

    边双联通分量

    其他

    拓扑排序

    长链剖分

    数学

    初等数论

    基础芝士

    约数

    素数

    (扩展)Lucas定理

    (扩展)中国剩余定理

    Miller-Robin

    Pollar-Rho

    (扩展)欧拉定理

    组合数学

    prufer序列

    斯特林数

    整数划分数

    置换群

    矩阵

    高斯消元

    行列式

    多项式

    生成函数

    数列的递推

    组合生成函数

    指数生成函数

    卷积生成函数

    筛法

    埃拉托尼斯筛

    欧拉筛

    杜教筛

    Min_25筛

    莫比乌斯反演

    数论函数

    整除分块

    微积分

    导数

    积分

    计算几何

    凸包

    旋转卡壳

    Grahamn

    半平面交

    格林公式

    辛普森积分

    字符串

    KMP

    Manacher

    Trie树

    AC自动机

    后缀数组

    树上后缀排序

    后缀平衡树

    后缀自动机

    后缀树

    搜索

    DFS

    BFS

    迭代加深

    A*

    IDA*

    DLX

    其他

    随机化算法

    爬山算法

    模拟退火

    离线算法

    线段树分治略

    cdq分治略

    整体二分

    扫描线

    莫队

    时光倒流

  • 相关阅读:
    tf2 callback
    JAVA 8 新特性 Optional类
    JAVA 8 新特性 Stream API 终止操作
    JAVA 8 新特性 Stream API 中间操作
    牙醫分普通科8類專科
    asterisk todo
    室内空气质量鉴定
    javascript, jquery, nodejs学习2
    firefox extension教程
    Bjarne Stroustrup announces C++ Core Guidelines
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10045074.html
Copyright © 2011-2022 走看看