2018/8/18 部分算法应用总结

1.后缀数组和AC自动机都可以处理多模板的文本匹配问题

不同:

AC自动机需要事先知道所有的模板,然后对于一个文本串进行多模板匹配(在线输入)

后缀数组需要事先知道整个文本串,模板可以一个一个的动态输入

2.字典树Trie

  判断一个单词是否属于字典时有优势

  判断一个文本包含多少个字典中单词的时候可以采用AC自动机

3.KMP

可以做到统计一个串出现的次数

找到模板第一次出现的位置

最长连续公共子序列

求字符串最短循环节

4.线段树

单点更新,区间求值

区间set,整体查询

区间求和,区间查询

区间覆盖染色问题

扫描线

5.RMQ

解决对一个整数数组的任意区间[L,R]查询最值时,以O(1)的时间复杂度回答询问

6.树状数组

计算A[1]开始的和,处理区间更新,单点查询的问题

7.并查集

处理无向图的连通分量问题,维护信息,路径压缩

解决有关物与物之间的关系问题的数据结构且这种关系还必须是可传递的关系

8.二分图判定

设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),

并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),

则称图G为一个二分图。

9.最小生成树

一个有n个结点的连通图的最小生成树是原图的极小连通子图,且包含原图中的所有n个结点,

并且有保持图连通的权值总和最小的边。
10.最短路径

Bellman_Ford,Floyd,Dijkstra

11.2-SAT问题

在实际问题中,2-SAT问题在大多数时候表现成以下形式:

有N对物品,每对物品中必须选取一个,也只能选取一个,并且它们之间存在某些限制关系(如某两个物品不能都选,某两个物品不能都不选,某两个物品必须且只能选一个,某个物品必选)等,这时,可以将每对物品当成一个布尔值(选取第一个物品相当于0,选取第二个相当于1),如果所有的限制关系最多只对两个物品进行限制,则它们都可以转化成9种基本限制关系,从而转化为2-SAT模型。

11.有向图的强连通分量

有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。

主要就是强连通分量的判定

12.无向图求割顶与桥

 对于无向图G,如果删除某个点u后,连通分量数目增加,称u为图的关节点或割顶

 对于连通图,割顶就是删除之后使图不再连通的点。

 如果删除边(u,v)一条边,就可以让连通图变成不连通的,那么边(u,v)是

13.拓扑排序

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,

是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,

若边(u,v)∈E(G),则u在线性序列中出现在v之前。

一个有向图无法拓扑排序时只有一种情况:该有向图中存在环。

题意:给你一个N点和M条有向边的图,问你该图是否可拓扑排序。

14.欧拉图

通过图(无向图或有向图)中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路,

通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路。

具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图。

猜你喜欢

转载自blog.csdn.net/qq_37748451/article/details/81810052