CN113779319A - 一种基于树的高效集合运算系统 - Google Patents

一种基于树的高效集合运算系统 Download PDF

Info

Publication number
CN113779319A
CN113779319A CN202110926100.7A CN202110926100A CN113779319A CN 113779319 A CN113779319 A CN 113779319A CN 202110926100 A CN202110926100 A CN 202110926100A CN 113779319 A CN113779319 A CN 113779319A
Authority
CN
China
Prior art keywords
tree
node
data
search
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.)
Granted
Application number
CN202110926100.7A
Other languages
English (en)
Other versions
CN113779319B (zh
Inventor
王一乐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hohai University HHU
Original Assignee
Hohai University HHU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hohai University HHU filed Critical Hohai University HHU
Priority to CN202110926100.7A priority Critical patent/CN113779319B/zh
Publication of CN113779319A publication Critical patent/CN113779319A/zh
Application granted granted Critical
Publication of CN113779319B publication Critical patent/CN113779319B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于树的高效集合运算系统,包括底层算法模块,用于实现该运算系统功能涉及的基本数据结构;实际应用模块,用于将底层算法模块中的函数进行封装;可视化模块,通过调用easyx开源库实现可视化展示程序运行结果。本发明的有益效果是:实现了交、并、补、差、并查集5种基于树结构的集合运算,其中交、并、补、差操作是基于二叉链表存储结构的平衡二叉树(AVL)实现,并查集是基于顺序存储结构的逻辑树结构实现。在此基础之上,通过有向图结构对集合运算在社交网络中的实际应用进行模拟,从而对抽象数据结构的能够具有更为深入的理解。

Description

一种基于树的高效集合运算系统
技术领域
本发明涉及一种高效集合运算系统,具体为一种基于树的高效集合运算系统,属于树形数据结构研究技术领域。
背景技术
树形数据结构是一类重要的非线性数据结构。树形数据结构可以表示数据表素之间一对多的关系。其中以树与二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树形数据结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形数据结构来形象表示,在计算机科学中,树是一种抽象数据类型或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。
基于树的集合有交集、并集、补集、差集、并查集这五种,而对于这五种集合运算的数据结构却缺乏研究,针对各个合集之间如何进行划分,以实现提高合集运算的效率。
发明内容
本发明的目的就在于为了解决问题而提供一种基于树的高效集合运算系统。
本发明通过以下技术方案来实现上述目的:一种基于树的高效集合运算系统,包括
底层算法模块,用于实现该运算系统功能涉及的基本数据结构,且其包括
AVLTree,AVL二叉平衡树的数据结构的具体实现;
Set,其包括基于AVL二叉平衡树设计的高效集合的AVLSet以及基于顺序存储的逻辑树结构UFSet;
Orthogonal List,用于实现基于十字链表的有向图结构;
HashMap,实现哈希表功能,用于实现图中节点信息快速查找;
实际应用模块,用于将底层算法模块中的函数进行封装,其包括以下步骤
一、读取数据集并建立有向图;
二、建立哈希表;
三、读取某两个节点出度节点合集,所读取的节点为:共同好友,出度节点合集;二度好友,出度节点合集;熟悉度,出度节点交集元素个数或出度节点并集元素个数;朋友圈划分,出度节点并查集;
可视化模块,通过调用easyx开源库实现可视化展示程序运行结果。
作为本发明再进一步的方案:与所述AVLTree配套的操作有树的初始化(AVLTree_init)、创建(AVLTree_create)、销毁(AVLTree_destroy)、调整(AVLTurn)、查找(AVLTree_search)、插入(AVLTree_insert)、删除(AVLTree_delete)以及遍历(AVLTree_traverse);
且AVLTree的数据结构代码为:
Figure BDA0003209274480000021
Figure BDA0003209274480000031
作为本发明再进一步的方案:与所述Set的AVLSet配套的操作有初始化(AVLSet_init)、创建(AVLSet_create)、销毁(AVLSet_destroy)、交集(Intersection)、并集(Union)、补集(Supplement)以及差集(Differance);
且AVLSet的数据结构代码为:
Figure BDA0003209274480000032
作为本发明再进一步的方案:所述Set的UFSet用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素,其操作有:Find:查找给定结点的根节点;Merge:合并两个同质结点;
且UFSet的数据结构代码为:
Figure BDA0003209274480000033
Figure BDA0003209274480000041
作为本发明再进一步的方案:所述Orthogonal List的操作包括:Create:根据数据集中节点和边的关系,创建十字链表;LocateVex:确定节点位置;Outdegree:获得某节点的出度及出度节点;Indegree:获得某节点的入度及入度节点;Delete:删除图中的某个节点、某条边;
且Orthogonal List的数据结构代码为:
Figure BDA0003209274480000042
Figure BDA0003209274480000051
作为本发明再进一步的方案:所述HashMap的操作包括:Create:创建哈希表;Get:根据key值,在哈希表中查找对应的value;Put:将键值对存储的数据加入哈希表;Destroy:销毁哈希表;
且HashMap的数据结构代码为:
Figure BDA0003209274480000052
Figure BDA0003209274480000061
作为本发明再进一步的方案:该系统的算法包括以下步骤
一、查找算法Search
首先设置一指针指向树的根节点,并与待查数据进行对比,若正好相等,查找成功并返回该位置。若待查数据小于该节点数据,则在左子树中递归进行查找,大于则在右子树中递归进行查找,若查找到叶子结点还未找到,则查找失败,并将该位置返回。
二、插入算法Insert
首先运行查找算法Search,返回待插位置。若查找不成功,则应进行插入操作。若待插数据比该位置数据小,则插在左子树;如果大于该位置的数据,则插在右子树。
接下来更新各节点的平衡因子BF,自下而上对整颗二叉树进行调整,因为需要自下而上调整,所以采用后序遍历的方法,若遇到不平衡的节点既|T->BF|==2,则根据需要对该节点进行RR、RL、LL或LR型调整。
三、删除算法Delete
首先对待删数据进行查找,若查找失败,则直接返回。若查找成功,则查找函数已经返回了待删位置。那么删除书上的一个节点就应该分三种情况:
1)该元素所在节点为左子树为空(在程序运行时,左右子树皆空归为这一类);
2)该元素所在节点为右子树为空;
3)左右子树皆不空。
记待删节点为e,其父节点记为parent。
如果是第一种情况即左子树为空且parent->lchild==e,那么直接将地址e赋值给parent的左子树,如果parent->rchild==e,那么将地址e赋值给parent的右子树,然后将待删节点e释放掉。
如果是第二种情况即右子树为空,那么一切操作与第一种情况的处理对称。
如果是第三种情况,那么便找到小于e->data的最大值所在的节点,即左子树中“最右下角”的节点中的数据,然后交换两节点的数据,然后将该处在e的左子树最右端的节点释放掉,将其父节点的右子树指向NULL指针。
四、高效并集Union
假设有两个集合A与B,且|A|≤|B|,那么遍历A集合,在遍历到A中每一个元素的时候将其插入到B中。若B中已存在该元素,则根据AVL树的插入算法,插入失败。若B中无该元素,则插入之,直到A被遍历完,并集操作结束。
五、高效差集Differance
假设有两个集合A与B,要做差集B-A,遍历在遍历到A中每一个元素的时候将其在B中删除。若B中不存在该元素,则根据AVL树的删除算法,删除失败。若B中有该元素,则删除之,直到A被遍历完,差集操作结束。
六、高效交集Intersection
假设有两个集合A与B,且|A|≤|B|,根据集合论的知识,A∩B=A-(A-B),故做两次差集,即可得到交集。
七、高效补集Supplement
记全集为U,则A的补集为U-A,调用差集函数即可。
八、并查集
并查集主要用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素。并查集可用于朋友圈的划分,将认识的人归为一类,并用根元素来代替整体元素,在实现基本功能初始化、合并、查找的基础上,初始化优化为只需将每一个节点的伪指针指向-1即可,也就是每个子集仅有一个元素,查找操作优化为压缩路径查找,即把元素i到根的路径上的所有祖先节点的双亲指针都改为指向根节点。
本发明的有益效果是:实现了交、并、补、差、并查集5种基于树结构的集合运算,其中交、并、补、差操作是基于二叉链表存储结构的平衡二叉树(AVL)实现,并查集是基于顺序存储结构的逻辑树结构实现。在此基础之上,通过有向图结构对集合运算在社交网络中的实际应用进行模拟,从而对抽象数据结构的能够具有更为深入的理解。
附图说明
图1为本发明系统结构示意图;
图2为本发明底层算法模块结构示意图;
图3为本发明应用模块划分结构示意图;
图4为本发明可视化模块结构示意图;
图5为本发明LL调整结构示意图;
图6为本发明LR调整结构示意图;
图7为本发明RR调整结构示意图。
图8为本发明RL调整结构示意图;
图9为本发明并查集优化结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
请参阅图1~4,一种基于树的高效集合运算系统,包括
底层算法模块,用于实现该运算系统功能涉及的基本数据结构,且其包括
AVLTree,AVL二叉平衡树的数据结构的具体实现;
Set,其包括基于AVL二叉平衡树设计的高效集合的AVLSet以及基于顺序存储的逻辑树结构UFSet;
Orthogonal List,用于实现基于十字链表的有向图结构;
HashMap,实现哈希表功能,用于实现图中节点信息快速查找;
实际应用模块,用于将底层算法模块中的函数进行封装,其包括以下步骤
一、读取数据集并建立有向图;
二、建立哈希表;
三、读取某两个节点出度节点合集,所读取的节点为:共同好友,出度节点合集;二度好友,出度节点合集;熟悉度,出度节点交集元素个数或出度节点并集元素个数;朋友圈划分,出度节点并查集;
可视化模块,通过调用easyx开源库实现可视化展示程序运行结果。
在本发明实施例中,与所述AVLTree配套的操作有树的初始化(AVLTree_init)、创建(AVLTree_create)、销毁(AVLTree_destroy)、调整(AVLTurn)、查找(AVLTree_search)、插入(AVLTree_insert)、删除(AVLTree_delete)以及遍历(AVLTree_traverse);
在插入操作中,如果有相同的数,那么便不能插入;在删除中,如果删除了不存在的元素,那么也不能删除,这符合集合的性质,方便为集合的操作提供接口;
且AVLTree的数据结构代码为:
Figure BDA0003209274480000101
Figure BDA0003209274480000111
在本发明实施例中,与所述Set的AVLSet配套的操作有初始化(AVLSet_init)、创建(AVLSet_create)、销毁(AVLSet_destroy)、交集(Intersection)、并集(Union)、补集(Supplement)以及差集(Differance);
集合的交集操作是这样运行的:从A和B集合中取较小的一个集合,不妨|A|≤|B|,遍历A集合,并在遍历中调用插入函数将A的元素插入到B集合中,因为如果有相同的元素会导致插入失败,所以便实现了集合的并集操作,同时也将时间复杂度降低至AlogB。差集操作于此类似,交集和补集是会根据集合论的知识由差集和并集推导而来;
且AVLSet的数据结构代码为:
Figure BDA0003209274480000112
在本发明实施例中,所述Set的UFSet用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素,其操作有:Find:查找给定结点的根节点;Merge:合并两个同质结点;
且UFSet的数据结构代码为:
Figure BDA0003209274480000121
在本发明实施例中,所述Orthogonal List的操作包括:Create:根据数据集中节点和边的关系,创建十字链表;LocateVex:确定节点位置;Outdegree:获得某节点的出度及出度节点;Indegree:获得某节点的入度及入度节点;Delete:删除图中的某个节点、某条边;
且Orthogonal List的数据结构代码为:
Figure BDA0003209274480000122
Figure BDA0003209274480000131
在本发明实施例中,所述HashMap的操作包括:Create:创建哈希表;Get:根据key值,在哈希表中查找对应的value;Put:将键值对存储的数据加入哈希表;Destroy:销毁哈希表;
且HashMap的数据结构代码为:
Figure BDA0003209274480000132
Figure BDA0003209274480000141
实施例二
请参阅图1~9,一种基于树的高效集合运算系统,包括
底层算法模块,用于实现该运算系统功能涉及的基本数据结构,且其包括
AVLTree,AVL二叉平衡树的数据结构的具体实现;
Set,其包括基于AVL二叉平衡树设计的高效集合的AVLSet以及基于顺序存储的逻辑树结构UFSet;
Orthogonal List,用于实现基于十字链表的有向图结构;
HashMap,实现哈希表功能,用于实现图中节点信息快速查找;
实际应用模块,用于将底层算法模块中的函数进行封装,其包括以下步骤
一、读取数据集并建立有向图;
二、建立哈希表;
三、读取某两个节点出度节点合集,所读取的节点为:共同好友,出度节点合集;二度好友,出度节点合集;熟悉度,出度节点交集元素个数或出度节点并集元素个数;朋友圈划分,出度节点并查集;
可视化模块,通过调用easyx开源库实现可视化展示程序运行结果。
在本发明实施例中,该系统的算法包括以下步骤
一、查找算法Search
首先设置一指针指向树的根节点,并与待查数据进行对比,若正好相等,查找成功并返回该位置。若待查数据小于该节点数据,则在左子树中递归进行查找,大于则在右子树中递归进行查找,若查找到叶子结点还未找到,则查找失败,并将该位置返回;该位置即是待查数据如果要插入树中双亲节点所在的位置,也可能是如果要删除数据待删数据所在的位置。这样既完成了查找函数的任务,也十分方便插入或删除操作的进行。
时间复杂度分析:考虑最坏情况下的时间复杂度,即查找失败或在树的最深处找到该元素。最长查找路径为根节点到叶子节点的距离,而树的深度规模为logN,因此在AVL树中查找的时间复杂度为O(logN)。
二、插入算法Insert
首先运行查找算法Search,返回待插位置。若查找不成功,则应进行插入操作。若待插数据比该位置数据小,则插在左子树;如果大于该位置的数据,则插在右子树。
接下来更新各节点的平衡因子BF,自下而上对整颗二叉树进行调整,因为需要自下而上调整,所以采用后序遍历的方法,若遇到不平衡的节点既|T->BF|==2,则根据需要对该节点进行RR、RL、LL或LR型调整。
时间复杂度分析:经过上述分析,该算法的时间复杂度主要集中在两部分,第一部分为找到该元素在树中的位置,时间复杂度为O(logN),第二部分为调节平衡,我们假设为一个最糟糕的情况,删除根节点元素,并且从最底层网上需要不断的调节平衡,一次调节平衡可以在常数时间内完成,我们假设的最糟糕情况需要调节平衡的次数为树的深度,因此时间复杂度为O(logN)。故总的时间复杂度为O(logN)。
三、删除算法Delete
首先对待删数据进行查找,若查找失败,则直接返回。若查找成功,则查找函数已经返回了待删位置。那么删除书上的一个节点就应该分三种情况:
1)该元素所在节点为左子树为空(在程序运行时,左右子树皆空归为这一类);
2)该元素所在节点为右子树为空;
3)左右子树皆不空。
记待删节点为e,其父节点记为parent。
如果是第一种情况即左子树为空且parent->lchild==e,那么直接将地址e赋值给parent的左子树,如果parent->rchild==e,那么将地址e赋值给parent的右子树,然后将待删节点e释放掉。
如果是第二种情况即右子树为空,那么一切操作与第一种情况的处理对称。
如果是第三种情况,那么便找到小于e->data的最大值所在的节点,即左子树中“最右下角”的节点中的数据,然后交换两节点的数据,然后将该处在e的左子树最右端的节点释放掉,将其父节点的右子树指向NULL指针。
删除某一元素后,就要更新整棵树中的平衡因子,然后调用AVLTurn函数对树的结构进行调整使其平衡化,具体的调整方法同插入算法的末尾的方法。
四、高效并集Union
假设有两个集合A与B,且|A|≤|B|,那么遍历A集合,在遍历到A中每一个元素的时候将其插入到B中。若B中已存在该元素,则根据AVL树的插入算法,插入失败。若B中无该元素,则插入之,直到A被遍历完,并集操作结束。
因集合的结构中有集合元素的数量,故比较|A|和|B|的大小的时间复杂度为O(1)。由于遍历A集合的时间复杂度为O(|A|),而在B中插入每一个元素的时间复杂度为O(log|B|),所以取如此取并集的时间复杂度为O(|A|log|B|),相较于一般的集合的取并集操作的时间复杂度O(|A||B|)降低不少,故本集合设计实现了取并集的优化。
五、高效差集Differance
假设有两个集合A与B,要做差集B-A,遍历在遍历到A中每一个元素的时候将其在B中删除。若B中不存在该元素,则根据AVL树的删除算法,删除失败。若B中有该元素,则删除之,直到A被遍历完,差集操作结束。
因集合的结构中有集合元素的数量,故比较|A|和|B|的大小的时间复杂度为O(1)。由于遍历A集合的时间复杂度为O(|A|),而在B中插入每一个元素的时间复杂度为O(log|B|),所以如此取差集的时间复杂度为O(|A|log|B|),相较于一般的集合的取差集操作的时间复杂度O(|A||B|)降低不少,故本集合设计实现了取差集的优化。
六、高效交集Intersection
假设有两个集合A与B,且|A|≤|B|,根据集合论的知识,A∩B=A-(A-B),故做两次差集,即可得到交集。
因集合的结构中有集合元素的数量,故比较|A|和|B|的大小的时间复杂度为O(1)。由于第一次取差集进行的比较次数为|B|log|A|次,第二次取差集时比较次数为|A-B|log|A|,故相加后比较次数为|A|log|A|,故时间复杂度为O(|A|log|A|)。与一般的取交集方法的时间复杂度O(|B||A|)有较大提升,故本集合设计实现了取交集的优化。
七、高效补集Supplement
记全集为U,则A的补集为U-A,调用差集函数即可。
故取补集的时间复杂度为O(|A||U-A|),相较于一般的取补集的时间复杂度O(|U||A|)有较大提升,故本集合设计实现了取补集的优化。
八、并查集
并查集主要用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素。并查集可用于朋友圈的划分,将认识的人归为一类,并用根元素来代替整体元素,在实现基本功能初始化、合并、查找的基础上,初始化优化为只需将每一个节点的伪指针指向-1即可,也就是每个子集仅有一个元素,查找操作优化为压缩路径查找,即把元素i到根的路径上的所有祖先节点的双亲指针都改为指向根节点,如图9所示,节点内数字为该节点的双亲指针,从i=5开始压缩路径。
工作原理:首先采用底层算法模块实现该运算系统功能涉及的基本数据结构,然后利用实际应用模块,将底层算法模块中的函数进行封装,最后可视化模块通过调用easyx开源库实现可视化展示程序运行结果。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

