描述算法复杂度时,常用o(1), o(n), o(logn), o(nlogn)表示对应算法的时间复杂度,是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。 O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。 比如时间复杂度 ...
分类:
编程语言 时间:
2019-11-03 11:16:50
阅读次数:
72
原文链接:https://www.cnblogs.com/DarrenChan/p/8807112.html 这三个排序的时间复杂度都是O(nlogn),所以这里放到一起说。 回到顶部 1. 快速排序# 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange s ...
分类:
编程语言 时间:
2019-11-02 15:57:28
阅读次数:
116
题目描述 小凸和小方相约玩密室逃脱,这个密室是一棵有 $n$ 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 $A_i$,每条边也有个权值 $b_i$。 点亮第 $1$ 个灯泡不需要花费,之后每点亮一个新的灯泡 $V$ 的花费,等于上一个被点亮的灯泡 $U$ 到这 ...
分类:
其他好文 时间:
2019-11-01 20:37:58
阅读次数:
72
(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中 ...
分类:
编程语言 时间:
2019-10-31 20:06:17
阅读次数:
84
1. 归并排序 归并排序,是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子 ...
分类:
编程语言 时间:
2019-10-31 18:32:53
阅读次数:
87
T1: 将序列求前缀和,题意转化为对于位置$i$和$j$,满足$i<j$,$a_i<a_j$并且$b_i<b_j$,最大化$j-i+1$的值。 典型的三维偏需,可以CDQ做。 更好的做法是按一维排序,然后用数状数组维护。 时间复杂度$O(nlogn)$。 T2: 每次可以选择一个根,将左右子树接上, ...
分类:
其他好文 时间:
2019-10-30 22:45:14
阅读次数:
80
算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较 ...
分类:
编程语言 时间:
2019-10-29 09:16:07
阅读次数:
86
最小权覆盖集 = 全集 最大权独立集 强制取点、不取点可以使用把权值改成正无穷或负无穷实现 接下来就是经典的“动态最大权独立集”了 O(nlogn)。 这不是我说的,是 immortalCO 大佬说的 于是我调了一万年极值,终在$\frac{LLONG\_MAX}{3}$时$11s$卡过。。。 知道 ...
分类:
其他好文 时间:
2019-10-29 00:03:01
阅读次数:
100
https://www.luogu.org/problem/P2824 submit 做法: 由于将一个普通序列排序很慢,需要nlogn的时间,所以我们试着把它转化为对01序列排序。先来考虑一个简单的问题: 如何将一个01序列排序?(logn的复杂度) 对于这个问题,我们使用线段树来维护。查询一段区 ...
分类:
其他好文 时间:
2019-10-27 20:39:09
阅读次数:
72
程序员必须要掌握的十大经典算法算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divideandconquer)策略来把
分类:
编程语言 时间:
2019-10-27 16:29:52
阅读次数:
101