随笔分类 - 003算法学习
摘要:一、有上下限的最大流:首先,每条边的下限是必须要满足的。增加附加源点S和附加汇点T,原来的源点和汇点为s和t。对于原图G(s,t,low[u][v],high[u][v])构建相应的新图D(S,T,E),E包括,<t,s,INF>,<S,i,in[i]>,<i,T,out[i]>,<u,v,high
阅读全文
摘要:参考链接:http://blog.renren.com/blog/367737224/728617495 http://www.cppblog.com/MatoNo1/archive/2011/06/27/149604.aspx 在你看这篇文章之前,我认为你已经学习过线段树了。。。 (1)划分树是干
阅读全文
摘要:第一个推广: 在生成树计数问题中,其实我们做了这样一个假设,就是每条边的权值是1。我们再来看下这个公式 对于关联矩阵B来说(对于一个n个顶点m条边的无向图G,它的关联矩阵B是一个n*m的矩阵。对于第i条边e[i]=(u,v),那么B[u][i]和B[v][i]中一个是1,一个是-1,第i列其他值为0
阅读全文
摘要:(1)一个n个顶点的无向图G,定义它的度数矩阵D,D是一个n*n的矩阵。对于顶点u,设度数为deg[u],如果i=j,那么D[i][j]=deg[i],否则D[i][j]=0. (2)一个n个顶点的无向图G,定义它的邻接矩阵A,A是一个n*n的矩阵。如果i和j之间有边,那么A[i][j]=1,否则等
阅读全文
摘要:定义:在一个无向图中,定义一条边覆盖的点为这条边的两个端点。找到一个边集S包含最多的边,使得这个边集覆盖到的所有顶点中的每个顶点只被一条边覆盖。S的大小叫做图的最大匹配。 二分图的最大匹配算法:设左边集合为A集合,有边集合为B集合。二分图最大匹配常用的有两种方法。 (1)第一种方法叫做匈牙利算法。这
阅读全文
摘要:二分图的最小顶点覆盖 定义:假如选了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是选择最少的点来覆盖所有的边。 方法:最小顶点覆盖等于二分图的最大匹配。 我们用二分图来构造最小顶点覆盖。 对于上面这个二分图,顶点分为左右两个集合,X集合包含1,2,3,4,Y集合包含5,6,7,8,9.假如
阅读全文
摘要:一些定义:设字符串S的长度为n,S[0~n-1]。 子串:设0<=i<=j<=n-1,那么由S的第i到第j个字符组成的串为它的子串S[i,j]。 后缀:设0<=i<=n-1,那么子串S[i,n-1]称作它的后缀,用Suffix[i]表示。 串比较:对于两个串S1,S2,设长度分别为n1,n2。若存在
阅读全文
摘要:第一部分 自动机的预备知识 自动机的功能是识别字符串,一个自动机A,若它能识别字符串S,就记为A(S)=true,否则A(S)=false。 自动机由五个部分组成,字符集alpha,状态集合state,初始状态init,结束状态集合end和状态转移函数trans。 令s,t∈state,ch∈alp
阅读全文
摘要:manacher算法的输入是一个字符串,可以计算出以每个字符为中心的最长回文子串的半径。为了避免讨论奇数偶数,将原串的每两个字母之间以及前后各加一个特殊字母,比如'#',那么对于abcbb就变成了 #a#b#c#b#b#,串的长度变成了11,我们用dp[i]表示以i为中心的最长回文的半径,那么上面的
阅读全文
摘要:回文自动机是个处理回文串有关问题的一个犀利的数据结构。它是一个树形结构。每个节点包括以下信息:(1)len[i]表示编号为i的节点表示的回文串的长度(一个节点表示一个回文串)(2)next[i][c]表示编号为i的节点表示的回文串在两边添加字符c以后变成的回文串的的节点的编号(3)fail[i]指向
阅读全文
摘要:上一篇 8、前置重贴标签操作算法流程:将维护一个链表$L$,该表由$V-\{s,t\}$中的所有节点构成,$L$中的节点的顺序将按照许可网络中的拓扑排序存放。$u.next$是链表$L$的下一个节点。下面是算法的伪代码: 9、 为了证明RELABEL-TO-FRONT确定计算出了一个最大流,下面将证
阅读全文
摘要:上一篇 1、许可边:设$f$是流网络G的一个预流,$h$是高度函数。对于边$(u,v)$,如果$c_{f}(u,v)>0$且$h(u)=h(v)+1$,那么边$(u,v)$是一个许可边。否则是非许可边。许可网络$G_{f,h}=(V,E_{f,h})$,$E_{f,h}$是许可边的集合 2、许可网络
阅读全文
摘要:上一篇 14 设$f$是流网络G的一个预流,那么对于任意一个溢出节点$x$,在$G_{f}$中存在一条从$x$到源点$s$的简单路径。 15 在GENERIC-PUSH-RELABEL的整个过程中,任何一个$u\in V$,$u.h\leq 2|V|-1$ 16 在GENERIC-PUSH-RELA
阅读全文
摘要:上一篇 1 预流:预流是一个$V\times V \rightarrow R$的函数$f$,该函数对于每个节点$u\in V-\{s\}$满足容量限制条件和下面的性质: $\sum_{v\in V}f(v,u)-\sum_{v\in V}f(u,v)\geq 0$ 定义$e(u)=\sum_{v\i
阅读全文
摘要:1、设删除的节点为$z$,另外定义节点$x,y$如下: $y=\left\{\begin{matrix}z & z的左孩子或右孩子为空节点\\ Successor(z) & otherwise\end{matrix}\right.$ $x=\left\{\begin{matrix}y.left &
阅读全文
摘要:1 插入操作的第一步是将插入节点按照二叉查找树的规则插入到合适的位置,然后将插入节点置为红色。如下图所示,插入的节点为蓝色的4. 2 设插入的节点为$z$。如果之前是空树,那么直接将$z$置为黑色即可。下面的情况假设之前不是空树。那么插入之后,如果$z$的父节点的颜色为黑色,则本次插入直接结束,因为
阅读全文
摘要:博客图片来源 1 红黑树是一种二叉查找树。 2 红黑树的性质。 (1)每个节点是红色或者黑色 (2)根节点是黑色 (3)叶节点是黑色(叶节点就是空节点,实际不存储东西) (4)每一个红色节点的两个孩子都是黑色节点 (5)对于每个节点,从该节点到任意后代叶子节点经过的黑色节点数相同。 (6)满足二叉查
阅读全文
摘要:上一篇 1 基本的Ford-Fulkerson方法。该方法的思想就是每次找到一个增广路$p$,然后将增广路 $p$对应的流加到之前的流上得到新的流,一直这样直到找不到增广路,这时候找到的流就是最大流。 算法的伪代码如下 假设容量是整数,最大流为$f^{*}$,那么while循环最多执行$|f^{*}
阅读全文
摘要:B树是一棵多叉树。性质1:B树的每个节点有若干关键字,比如某一节点的关键字为[4,10,20],则该节点有四个孩子,设为Son[0],Son[1],Son[2],Son[3],满足Son[0]子树的最大值小于等于4,Son[1]子树的最小值大于等于4,Son[1]子树的最大值小于等于10,以此类推。
阅读全文
摘要:1 流网络。流网络G=(V,E)是一个有向图,每条边$(u,v)\in E$有一个非负容量值$c(u,v)\geq 0$.如果$(u,v)\notin E,c(u,v)=0$.另外有一个源节点s和汇点t。 2 流。G中的流是一个实值函数$f:V\times V\rightarrow R$,满足: (
阅读全文