一 算法复杂度 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 空间复杂度: 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做 ...
分类:
编程语言 时间:
2018-01-31 22:19:30
阅读次数:
211
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。 O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关 ...
分类:
编程语言 时间:
2018-01-30 19:45:42
阅读次数:
187
题目:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。 样例 给出 [1,2,2,1,3,4,3],返回 4 给出 [1,2,2,1,3,4,3],返回 4 给出 [1,2,2,1,3,4,3],返回 4 挑战 一次遍历,常数级的额外空间复杂度 解:异或运算A^ ...
分类:
其他好文 时间:
2018-01-28 00:35:07
阅读次数:
173
2. 选择排序 2.1 简单选择排序 简单选择排序的主要思想是,对第i个元素,将其与后面的n-i个元素作比较,用一个min变量存储这n-i+1个元素中的最小值的位置,比较完后将a[min]和a[i]交换(min != i)。简单选择排序进行了(n^2)/2次比较,n次交换,交换的次数少。 其主要过程 ...
分类:
编程语言 时间:
2018-01-27 00:33:36
阅读次数:
165
堆排序结合了插入排序和归并排序的有点:它空间复杂度是O(1), 时间复杂度是O(nlgn). 要讲堆排序,先讲数据结构“堆” 堆: 堆是用数组来存放一个完全二叉树的数据结构。假设数组名是A,树的根节点存放在A[1]。它的左孩子存放在A[2],右孩子存放在A[3] 即:对于某个下标位i的节点,它的左孩 ...
分类:
编程语言 时间:
2018-01-23 22:09:21
阅读次数:
219
非线性时间比较类排序 一、交换类排序:冒泡排序和快速排序 冒泡排序:从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数 组有序,排序结束。 平均时间复杂度:n方 空间复杂度:1 快速排序:快速排序又称分区交换排序,是对冒 ...
分类:
编程语言 时间:
2018-01-23 14:28:57
阅读次数:
204
"洛谷题目传送门" YCB巨佬对此题有详细的讲解。 "%YCB%请点这里" 思路分析 不能套用静态主席树的方法了。因为的$N$个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍。。。。。。 ~~话说我真的快要忘了~~有一种数据结构,能支持单点修改,区间查询,更重要的是,常数优秀的它专门用来高 ...
分类:
编程语言 时间:
2018-01-21 16:12:48
阅读次数:
187
推荐一个可视化的网站 【 Visual Algo 】: URL= 'https://visualgo.net/en/sorting' 这个网站给出了各种排序算法的原理和过程,通过动态形式直观得展现出来。另外还给出了相关的pseudo-code,以及具体执行到code的哪一步。 【冒泡排序】 需要重复 ...
分类:
编程语言 时间:
2018-01-20 15:09:36
阅读次数:
281
Sort a linked list in O(n log n) time using constant space complexity. 题目要求给定时间复杂度对链表进行排序,但是我个人认为题目要求不是很合理,使用归并排序时间复杂度满足要求,但是空间复杂度并不为常数,所以个人认为这道题不严谨,说 ...
分类:
其他好文 时间:
2018-01-20 14:05:28
阅读次数:
165
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增 ...
分类:
其他好文 时间:
2018-01-18 16:58:28
阅读次数:
175