Claims (7)

1.一种基于树的高效集合运算系统,其特征在于:包括
底层算法模块,用于实现该运算系统功能涉及的基本数据结构,且其包括
AVLTree,AVL二叉平衡树的数据结构的具体实现;
Set,其包括基于AVL二叉平衡树设计的高效集合的AVLSet以及基于顺序存储的逻辑树结构UFSet;
Orthogonal List,用于实现基于十字链表的有向图结构;
HashMap,实现哈希表功能,用于实现图中节点信息快速查找;
实际应用模块,用于将底层算法模块中的函数进行封装,其包括以下步骤
一、读取数据集并建立有向图;
二、建立哈希表;
三、读取某两个节点出度节点合集,所读取的节点为:共同好友,出度节点合集;二度好友,出度节点合集;熟悉度,出度节点交集元素个数或出度节点并集元素个数;朋友圈划分,出度节点并查集;
可视化模块,通过调用easyx开源库实现可视化展示程序运行结果。
2.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:与所述AVLTree配套的操作有树的初始化(AVLTree_init)、创建(AVLTree_create)、销毁(AVLTree_destroy)、调整(AVLTurn)、查找(AVLTree_search)、插入(AVLTree_insert)、删除(AVLTree_delete)以及遍历(AVLTree_traverse);
且AVLTree的数据结构代码为:
Figure FDA0003209274470000021
3.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:与所述Set的AVLSet配套的操作有初始化(AVLSet_init)、创建(AVLSet_create)、销毁(AVLSet_destroy)、交集(Intersection)、并集(Union)、补集(Supplement)以及差集(Differance);
且AVLSet的数据结构代码为:
Figure FDA0003209274470000022
4.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述Set的UFSet用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素,其操作有:Find:查找给定结点的根节点;Merge:合并两个同质结点;
且UFSet的数据结构代码为:
Figure FDA0003209274470000031
5.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述OrthogonalList的操作包括:Create:根据数据集中节点和边的关系,创建十字链表;LocateVex:确定节点位置;Outdegree:获得某节点的出度及出度节点;Indegree:获得某节点的入度及入度节点;Delete:删除图中的某个节点、某条边;
且Orthogonal List的数据结构代码为:
Figure FDA0003209274470000032
Figure FDA0003209274470000041
6.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述HashMap的操作包括:Create:创建哈希表;Get:根据key值,在哈希表中查找对应的value;Put:将键值对存储的数据加入哈希表;Destroy:销毁哈希表;
且HashMap的数据结构代码为:
Figure FDA0003209274470000042
Figure FDA0003209274470000051
7.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:该系统的算法包括以下步骤
一、查找算法Search
首先设置一指针指向树的根节点,并与待查数据进行对比,若正好相等,查找成功并返回该位置。若待查数据小于该节点数据,则在左子树中递归进行查找,大于则在右子树中递归进行查找,若查找到叶子结点还未找到,则查找失败,并将该位置返回;
二、插入算法Insert
首先运行查找算法Search,返回待插位置。若查找不成功,则应进行插入操作。若待插数据比该位置数据小,则插在左子树;如果大于该位置的数据,则插在右子树;
接下来更新各节点的平衡因子BF,自下而上对整颗二叉树进行调整,因为需要自下而上调整,所以采用后序遍历的方法,若遇到不平衡的节点既|T->BF|==2,则根据需要对该节点进行RR、RL、LL或LR型调整;
三、删除算法Delete
首先对待删数据进行查找,若查找失败,则直接返回,若查找成功,则查找函数已经返回了待删位置。那么删除书上的一个节点就应该分三种情况:
1)该元素所在节点为左子树为空;
2)该元素所在节点为右子树为空;
3)左右子树皆不空;
记待删节点为e,其父节点记为parent;
如果是第一种情况即左子树为空且parent->lchild==e,那么直接将地址e赋值给parent的左子树,如果parent->rchild==e,那么将地址e赋值给parent的右子树,然后将待删节点e释放掉;
如果是第二种情况即右子树为空,那么一切操作与第一种情况的处理对称;
如果是第三种情况,那么便找到小于e->data的最大值所在的节点,即左子树中“最右下角”的节点中的数据,然后交换两节点的数据,然后将该处在e的左子树最右端的节点释放掉,将其父节点的右子树指向NULL指针;
四、高效并集Union
假设有两个集合A与B,且|A|≤|B|,那么遍历A集合,在遍历到A中每一个元素的时候将其插入到B中。若B中已存在该元素,则根据AVL树的插入算法,插入失败,若B中无该元素,则插入之,直到A被遍历完,并集操作结束;
五、高效差集Differance
假设有两个集合A与B,要做差集B-A,遍历在遍历到A中每一个元素的时候将其在B中删除,若B中不存在该元素,则根据AVL树的删除算法,删除失败。若B中有该元素,则删除之,直到A被遍历完,差集操作结束;
六、高效交集Intersection
假设有两个集合A与B,且|A|≤|B|,根据集合论的知识,A∩B=A-(A-B),故做两次差集,即可得到交集;
七、高效补集Supplement
记全集为U,则A的补集为U-A,调用差集函数即可;
八、并查集
并查集主要用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素。并查集可用于朋友圈的划分,将认识的人归为一类,并用根元素来代替整体元素,在实现基本功能初始化、合并、查找的基础上,初始化优化为只需将每一个节点的伪指针指向-1即可,也就是每个子集仅有一个元素,查找操作优化为压缩路径查找,即把元素i到根的路径上的所有祖先节点的双亲指针都改为指向根节点。
CN202110926100.7A 2021-08-12 2021-08-12 一种基于树的高效集合运算系统 Active CN113779319B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110926100.7A CN113779319B (zh) 2021-08-12 2021-08-12 一种基于树的高效集合运算系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110926100.7A CN113779319B (zh) 2021-08-12 2021-08-12 一种基于树的高效集合运算系统

