在编程中,我们往往使用已有的数据结构无法解决问题,这是不必要急着创建新的数据结构,而是在已有数据结构的基础上添加新的字段。本节在上一次笔记红黑树这一基础数据结构上进行扩展,得出两个重要的应用—动态顺序统计和区间树。
动态顺序统计
在算法系列笔记2中我们在线性时间内完成了静态表的顺序统计,而这里我们在红黑树上进行扩展,在O(lgn)时间内完成该操作,主要包括返回第i
排名的元素o...
分类:
编程语言 时间:
2015-02-03 23:00:43
阅读次数:
342
问题:当给定存在静态表(如数组)中的n个元素,如何快速找到其中位数、最小值、最大值、第i小的数?
首先想到的方法是先对数组元素进行排序,然后找到第i小的元素。这样是可行的,但比较排序最快也需要O(nlgn),能否在线性时间内解决呢。这就是随机的分治法—随机选择。
思想:利用随机划分(在快速排序中介绍过)找到主元r,这样就将小于等于r的元素放在了其左边,大于r的元素放在了其右边。这...
分类:
编程语言 时间:
2015-02-02 23:09:19
阅读次数:
213
本文阐述了如何使用期望和线性时间的选择算法求得第i顺序统计量,欢迎拍砖!...
分类:
编程语言 时间:
2014-12-30 17:13:00
阅读次数:
205
文章来自网络加课本:
本次学习的内容讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题。主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值。一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素,并借助中位数进行优化处理,保证最坏保证运行时间是线性的O(n)。...
分类:
编程语言 时间:
2014-11-22 09:21:35
阅读次数:
286
#include
using namespace std;
class BRTree;
class BRTreeNode{
private:
friend class BRTree;
int key;
bool color;
int size;
BRTreeNode *left;
BRTreeNode *right;
BRTreeNode *parent;
public:
//创...
分类:
编程语言 时间:
2014-11-06 14:51:53
阅读次数:
227
1. 寻找第k大(小)的数 假设数据存储在数组a[1..n]中首先,寻找一个数组中最大或者最小的数,因为最大(小)的数一定要比其他所有的数大(小),因此至少要比较完所有的pair才能确定,所以时间复杂度在O(n)。那么寻找第k大(小)呢?比较直观的,就是对数组中国所有的数据先进行排序,在我们这种渣渣...
分类:
编程语言 时间:
2014-10-29 23:37:05
阅读次数:
305
目录 1、问题的引出-求第i个顺序统计量2、方法一:以期望线性时间做选择3、方法二(改进):最坏情况线性时间的选择4、完整测试代码(c++)5、参考资料内容 1、问题的引出-求第i...
分类:
编程语言 时间:
2014-10-24 00:02:48
阅读次数:
640
1.样本k阶(原点)矩
2.样本k阶中心矩
3.顺序统计量...
分类:
其他好文 时间:
2014-10-05 14:19:18
阅读次数:
382
在一个由n个元素组成的集合中,第i个“顺序统计量(order statistic)”是该集合中第i小的元素。例如,在一个由n个元素组成的集合中,最小值是第1个顺序统计量,最大值是第n个顺序统计量。而“中位数(median)”总是出现在low((n+1)/2)或者high((n+1)/2)处,其中.....
分类:
其他好文 时间:
2014-09-16 20:31:01
阅读次数:
250
在一个由n个元素组成的集合中,第i个顺序统计量(order statistic)是该集合中第i小的元素。用非形式化的描述来说,一个中位数(median)使它所属集合的“中点元素”。当n为奇数时,中位数是唯一的,位于i=(n+1)/2处。当n为偶数时,存在两个中位数,分别位于i=n/2和i=n/2+1...
分类:
其他好文 时间:
2014-09-01 15:33:03
阅读次数:
452