一:概述
一些工程应用只会使用教科书式的标准数据结构,但是也会有些应用需要对现有的数据结构进行少许的创新和改造,只有很少的情况会创造全新的数据结构。
二:动态顺序统计
顺序统计:n个元素中第i个顺序统计量,就是具有第i小关键字的元素。对于一个无序的集合,可以在O(n)的时间内得到任意的顺序统计量。
利用红黑树,可以在O(lg n)的时间内确定任意顺序统计量,同时也能在O(lg n)时间内确定元素的秩,红黑树中,元素的秩代表中序遍历时输出的位置。
支持快速顺序统计操作的数据结构,是在红黑树的基础上进行了少许的改造,形成了顺序统计树。顺序统计树就是红黑树,只不过树种每个节点,除了具有红黑树的key, color, left, right, p等五个性之外,还附加了另外的性质:size,它表示以x为根的子树(包括x本身)的内(不计哨兵)节点数。并且定义哨兵的size为0,所以有下面的性质:
x.size = x.left.size + x.right.size + 1
下图就是一颗顺序统计树,每个节点中,上边是key,下边是size:
1:确定给定秩的元素
利用size信息,可以在O