Publications (2)

Publication Number Publication Date
CN113779319A true CN113779319A (zh) 2021-12-10
CN113779319B CN113779319B (zh) 2023-09-19

Family

ID=78837541

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110926100.7A Active CN113779319B (zh) 2021-08-12 2021-08-12 一种基于树的高效集合运算系统

Country Status (1)

Country Link
CN (1) CN113779319B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE9804033D0 (sv) * 1998-11-24 1998-11-24 Priqueue Ab A digital memory structure and device, and methods for the management thereof
CN103914399A (zh) * 2012-12-31 2014-07-09 中国移动通信集团公司 一种并行计算系统中的磁盘缓存方法及装置
CN109815238A (zh) * 2019-01-18 2019-05-28 武汉轻工大学 用严格平衡二叉树实现数据库的动态添加方法及装置
US20230015569A1 (en) * 2019-10-24 2023-01-19 nChain Holdings Limited Data structure for efficiently verifying data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE9804033D0 (sv) * 1998-11-24 1998-11-24 Priqueue Ab A digital memory structure and device, and methods for the management thereof
CN103914399A (zh) * 2012-12-31 2014-07-09 中国移动通信集团公司 一种并行计算系统中的磁盘缓存方法及装置
CN109815238A (zh) * 2019-01-18 2019-05-28 武汉轻工大学 用严格平衡二叉树实现数据库的动态添加方法及装置
US20230015569A1 (en) * 2019-10-24 2023-01-19 nChain Holdings Limited Data structure for efficiently verifying data

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吴鲲;吴建平;徐恪: "基于树结构的分布式BGP路由计算及两种迭代树算法", 小型微型计算机系统, no. 06 *

