恢复内容开始 tarjan算法介绍: 一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法。通过变形,其亦可以求解无向图问题 桥: 割点: 连通分量: 适用问题: 求解(有向图/无向图)的,桥,割点,环,回路等问题 整体思想: 如果我们欲要求解,桥的个数,割点的个数,环的数目, ...
分类:
编程语言 时间:
2019-01-17 20:11:34
阅读次数:
364
简介: 一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人设计的线性时间字符串匹配算法。这个算法不用计算变迁函数δ,匹配时间为Θ(n),只用到辅助函数π[1,m],它是在Θ(m)时间内,根据模式预先计算出来的。数组π使得我们可以按需要, ...
分类:
其他好文 时间:
2019-01-16 13:09:44
阅读次数:
188
这是一道看完答案会觉得很简单,但做之前很难想到答案的题目!!! 不信? Let us go ! 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入 ...
分类:
编程语言 时间:
2019-01-16 11:58:11
阅读次数:
178
第一种实现 每一个节点都只是指向根节点 find是 常数时间复杂度的, union是 线性时间复杂度的。 第二种实现 每一个节点指向一个和自己在相同集合中的节点 find操作是树的高度时间复杂度,union操作也是 树的高度时间复杂度 第三种实现其实是第二种实现的改良版本 因为第二种实现,当树的高度 ...
分类:
其他好文 时间:
2019-01-02 10:37:17
阅读次数:
163
神仙的算法 我们如果要求 $$\sum_{i=1}^N\mu(i)$$ 应该怎么办 线筛显然是最常规的操作了,但是复杂度是$O(N)$的,如果大一点就挂了 这个时候就需要杜教筛这种神奇的东西了,可以在非线性时间内求积性函数的前缀和 比如说我们要求的是$f$吧 我们设一个函数$g$,同时还有$h=f\ ...
分类:
其他好文 时间:
2019-01-01 21:00:50
阅读次数:
209
0.目录 1. "单链表的遍历与优化" 2. "静态单链表的实现" 3. "小结" 1.单链表的遍历与优化 问题: 如何遍历单链表中的每一个数据元素? 当前单链表的遍历方法: 遗憾的事实: 不能以线性的时间复杂度完成单链表的遍历 新的需求: 为单链表提供新的方法,在线性时间内完成遍历 设计思路 ( ...
分类:
其他好文 时间:
2018-12-14 12:44:41
阅读次数:
123
一、算法介绍 快速排序:快速排序的基本思想是通过一次排序将等待的记录分成两个独立的部分,其中一部分记录的关键字小于另一部分的关键字。C部分的快速排序一直持续到整个序列被排序。 任取一个元素 (如第一个) 为中心提出所有小于它的元素,并将大于它的元素放回,形成左右两个子表。为每个子表重新选择中心元素, ...
分类:
编程语言 时间:
2018-12-10 23:29:04
阅读次数:
257
对于非科班出身的人来说,在学习算法的时候经常会遇到的问题就是关于对事件空间复杂度的 理解。 「大 O 表示法」的准确的数学描述方式非常枯燥,我在这里就不贴出来凑字数了,其实大 O 表示法的意思挺简单的,就是表示:随着输入的值变化,程序运行所需要的时间与输入值的变化关系。 我们先看第一个代码,这是一个 ...
分类:
其他好文 时间:
2018-12-09 14:15:58
阅读次数:
214
杜教筛模板 杜教筛是用来干蛤的呢? 它可以在非线性时间内求积性函数前缀和。 前置知识 积性函数 积性函数:对于任意互质的整数 $a,b$ 有 $f(ab)=f(a)f(b)$ 则称 $f(x)$ 的数论函数。 完全积性函数:对于任意整数 $a,b$ 有 $f(ab)=f(a)f(b)$ 的数论函数。 ...
分类:
其他好文 时间:
2018-12-01 23:42:09
阅读次数:
279