前言 $CDQ$分治 是一个神奇的算法。 它有着广泛的用途,甚至在某些题目中还能取代$KD Tree$、 树套树 等恶心的数据结构成为正解,而且 常数 还小得多。 不过它也有一定的缺点,如必须 离线操作 ,遇到 强制在线 的题目还是老老实实打树套树吧... ... 核心思想 $CDQ$分治的核心思想 ...
分类:
其他好文 时间:
2018-10-28 16:06:02
阅读次数:
157
复杂度也称为渐进复杂度,包括渐进时间复杂度和渐进空间复杂度,描述算法随数据规模变化而逐渐变化的趋势。复杂度分析是评估算法好坏的基础理论方法,所以掌握好复杂度分析方法是很有必要的。 时间复杂度 首先,学习数据结构是为了解决“快”和“省”的问题,那么如何去评估算法的速度快和省空间呢?这就需要掌握时间和空 ...
分类:
编程语言 时间:
2018-10-27 23:35:22
阅读次数:
289
算法复杂度分为时间复杂度和空间复杂度。 其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。 简单来说,时间复 ...
分类:
编程语言 时间:
2018-10-11 10:25:37
阅读次数:
185
算法复杂度分为时间复杂度和空间复杂度 首先要清楚一点,大O表示法的时间复杂度高不代表程序运行时间长,空间复杂度高不代表占用空间多。 他们表示的是代码执行时间随着数据规模增长的变化趋势。和算法储存空间与数据规模之间的增长关系。 时间复杂度判断方法 1、只关注循环次数最多的一段代码 2、加法法则:总复杂 ...
分类:
编程语言 时间:
2018-10-06 23:38:18
阅读次数:
207
常量因子和算法复杂度: 对于算法的时间和空间性质,最重要的是其量级和趋势,这些是算法代价的主要部分,而代价函数的常量因此可以忽略不计。例如,可以认为3n²和100n²属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就可以认为它们的代价“差不多”。基于这样的考虑,人们提出描述算法性 ...
分类:
其他好文 时间:
2018-10-02 17:23:36
阅读次数:
1808
传递关系闭包算法 开始,先把关系集合转化为0,1矩阵,使得方便关系运算。 对于一般算法,通过矩阵点乘的来迭代的方式得到传递关系闭包的集合。 代码如下: 其中矩阵点乘的算法复杂度为O(n^3),迭代次数为n-1次(得到R^n为结果),算法复杂度为O(n^4)。 对于此类算法,特点为为了找到某一关系(a ...
分类:
编程语言 时间:
2018-09-30 21:54:09
阅读次数:
270
题目链接:https://pintia.cn/problem-sets/434/problems/5404 法一: 这个算法的算法复杂度是O(N^3),是个非常差劲的算法,在pat提交时,提示时间超时,下面是提交结果 法二: 在法一的基础上进行了改进,将算法复杂度降到了O(N^2),已经比算法一好了 ...
分类:
其他好文 时间:
2018-09-27 18:05:02
阅读次数:
208
1.直接法: 每次循环迭代,pow函数内部都会执行i次乘法,然后一次加法,所以整体的算法复杂度为O = 1/2 * n ^ 2 + 3/2n,尽管pow函数的实现方法是利用递归优化后的,但是算法复杂度还是达到了O(nlogn) 2.秦九韶法: 它不断提取公因式x来减少乘法的运算次数,算法复杂度为O( ...
分类:
编程语言 时间:
2018-09-26 16:04:51
阅读次数:
436
题目链接 这道题目如果从暴力的角度来说,对于每个点,我们都可以去求其他所有点到这个点的距离之和,但是这样的话最后的算法复杂度就是O(N^2)了,题目中说n的范围是10000,所以我们明显不能用暴力的方法去做。这道题还是看了题解做出来的。 首先,这道题目是一道图的题目,不过按照题目的说法形成的是树,所 ...
分类:
其他好文 时间:
2018-09-22 19:54:27
阅读次数:
167
LCA的Tarjan算法是一个离线算法,复杂度$O(n+q)$。 我们知道Dfs搜索树时会形成一个搜索栈。搜索栈顶节点cur时,对于另外一个节点v,它们的LCA便是v到根节点的路径与搜索栈开始分叉的那个节点lca。而站在cur上枚举v找lca的过程可以用并查集优化到$O(\log n)$级别。 并查 ...
分类:
其他好文 时间:
2018-09-22 18:21:03
阅读次数:
175