首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种基于解空间树的位计数并行排序方法 

申请/专利权人:西北师范大学

申请日:2024-04-19

公开(公告)日:2024-07-05

公开(公告)号:CN118296006A

主分类号:G06F16/22

分类号:G06F16/22;G06F7/24

优先权:

专利状态码:在审-实质审查的生效

法律状态:2024.07.23#实质审查的生效;2024.07.05#公开

摘要:本发明针对计算机领域中排序、索引问题设计了一种计数型空间树的数据结构,并根据此数据结构提出了时间复杂度为线性的并行排序方法,涉及本发明涉及计算机科学中的数据库与数据挖掘方法领域。首先,构建待排序数据存储解空间树;其次,根据每一个待排序数据的不同长度将待排序数组元素存储到不同解空间树中,存储过程中存储位置不受数据存储先后顺序影响;最后,根据此类型的解空间树的性质,从上往下扫描实现数组的有序输出。本发明实现过程简单,该算法实现的内排序效率大幅优于现有经典的高级排序方法,特别在外排序情况下的排序空间利用率提高3‑5个数量级。

主权项:1.一种基于解空间树的按位计数排序方法,其特征在于每个树节点中有多个count计数域计数该位某一数字的出现次数,不存储原有数组顺序,在存储十亿级位长小于数据量传统线性存储四个数量级。步骤1:输入数据的解空间树根节点集合构造。根据输入的数组arrin=[x0,x1,...,xN-1]构建用于存储不同维度向量的根节点的集合r。把xi表示成解向量xi存储到char型的数组中,并得到解向量xn的长度ln,执行存储操作。步骤1.1和步骤1.2详细描述如下:步骤1.1:依次遍历arrin=[x0,x1,...,xN-1]数组中的每个元素,取出元素xn处理成向量存储在char型的数组中,转入步骤1.2。步骤1.2:根据char型数组获得该数组的长度ln,转到步骤2。步骤2:基于解空间树的数据存储排序。存储一个十进制到解空间树中,根据数组和参数ln,选择解空间树来存储向量xn。node类型的指针P初始指向根节点第一维a0作为根节点中的数组下标访问其Dom数组,使对应的计数域加一,即P→Dom[a0].count+=1。维护该节点中index值和C_G值,即index的值被赋值为该node节点中的计数域大于0且下标最小的下标值,C_G+=1。指针P指向a0的节点,即P=P→Dom[a0].next,若无该节点则新开辟一个空间。循环处理剩余的位完成待排序数组元素的十进制存储,步骤2的分步骤实施如下。步骤2.1:选择的解空间树来存储node类型的指针P初始指向之后,转到步骤2.2。步骤2.2:依次选择ai0≤i≤ln-1和P作为待排序数组元素的按位存储参数,转到步骤2.3。步骤2.3:根据传入的参数ai和P,使得ai作为指针P所指向节点中的Dom数组下标访计数域自增一,即P->Dom[ai].count++;同时使得C_G值加一,即P→C_G++。之后,转到步骤2.4。步骤2.4:根据node节点的Dom数组,从下标0开始递增遍历计数域,找到第一个计数域不为0的下标值赋值给index。转到步骤2.5。步骤2.5:若P=P→Dom[ai].next不为NULL,则P=P→Dom[ai].next;否则,开辟新节点node,初始化该节点,令C_G初始为0,index初始化为10index为10时,表示该节点中没有数据,Dom数组中的所有计数域初始化为0,所有指针域初始化为NULL且将P指向该节点。之后,转入到步骤2.2,直至完成的存储。根据以上步骤依次处理完xn中所有元素则完成了一个整数的存储。循环执行步骤1、步骤2可将arrin=[x1,x2,...,xN]存储在解空间树中。之后,转入到步骤3。步骤3:遍历输出解空间树排序结果。根据下标依次遍历解空间树,将解空间树中的数据存储到数组arrout中则实现数组arrin的排序。依次迭代处理每处理完一个节点将临时变量dataout赋值为dataout=dataout*10+index,将每趟处理完的dataout写入到数组arrout中,实现一个待排序数组元素的排序输出。当每个节点node的C_G0,将该节点Dom数组下标为index的计数域减一即P→Dom[index].count--,且使得C_G减一并给dataout赋值即P→C_G--;dataout=dataout*M+index;进一步,若P→Dom[index].count=0则维护index,否则直接处理下一个节点。迭代处理直到P→Dom[P→index].next指针域为空结束。将dataout依次加到arrout数组中。至此,完成基于遍历解空间树的待排序数组元素的排序输出,即得到数组arrout。步骤3分步实施如下。步骤3.1:根据下标从小到大依次选择中的解空间树ri并转步骤3.2,直到取完r集合中的所有树结束。步骤3.2:将指针P指向ri,判断P节点中C_G的值是否大于0,若C_G0,则将dataout初始化为0,之后循环执行步骤3.3。否则转入步骤3.1。步骤3.3:将指针P所指向节点的C_G减一,即P→C_G--,同时将该节点的index所指的计数域减一,即P=P→Dom[P→index].count--,并令dataout=dataout*M+index。转入步骤3.4。步骤3.4:此处引入一个新的临时变量oldIndex,用于存储更新前的index的值,将oldIndex赋值为index。判断P→Dom[P→index].count计数域是否为0,若P→Dom[P→index].count=0,则转步骤3.6。之后转入步骤3.5。步骤3.5:判断P→Dom[P→oldIndex].next是否为NULL,是则P=P→Dom[P→oldIndex].next,并将dataout加到数组arrout中并转步骤3.1,否则转入步骤3.3。步骤3.6:节点根据中P→index往下遍历Dom数组找到第一个计数域不为0的数组下标值,将下标值赋值给index。本发明专利有益效果在于通过按位计数存储于解空间树的方法,减小了传统排序存储方法中数据存储冗余,从而优化了排序数据的存储空间;本发明专利通过节点下标标记,避免了传统解空间树遍历效率低下的回溯方法,从而提升了解空间树遍历的效率;本发明专利基于计数型空间树非对比的按位计数排序方法,可以在外排序中同时实现时间和空间消耗最小化,在内排序中实现时间更高;本发明专利中的排序数据和输入次序无关,可实现并行排序,从而提高方法的效率;本发明专利数据结构用于数据的索引时,由于数据结构本身的特性,在被索引数据更新时不改用改变索引结构,从而提高索引效率。

全文数据:

权利要求:

百度查询: 西北师范大学 一种基于解空间树的位计数并行排序方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。