SB tree——A temporal aggregation data structure
2015-05-17 14:49
183 查看
refer to Incremental computation and maintenance of temporal aggregates ,Jun Yang1, JenniferWidom2 ,VLDBJ 2003
SB树是用来实现 时间聚集 的一种数据结构,不同于Size Balanced Tree。
接下来将以一个例子来讲述SB树的插入、删除、查找,以及其他一些操作。
Table1 表示了 病人的药剂用量,元组属性分别为 病人名字,药剂用量,有效时间(时间粒度为 1天) ,Fig.1 是Table1的坐标表示。
Table 2 表示 在某一时间段中,使用药剂的总量,这实际上是一个 SUM 的集函数操作。
SB-tree的数据结构介绍:
每一颗SB-tree都有两个参数:最大分支系数 b 和 最大叶子容量 l
每个中间节点最多能够容纳b个连续的时间区间,以Fig.2为例,节点N能够表示 j 个 时间区间,分别为N.I1, N.I2,……,N.Ij.而节点N中存放的是j-1个不同的瞬时时间点(按升序排列),第i个时间点用N.ti表示。第i个时间区间从 N,t(i-1)开始,到N.ti结束。N.vi表示 N.Ii的某一时间聚集函数的值,N.ci表示指向下一子节点的指针。
每个叶子节点与中间节点类似吗,除了没有指向下一节点的指针,最多能够表示l个时间区间,如Fig.3所示。
对于根节点的描述不是很懂,所以就不提出来了- -
对于任何非叶子节点N,其N.ci的子树中的时间一定小于N.ti,N.ci+1的子树的时间一定大于N,ti
Fig.4就是针对于Table2建立的一棵SB-tree
考虑 i-th 时间区间,N.Ii的开始时间是这样子定义的:
结束时间是这样定义的:
其中
在SUM 函数中就是 “+”
举个例子,假设我们要查找瞬时时间为19时的药剂总用量,那么我们从根节点开始,lookup(N0,19),N0的第二个区间[15,30)包含19,而其值为1,所以接下来查找N2子树,lookup(N0,19)=1+lookup(N2,19). N2的第一个区间[15,20)包括19,其值为5,并且N2是叶子节点了,所以lookup(N0,19)=1+5=6
比如要查询[14.28),最终会返回 <8,[14,15)>,<6,[15,20)>,<7,[20,28)>
比如向Table1中插入一个元组<"Ida",1,[17,47)>,我们首先执行Insert(N0,<1,[17,47)>) ,N0.I2 ,N0.I3,N0.I4都与[14,47)相交,而只有N0.I3=[30,45)完全被
[17,47)包含,所以直接令N0,v3加1,其他继续执行insert(N2,<1,[17,47)>)和insert(N4,<1,[17,47)>),结果如Fig.5
比如向Fig.4中执行Insert(N0,<1,[7,12)>), 结果如Fig.7所示
此时N1溢出,所以将N1分裂成N11和N12,结果如Fig.8所示
此时N0溢出,所以将N0分裂成N01和N02,并生成一个新的根节点N0',结果如Fig.9所示
SB树是用来实现 时间聚集 的一种数据结构,不同于Size Balanced Tree。
接下来将以一个例子来讲述SB树的插入、删除、查找,以及其他一些操作。
Table1 表示了 病人的药剂用量,元组属性分别为 病人名字,药剂用量,有效时间(时间粒度为 1天) ,Fig.1 是Table1的坐标表示。
Table 2 表示 在某一时间段中,使用药剂的总量,这实际上是一个 SUM 的集函数操作。
SB-tree的数据结构介绍:
每一颗SB-tree都有两个参数:最大分支系数 b 和 最大叶子容量 l
每个中间节点最多能够容纳b个连续的时间区间,以Fig.2为例,节点N能够表示 j 个 时间区间,分别为N.I1, N.I2,……,N.Ij.而节点N中存放的是j-1个不同的瞬时时间点(按升序排列),第i个时间点用N.ti表示。第i个时间区间从 N,t(i-1)开始,到N.ti结束。N.vi表示 N.Ii的某一时间聚集函数的值,N.ci表示指向下一子节点的指针。
每个叶子节点与中间节点类似吗,除了没有指向下一节点的指针,最多能够表示l个时间区间,如Fig.3所示。
对于根节点的描述不是很懂,所以就不提出来了- -
对于任何非叶子节点N,其N.ci的子树中的时间一定小于N.ti,N.ci+1的子树的时间一定大于N,ti
Fig.4就是针对于Table2建立的一棵SB-tree
考虑 i-th 时间区间,N.Ii的开始时间是这样子定义的:
结束时间是这样定义的:
SB-tree 的具体操作
查找: lookup(N,t)表示搜索节点N以及节点N为根的子树,具体是:
其中
在SUM 函数中就是 “+”
举个例子,假设我们要查找瞬时时间为19时的药剂总用量,那么我们从根节点开始,lookup(N0,19),N0的第二个区间[15,30)包含19,而其值为1,所以接下来查找N2子树,lookup(N0,19)=1+lookup(N2,19). N2的第一个区间[15,20)包括19,其值为5,并且N2是叶子节点了,所以lookup(N0,19)=1+5=6
范围查询:结果返回与要查询的时间区间I重叠的元组,range(N,I,v)I表示要查询的时间区间,v表示当前查询到的aggregate value,用来递归调用
比如要查询[14.28),最终会返回 <8,[14,15)>,<6,[15,20)>,<7,[20,28)>
插入:假设插入时间t,t是在区间I中的,aggregated attribute是 Vbase,那么可以记为<V,I>。Insert(N,<V,I>) 的具体操作为:
比如向Table1中插入一个元组<"Ida",1,[17,47)>,我们首先执行Insert(N0,<1,[17,47)>) ,N0.I2 ,N0.I3,N0.I4都与[14,47)相交,而只有N0.I3=[30,45)完全被
[17,47)包含,所以直接令N0,v3加1,其他继续执行insert(N2,<1,[17,47)>)和insert(N4,<1,[17,47)>),结果如Fig.5
删除:插入的反操作,比如删除元组<"Ida",1,[17,47)>,相当于插入<"Ida",-1,[17,47)>,在Fig.5的基础上进行删除,结果如Fig.6所示
节点分裂:当向SB-tree插入一个元组时,可能会导致某一个节点溢出,溢出是指该节点的时间区间超过它能表示的最多区间数量,此时应该进行节点分裂。
分裂算法如下:比如向Fig.4中执行Insert(N0,<1,[7,12)>), 结果如Fig.7所示
此时N1溢出,所以将N1分裂成N11和N12,结果如Fig.8所示
此时N0溢出,所以将N0分裂成N01和N02,并生成一个新的根节点N0',结果如Fig.9所示
区间合并:当完成插入或者删除操作后,可能存在两个相邻的区间的value是相同的(如Fig.6),这个时候就要进行区间的合并。
合并算法如下:相关文章推荐
- Data Structure Binary Tree: Check for Children Sum Property in a Binary Tree
- 树状结构 Tree data structure in C#
- Data Structure Binary Tree: Inorder Tree Traversal without recursion and without stack!
- Data Structure Binary Tree: Convert an arbitrary Binary Tree to a tree that holds Children Sum Property
- Data Structure Binary Tree: Iterative Postorder Traversal
- Data Structure Binary Search Tree: Find k-th smallest element in BST (Order Statistics in BST)
- Perl implement Tree data structure (1)
- Data Structure Binary Tree: Diameter of a Binary Tree
- Perl implement Tree data structure (2)
- An example to show how to make Tree structure data table in SQL server
- Data Structure Binary Tree: How to determine if a binary tree is height-balanced?
- Data Structure Binary Tree: Construct Tree from given Inorder and Preorder traversals
- JavaScript Build Tree Data Structure Using Array
- Data Structure Binary Tree: Inorder Tree Traversal without Recursion
- Data Structure Binary Tree: Convert a given Binary Tree to Doubly Linked List
- Data Structure Binary Tree: Check if a given Binary Tree is SumTree
- Senior Data Structure · 浅谈线段树(Segment Tree)
- Data Structure Binary Tree: Print ancestors of a given binary tree node without recursion
- Build Tree View Structure for SharePoint List Data
- 208. Implement Trie (Prefix Tree) && 211. Add and Search Word - Data structure design