众所周知,Std::sort()是一个非常快速的排序算法,它基于快排,但又有所修改。一般来说用它就挺快的了,代码一行,时间复杂度O(nlogn)(难道不是大叫一声“老子要排序!!”就排好了么。。。)。我们也知道,不基于比较的排序可以达到O(n),比如说基数排序。什么,它是O(n
* log(10.....
分类:
其他好文 时间:
2014-06-10 00:04:07
阅读次数:
326
算法复杂度用来表示在解决某个问题时,算法的性能表现。
复杂度上限,就是某个具体的已经实现的算法能够保证在一定时间内解决问题
复杂度下限,就是通过数学方法证明,所有的算法都必须花费一定的时间才能解决问题
最优化算法,就是可能达到的最小复杂度的算法,通常介于复杂度上限和下限之间
比如排序问题中:
计算模型为决策树
使用比较次数作为开销...
分类:
其他好文 时间:
2014-06-08 18:20:02
阅读次数:
190
很多时候排序是为了对数据进行归类,比如对城市进行排序,对员工的职业进行排序。这种排序的特点就是重复的值特别多。
如果使用普通的快排对这些数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题。
三路快排
三路快排的基本思想就是,在对数据进行分区的时候分成左中右三个部分,中间都是相同的值,左侧小于中间,右侧大于中间。
...
分类:
其他好文 时间:
2014-06-08 15:29:45
阅读次数:
197
1. 递归解法
2. 非递归解法(空间复杂度O(n)和O(1))...
分类:
其他好文 时间:
2014-06-08 10:47:37
阅读次数:
139
问题
给定N个元素的数组,求第k大的数。
特例
当k=0时,就是求最大值,当k=N-1时,就是求最小值。
应用
顺序统计
求top N排行榜
基本思想
使用快速排序方法中的分区思想,使得a[k]左侧没有更小的数,右侧没有更大的数
性能
快速选择算法的复杂度...
分类:
其他好文 时间:
2014-06-08 09:58:08
阅读次数:
211
/** * 最大子数组的暴力求解算法,复杂度为o(n2) * @param n * @return
*/ static MaxSubarray findMaxSubarraySlower(int[] n) { long tempSum = 0; int
left = 0; int right = 0...
分类:
其他好文 时间:
2014-06-07 21:07:50
阅读次数:
250
原文:浅谈算法和数据结构: 九
平衡查找树之红黑树前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数...
分类:
其他好文 时间:
2014-06-07 20:18:15
阅读次数:
364
原文:浅谈算法和数据结构: 四
快速排序上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick
Sort)。快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交...
分类:
其他好文 时间:
2014-06-07 20:15:43
阅读次数:
362
首先想到线段树,然后刚开始写忽然想到树状数组求和岂不是更快,而且编程复杂度又小,于是把之前写的删掉,写树状数组,写完模版之后忽然发现这题竟然是区间修改!于是又删掉重写,忽然发现不会处理又加又乘的,果断看题解……经过几乎两个小时的调试,终于1A。需要注意的是,一定要让线段树的每一个区间保存的值时刻为正...
分类:
其他好文 时间:
2014-06-07 17:04:11
阅读次数:
229
1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lgN)。线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a...
分类:
其他好文 时间:
2014-06-07 16:55:29
阅读次数:
307