Also Published As

Publication number Publication date
CN113779319B (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
US7606817B2 (en) Primenet data management system
Brown Implementation and analysis of binomial queue algorithms
US20200322159A1 (en) Method for index-based and integrity-assured search in a blockchain
Chawathe et al. Meaningful change detection in structured data
Kamel et al. On packing R-trees
JP3433803B2 (ja) データベースの構造
NZ505767A (en) Database management system with layered index arranged in blocks
CN113590894B (zh) 一种动态高效的遥感影像元数据入库检索方法
CN110851663A (zh) 管理元数据的方法和装置
Nekrich Orthogonal range searching in linear and almost-linear space
Markov et al. Natural Language Addressing
US20070220420A1 (en) System and method for efficient maintenance of indexes for XML files
Acar et al. Parallel batch-dynamic trees via change propagation
Khan et al. Set-based unified approach for attributed graph summarization
Wong et al. Online skyline analysis with dynamic preferences on nominal attributes
Minato et al. Frequent pattern mining and knowledge indexing based on zero-suppressed BDDs
CN113779319A (zh) 一种基于树的高效集合运算系统
Bhargavi et al. Graph pattern mining: A survey of issues and approaches
Jia et al. ETI: an efficient index for set similarity queries
Cohen et al. The complexity of learning tree patterns from example graphs
Zibin et al. Efficient algorithms for isomorphisms of simple types
Koepke et al. Efficient testing operations on dynamic graph structures using strong hash functions
Peters et al. Regular path query evaluation using path indexes
Gupta et al. The parallel complexity of tree embedding problems
Nekrich A linear space data structure for orthogonal range reporting and emptiness queries

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