一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法。 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连 ...
分类:
编程语言 时间:
2016-11-13 14:19:29
阅读次数:
146
在线性时间内非递归的求数组的最大连续子数组(连续和最大的子数组)。 题目给出思路为数组A[1...j+1]的最大和子数组,有两种情况:a) A[1...j]的最大和子数组; b) 某个A[i...j+1]的最大和子数组,但思考很久没有理解如何用这个思路设计线性时间算法,希望有人能给予指点。 (i点是 ...
分类:
编程语言 时间:
2016-11-02 23:41:34
阅读次数:
296
一、原理: KMP算法是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。朴素算法(即暴力循环)的效率太差,因为它没有好好利用比较时产生的信息,而KMP算法则运用了这一点,所以可以达到 ...
分类:
编程语言 时间:
2016-10-22 18:20:51
阅读次数:
238
题意: 给定非排序数组,找出其排序后相邻元素的最大差值。 线性时间空间、元素数少于2时返回0、元素值非负且int范围内。 思路: 排序最快nlogn不符合要求; 参考网上,学习了桶排序的方法; 桶排序:按值分段处理; 设定桶大小和桶个数; 因为ans>=(MAX-MIN)/(len-1); 桶大小: ...
分类:
其他好文 时间:
2016-10-21 00:18:09
阅读次数:
116
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表n ...
分类:
编程语言 时间:
2016-10-19 13:18:31
阅读次数:
209
计数排序是一种线性时间的排序,同时也是一种非比较排序 代码如下: 排序例图如下: 计数排序需要用到三个数组 : 代码中 数组data[A]是待排序数组,aimArray[B]是中间数组, tempArray[C]是保存数组元素相对位置的数组 5-6行,将tempArray数组清零 7-10行, 将原 ...
分类:
编程语言 时间:
2016-10-18 01:54:54
阅读次数:
136
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。 在 C++ STL 许多 容器类的东西 都不需声明大小 只需定义即可 ...
分类:
编程语言 时间:
2016-10-01 22:03:28
阅读次数:
255
一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法。 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。 定义dfn(u)为节点u搜索的次序编号 ...
分类:
编程语言 时间:
2016-09-25 10:46:16
阅读次数:
352
Kosaraju 算法 一.算法简介 在计算科学中,Kosaraju的算法(又称为–Sharir Kosaraju算法)是一个线性时间(linear time)算法找到的有向图的强连通分量。它利用了一个事实,逆图(与各边方向相同的图形反转, transpose graph)有相同的强连通分量的原始图 ...
分类:
编程语言 时间:
2016-09-18 01:20:54
阅读次数:
380
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。
分类:
编程语言 时间:
2016-09-17 13:34:43
阅读次数:
209