快速排序是一种平均性能很好的算法,它的期望运行时间是O(nlgn),且其中隐藏的常数因子非常小。但是它的最坏运行时间是O(n^2)。最后我会对其进行分析。快速排序关键部分分为两部分:
1.数组划分过程:
将一个数组以其最后一个元素作为主元,并且围绕它来划分数组,使得在此元素之前的数组元素均小于它,在其后的数组元素均大于它,划分过程如下:
实现代码如下:
int Partition(...
分类:
编程语言 时间:
2014-08-28 22:49:46
阅读次数:
390
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3625题意:注意:1、欧拉常数为$euler=0.57721566490153286060651209$2、用long double3、输出方法:两种cout setpr...
分类:
其他好文 时间:
2014-08-28 22:23:46
阅读次数:
468
http://poj.org/problem?id=2828一开始敲了个splay,直接模拟。tle了。。常数太大。。好吧,说是用线段树。。而且思想很拽。。(貌似很久以前写过貌似的,,)我们线段树维护的区间不再是人了。。而是这个区间剩余的的座位。。比如我现在要坐第一张,但是人已经坐了,即这个区间已经...
分类:
其他好文 时间:
2014-08-28 20:59:26
阅读次数:
1012
为了较快的从给定的pid值得到相应的宿主结构(进程描述符)指针,内核采用了pid哈希链表结构。首先,以下的问题要理解:1)为什么pid哈希链表只定义2048或者4096项(根据你的内存大小确定)?直接定义为pid最大值不是最好吗?我们都知道,查找的最快方式就是数组了,可以在常数的时间内完成查找。假如...
分类:
系统相关 时间:
2014-08-28 13:16:49
阅读次数:
301
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。
list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vecto...
分类:
其他好文 时间:
2014-08-27 20:34:28
阅读次数:
384
T=K*log2(N)注:2是小2时间T与以2为底的对数成正比。实际上,由于所有的对数都和其他对数成比例(从底数为2转换到底数为10需乘以3.322),我们可以将这个为常数的底数也并入K.由此不必指定底数:T=K*log(N)(知道这个公式吗:loga(b)=logc(b)/logc(a),loga...
分类:
其他好文 时间:
2014-08-27 09:16:07
阅读次数:
218
对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为theta(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好,期望时间复杂度是theta(nlgn),而且常数因子非常小,并可进行原址排序。1. 快速排序的描述快速排序可...
分类:
其他好文 时间:
2014-08-24 22:00:13
阅读次数:
255
本文主要分析g++ stl中哈希表的实现方法。stl中,除了以红黑树为底层存储结构的map和set,还有用哈希表实现的hash_map和hash_set。map和set的查询时间是对数级的,而hash_map和hash_set更快,可以达到常数级,不过哈希表需要更多内存空间,属于以空间换时间的用法,...
分类:
其他好文 时间:
2014-08-21 22:44:34
阅读次数:
387
第一种做法(时间太感人):这题我真的逗了,调了一下午,疯狂造数据,始终找不到错。后来发现自己sb了,更新那里没有打id,直接套上u了。我。。。。调了一下午啊!一下午的时光啊!本来说好中午A掉去学习第二种做法,噗好吧,现在第一种做法是hld+seg+bst+二分,常数巨大,log^4级别,目前只会这种...
分类:
Web程序 时间:
2014-08-20 21:02:52
阅读次数:
357
自适应阈值是通过在每个像素点设置周围b*b的区域加权平均然后减去一个常数得到一个阈值,然后进行一些阈值处理,如二值化,截断等。这种阈值处理的方法对有很强照明梯度(光照不均)的图像具有很好的处理效果...
分类:
其他好文 时间:
2014-08-20 14:09:42
阅读次数:
175