[发明专利]一种基于树的高效集合运算系统有效
申请号: | 202110926100.7 | 申请日: | 2021-08-12 |
公开(公告)号: | CN113779319B | 公开(公告)日: | 2023-09-19 |
发明(设计)人: | 王一乐 | 申请(专利权)人: | 河海大学 |
主分类号: | G06F16/901 | 分类号: | G06F16/901;G06F16/903 |
代理公司: | 北京国坤专利代理事务所(普通合伙) 11491 | 代理人: | 赵红霞 |
地址: | 213022 江苏省常州市*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 高效 集合 运算 系统 | ||
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的数据结构代码为:
3.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:与所述Set的AVLSet配套的操作有初始化AVLSet_init、创建AVLSet_create、销毁AVLSet_destroy、交集Intersection、并集Union、补集Supplement以及差集Differance;
且AVLSet的数据结构代码为:
4.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述Set的UFSet用于集合的划分,将一个大的集合按一定的标准划分为几个互不相交的子集,且这几个子集包含原有集合的所有元素,其操作有:Find:查找给定结点的根节点;Merge:合并两个同质结点;
且UFSet的数据结构代码为:
5.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述Orthogonal List的操作包括:Create:根据数据集中节点和边的关系,创建十字链表;LocateVex:确定节点位置;Outdegree:获得某节点的出度及出度节点;Indegree:获得某节点的入度及入度节点;Delete:删除图中的某个节点、某条边;
且Orthogonal List的数据结构代码为:
6.根据权利要求1所述的一种基于树的高效集合运算系统,其特征在于:所述HashMap的操作包括:Create:创建哈希表;Get:根据key值,在哈希表中查找对应的value;Put:将键值对存储的数据加入哈希表;Destroy:销毁哈希表;
且HashMap的数据结构代码为:
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到根的路径上的所有祖先节点的双亲指针都改为指向根节点。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于河海大学,未经河海大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110926100.7/1.html,转载请声明来源钻瓜专利网。