CN109542897B - 一种二叉查找树的方法及系统 - Google Patents
一种二叉查找树的方法及系统 Download PDFInfo
- Publication number
- CN109542897B CN109542897B CN201811272648.9A CN201811272648A CN109542897B CN 109542897 B CN109542897 B CN 109542897B CN 201811272648 A CN201811272648 A CN 201811272648A CN 109542897 B CN109542897 B CN 109542897B
- Authority
- CN
- China
- Prior art keywords
- data
- sbt
- tree
- data group
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的技术方案包括一种二叉查找树的方法及系统,用于实现:S1,将待分析数据数据划分为多个数据组;S2,为划分的多个数据转换为对应的多个子SBT树;S3,将多个子SBT数合并为一个SBT树。本发明的有益效果为:时间复杂度小,运行效率高,方便用于人工智能领域中处理超大规模数据的快速有序检索。
Description
技术领域
本发明涉及一种二叉查找树的方法及系统,属于计算机领域。
背景技术
在众多超大规模的数据检索与分析的应用场景中,仍依赖有序的数据才能实现快速检索。
二叉排序树(BST:binarySortTree)又称二叉查找树,是结点排好序的二叉树,中序遍历BST则得到排序数据。由树的特性,二叉排序树还适用于动态生成,所以对数据不断扩大的情况很适用。设BST有N个结点,因为树的最大深度是N,最小深度是logN(为一个平衡的二叉树),所以排序的最坏情况是O(N2),最好情况是O(NlogN)。
SBT(SizeBalancedTree)是由陈启峰提出的,是对BST方法的改进。这个方法是在用二叉排序树排序的过程中保持树的平衡,使得排序的时间代价总是O(NlogN)。所以该算法的重要思想是如何维护二叉排序树为平衡树。
首先,要定义SBT,这里用到了树的大小的概念,树的大小是指:树中所有结点的个数。设根结点为T的树,树的大小记为s[T]。树T的一个结点t的右子树记为right[t],左子树记为left[t]。则SBT的每一个结点t都满足以下两个性质:
性质a:s[right[t]]≥s[left[left[t]]],且
s[right[t]]≥s[right[left[t]]]
性质b:s[left[t]]≥s[right[right[t]]],且
s[left[t]]≥s[left[right[t]]]
s[L]≥s[C]且s[L]≥s[D],这里T、L、R为结点,A、B、C、D为子树。
当插入或删除结点时,SBT树会不满足性质a和性质b,所以要用“旋转”操作维护SBT树。树的旋转操作是在二叉树中做子树调整的操作,每一次旋转不会影响该二叉树中序遍历的结果。树旋转包括左旋转和右旋转,两种旋转呈镜像,而且互为逆操作。在用旋转维护SBT树的性质时,用maintain操作来修复这棵树,即重新计算树的大小。设函数maintain(T)用于修复以T为根的SBT。调用maintain(T)的前提条件是T的子树都已经是SBT了。
这里需要讨论的有4种情况。但由于性质a和性质b是对称的,这里仅讨论性质a的2种情况。
情况1:若s[Left[Left[T]]>s[Right[T]]即s[A]>s[R],则(1)右旋转T,即rotate_right(T);(2)修复T的大小,即maintain(T)(3)修复L的大小,即maintain(L)。
情况2:若s[right[left[t]]>s[right[t]]
即s[B]>s[R],则(1)左旋转L子树(2)右旋转T(3)修复L的大小(4)修复T的大小(5)修复B的大小。
SBT的主要操作有:
insert(T,k);将k插入到树T中
delete(T,k);将k插入到树T中
find(T,k);在树T中查找k,找到则返回k结点,否则返回NULL
maintain(T,flag);修复T的大小,flag为情况1和情况2的判断标志
right_rotate(T);右旋转树T
left_rotate();左旋转树T
因为SBT是平衡的,所以树的高度是logN。因为插入、删除操作都要先进行查找,而查找操作的时间复杂度是O(logN),所以SBT排序的时间复杂度是O(NlogN)。
平衡二叉树以减少平均路径长度、平均查找时间的优化策略来避免树结构过度变形的二叉查找树优化形式。在众多超大规模的数据检索与分析的应用场景中,仍依赖有序的数据才能实现快速检索,在并发环境下如何高效实现超大规模的平衡树显得十分重要。
发明内容
本文提供了一种二叉查找树的方法及系统,用于在并发环境下高效实现超大规模平衡树的改进方法SizeBalancedTree是难以在海量数据的处理中建立一棵平衡树的,可以将海量数据分组,再用多路归并算法将各组合并为一个SBT。
本发明的技术方案包括一种二叉查找树的方法,其特征在于,该方法包括:S1,将待分析数据数据划分为多个数据组;S2,为划分的多个数据转换为对应的多个子SBT树;S3,将多个子SBT数合并为一个SBT树。
根据所述的二叉查找树的方法,其中待分析数据为具有大量节点的数据。
根据所述的二叉查找树的方法,其中数据组还包括:若被划分的数据组大小超过SBT算法转换的阈值时,进一步对超过SBT算法转换阈值的数据组执行划分直至所有数据组能够被SBT算法转换。
根据所述的二叉查找树的方法,其中步骤S3具体包括:S21,使用多路归并算法将任意划分的两个数据组合并为一个数据组;S22,循环执行步骤S21直至完成所有数据组的合并。
根据所述的二叉查找树的方法,其中步骤S1具体包括:对比需要合并的两个数据组的节点数和关键码深度总和,其中两个数据组包括第一数据组合第二数据组;若其中第一数据组的节点数和关键码深度均大于第二数据组则将第二数据组插入第一数据组,否则将第一数据组插入第二数据组;同时更新上界。
根据所述的二叉查找树的方法,其中方法还包括:其中数据组的节点数的计算包括使用关键码执行排序操作,进而确认节点数。
根据所述的二叉查找树的方法,其中该方法还包括:其中关键码深度的计算及对比包括使用对比接口将数据组的多个关键码进行求和并执行整形处理,进而执行对比。
根据所述的二叉查找树的方法,其中该方法还包括:每执行一次数据组的插入、删除及查找时,检查合并后SBT树是否满足SBT条件,若不满足则对执行插入、删除及查找操作的SBT树进行维护使其满足SBT条件。
本发明的技术方案还包括一种用于任意所述方法的二叉查找树的模块,系统包括:划分模块,用于将待分析数据数据划分为多个数据组;转换模块,用于为划分的多个数据转换为对应的多个子SBT树;合并模块,用于将多个子SBT数合并为一个SBT树。
本发明的有益效果为:时间复杂度小,运行效率高,方便用于人工智能领域中处理超大规模数据的快速有序检索。
附图说明
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的SBT比较图;
图3a所示为根据本发明实施方式的有序值结点试验结果示意图;
图3b所示为根据本发明实施方式的随机值结点试验结果示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的一种二叉查找树的方法及系统适用于本算法适用于人工智能领域中处理超大规模数据的快速有序检索的是用场景。
图1所示为根据本发明实施方式的总体流程图。S1,将待分析数据数据划分为多个数据组;S2,为划分的多个数据转换为对应的多个子SBT树;S3,将多个子SBT数合并为一个SBT树。
对于图1,本发明提供了比较具体得实施方案,具体如下:如果是海量结点数据,SBT是难以建立一棵SBT,给出一个改进SBT的算法,将海量数据分组,再用多路归并算法将各组合并为一个SBT。设结点数为N,分组个数M为(取根号N的上界),则每个组的结点数n=N/M。以下给出两个SBT的归并算法。
设两个SBT分别为T1和T2,key(T)表示T结点的关键码值,depth(k,T)表示关键码k在树T中的深度值。M个组的多路归并算法如下:
while(M>1)//多路归并的次数
{for(i=1–M/2)//两路合并的组数
If(s[T1]>s[T2])//T1的结点数比T2的结点数多
Merge(T1,T2);//将T2插入到T1
Else If(s[T1]<s[T2])//T2的结点数比T1的结点数多
Merge(T2,T1);//将T1插入到T2
Else if(all(depth(key(T1),T1))>all(depth(key(T2),T2)))
//T1的关键码深度之和大于T2的关键码深度之和
Merge(T1,T2);//将T2插入到T1
Else
Merge(T2,T1);//将T1插入到T2
M=upper(M/2);//更新M为M/2的上界
}
将T2插入到T1的算法Merge(T1,T2):
For(each node n in T1)
If(not find(T2,key(n)))//n不在T2中
Insert(T2,key(n));
二叉排序树退化的原因是因为要排序的数据是有序的,所以树退化为线性链,解决的方法有用随机数产生排序数,这样插入树的数据大小是随机的。类似的,用树的深度衡量要插入的SBT和被插入的SBT,所以,N个数据M个组的归并算法的查找复杂度为O(logN/M)=O(logN-logM),排序复杂度为O(N/MlogN/M)=O(N/M(logN-logM)),该算法明显比O(NlogN)复杂度要低。
对SBT数据及操作定义
SBT的实现:首先在SBT上使用模板类,这样以后可以轻松的适应不同类型的数据。并使用链表实现SBT树。
数据结点类是通过关键码K key来排序。对装有E类型的数据可以任意定义结点数据,对应于SBT的结点。结点的模板类如下:
Template<class E,class K>
Class SBTNote
而在这个类中新增的数据成员是该结点所包含的子结点个数size1,即子树的大小。
在比较关键码操作时,用一个比较类(实现整数类型的关键码),比较类定义如下:
class IntComp
{
public:
static bool lt(int x,int y){return x<y;}
static bool eq(int x,int y){return x==y;}
static bool gt(int x,int y){return x>y;}
下面是SBT树的模板类定义,该模板中定义树的高度,树的根结点、头结点和尾结点的指针,以及SBT的核心成员函数:右旋转、左旋转和维护(maintain)操作等。
Template<class E,class K,class comp>
class sbt
这三个函数实现了前面文章中所描述的对应算法。
该模板类中其余的成员函数是SBT的主要操作,包括插入、删除、查找。插入和删除操作都会引起树的不平衡,所以我们需要判断是否满足SBT的条件,如果不满足,则调用maintain()维护SBT的条件。
图2所示为根据本发明实施方式的SBT比较图。
在验证算法时,用程序生成1万至10万个结点数据,并将数据生成到data子目录的sbt_file.txt文件中,特别要注意的是,由于结点个数巨大,关键字的类型和结点大小的类型都要用long类型,否则会越界出错。另外,目前没有考虑关键码相同的情况,所以算法没考虑稳定性问题。
实验环境为:双核2.60GHz主频、4GM内存的个人电脑,对SBT树运行1万至10万个结点插入(即排序),平均运行时间如下,可以看出随着结点增加,时间没有跳跃变化。如下表1所示:
表1SBT节点数和运行时间比
AVL算法自平衡二叉排序树,主要是通过比较树的高度判断是否是平衡树;Treap算法是Tree+Heap的一种平衡二叉排序树,平衡树的建立是通过比较结点的优先级;由于随即数建立的二叉排序树是最可能平衡的,二叉排序树最坏的情况是顺序插入有序的一组数,则二叉排序树为一个退化的线性链表,所以产生随机的关键码生成BST的算法是就是随机BST算法。对200万个数据排序,比较SBT算法与AVL、Treap和随机BST算法,从图2可以看出SBT算法的时间复杂度最小,运行效率最好。
图3a所示为根据本发明实施方式的有序值结点试验结果示意图,图3b所示为根据本发明实施方式的随机值结点试验结果示意图。从图3a和3b中可以看出,随机值排序比有序值排序要快,因为随机值更可能产生平衡的二叉树,所以维护的代价会减少。而有序值的排序树的深度比随机值的深度要小,因为算法中的维护操作使树更平衡,所以树的高度更小一些。
本文提出了基于SBT排序算法改进之后的SBT多路归并方法。对N个结点分为M个组,给出了SBT树的多路归并算法,以及对两个SBT归并算法描述,该方法在排序以及排序的各种插入、删除、查找等操作方面都具有O(N/M(logN-logM))时间复杂度,该算法尤其适用于大规模海量数据的排序处理,实验结果也比较好
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
Claims (8)
1.一种二叉查找树的方法,其特征在于,该方法包括:
S1,将待分析数据划分为多个数据组;
S2,为划分的多个数据组转换为对应的多个子SBT树;
S3,将多个子SBT树合并为一个SBT树;
所述步骤S3具体包括:
S21,使用多路归并算法将任意划分的两个数据组合并为一个数据组;
S22,循环执行步骤S21直至完成所有数据组的合并;
其中,所述步骤S21具体包括:
对比需要合并的两个数据组的结点数和关键码深度总和,其中两个数据组包括第一数据组和第二数据组;
若其中第一数据组的节点数大于第二数据组的节点数,则将第二数据组插入第一数据组;若第二数据组的节点数大于第一数据组的节点数,则将第一数据组插入第二数据组;
若第一数据组的节点数等于第二数据组的节点数,则比较第一数据组的关键码深度之和和第二数据组的关键码深度之和;
若第一数据组的关键码深度之和大于第二数据组的关键码深度之和,则将第二数据组插入第一数据组,否则将第一数据组插入第二数据组;
同时更新上界。
2.根据权利要求1所述的二叉查找树的方法,其特征在于,所述待分析数据为具有大量结点的数据。
4.根据权利要求3所述的二叉查找树的方法,其特征在于,所述数据组还包括:
若被划分的数据组大小超过SBT算法转换的阈值时,进一步对超过SBT算法转换阈值的数据组执行划分直至所有数据组能够被SBT算法转换。
5.根据权利要求1所述的二叉查找树的方法,其特征在于,该方法还包括:其中数据组的结点数的计算包括使用关键码执行排序操作,进而确认结点数。
6.根据权利要求1所述的二叉查找树的方法,其特征在于,该方法还包括:其中关键码深度的计算及对比包括使用对比接口将数据组的多个关键码进行求和并执行整型处理,进而执行对比。
7.根据权利要求1所述的二叉查找树的方法,其特征在于,该方法还包括:
每执行一次数据组的插入、删除及查找时,检查合并后SBT树是否满足SBT条件,若不满足则对执行插入、删除及查找操作的SBT树进行维护使其满足SBT条件。
8.一种用于执行权利要求1-7中任意一项所述方法的二叉查找树的模块,其特征在于,所述模块包括:
划分模块,用于将待分析数据划分为多个数据组;
转换模块,用于为划分的多个数据组转换为对应的多个子SBT树;
合并模块,用于将多个子SBT树合并为一个SBT树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811272648.9A CN109542897B (zh) | 2018-10-30 | 2018-10-30 | 一种二叉查找树的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811272648.9A CN109542897B (zh) | 2018-10-30 | 2018-10-30 | 一种二叉查找树的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109542897A CN109542897A (zh) | 2019-03-29 |
CN109542897B true CN109542897B (zh) | 2021-06-11 |
Family
ID=65845870
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811272648.9A Active CN109542897B (zh) | 2018-10-30 | 2018-10-30 | 一种二叉查找树的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109542897B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159915A (zh) * | 2015-07-16 | 2015-12-16 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及系统 |
CN106407408A (zh) * | 2016-09-22 | 2017-02-15 | 北京数字绿土科技有限公司 | 一种海量点云数据的空间索引构建方法及装置 |
CN107689078A (zh) * | 2017-08-21 | 2018-02-13 | 哈尔滨工程大学 | 一种基于链表排序平衡二叉树的层次包围盒树构建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9298761B2 (en) * | 2009-04-30 | 2016-03-29 | Hewlett Packard Enterprise Development Lp | Adaptive merging in database indexes |
-
2018
- 2018-10-30 CN CN201811272648.9A patent/CN109542897B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159915A (zh) * | 2015-07-16 | 2015-12-16 | 中国科学院计算技术研究所 | 可动态适应的lsm树合并方法及系统 |
CN106407408A (zh) * | 2016-09-22 | 2017-02-15 | 北京数字绿土科技有限公司 | 一种海量点云数据的空间索引构建方法及装置 |
CN107689078A (zh) * | 2017-08-21 | 2018-02-13 | 哈尔滨工程大学 | 一种基于链表排序平衡二叉树的层次包围盒树构建方法 |
Non-Patent Citations (2)
Title |
---|
云存储中基于SBT的数据完整性验证机制;钟婷等;《电子科技大学学报》;20141129;第43卷(第6期);第929-933页 * |
合并两颗平衡有序二叉树;weixin_33964094;《bubuko》;20170102;1-4 * |
Also Published As
Publication number | Publication date |
---|---|
CN109542897A (zh) | 2019-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mehlhorn et al. | External-memory breadth-first search with sublinear I/O | |
Yang et al. | DSC: Scheduling parallel tasks on an unbounded number of processors | |
Thabtah et al. | MCAR: multi-class classification based on association rule | |
Zhang et al. | Scalable skyline computation using object-based space partitioning | |
McColl et al. | A new parallel algorithm for connected components in dynamic graphs | |
Ben-Asher et al. | Optimal search in trees | |
CN109656798B (zh) | 基于顶点重排序的超级计算机大数据处理能力测试方法 | |
Saha et al. | Correlation clustering with same-cluster queries bounded by optimal cost | |
CN111625574A (zh) | 一种基于布尔矩阵约简的关联规则挖掘算法 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
Zhang et al. | SUMMA: subgraph matching in massive graphs | |
Hu et al. | Fine granularity clustering for large scale placement problems | |
Cao et al. | An improved method to build the KD tree based on presorted results | |
CN109542897B (zh) | 一种二叉查找树的方法及系统 | |
Oguz et al. | Incremental itemset mining based on matrix apriori algorithm | |
Breen et al. | An evaluation of priority queues for mathematical morphology | |
Yang et al. | Search numbers in networks with special topologies | |
Hong et al. | GA-based item partition for data mining | |
Inayat et al. | Analysis of comparison-based sorting algorithms | |
Ghashghai et al. | Using a hybrid of exact and genetic algorithms to design survivable networks | |
Meguellati et al. | A survey on balanced binary search trees methods | |
Meyer et al. | I/O-efficient shortest path algorithms for undirected graphs with random or bounded edge lengths | |
Salleb et al. | Mining maximal frequent itemsets by a boolean based approach | |
Zheng et al. | iCHUM: an efficient algorithm for high utility mining in incremental databases | |
Ma et al. | Graphchainer: Colinear chaining for accurate alignment of long reads to variation graphs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |