一种基于数据分布模型的分布式排序系统的制作方法

文档序号:17926987发布日期:2019-06-15 00:29阅读:176来源:国知局
一种基于数据分布模型的分布式排序系统的制作方法

本发明涉及排序算法/系统,具体涉及一种基于数据分布模型的排序系统。



背景技术:

排序算法作为经典算法在各类软件开发中都有非常高的使用频率,甚至是在今年来较为火热的聚类分析、机器学习、推荐算法等人工智能领域的基础算法之一。从排序问题提出至今,研究人员和工程人员对排序算法进行了全方位的改进,但是其理论时间复杂度一直停滞在o(nlogn)。随着大数据和机器学习的兴起,计算机需要处理的数据量也越来越大,已有的排序算法难以适应。目前来说对排序算法的优化仅停留在实际运行时间的减少,并没有对理论时间和最坏时间进行进一步优化。目前来说,快速排序和归并排序作为应用较为广泛的排序算法之一,在众多学者和工程师的研究和优化后可以使得大部分的排序过程的时间消耗略微低于理论时间复杂度o(nlogn),效果并不是很理想,没有达到质的改变。

分布模型是由分布函数来表示的一种模型,分布函数既可以是基本函数也可以是不能用解析式表达的抽象函数。因此可以通过数学函数、机器学习模型等多种方式来对待排元素的数据分布模型进行描述。



技术实现要素:

本发明所解决的技术问题是,提供一种新的分布式排序系统,将待排元素集分割成若干子集,利用数据分布模型对各个子集中的元素在整个有序数组中的位置进行预测,然后根据元素预测位置将元素放入有序数组从而完成排序操作。这种方法极大的提高了运行的时间效率,且稳定性很强。

本发明的技术方案为:

步骤1):由模型单元为中央处理单元提供数据的分布模型。模型单元既可以是单个计算机也可以是某个高性能集群。模型的提供方式既可以是直接的数学函数,也可以是用机器学习模型来表示的模型。

步骤2):中央处理单元将待排元素集划分成若干子集,通过一定的调度策略将步骤1)中的模型和子集分批发送给各个计算单元。这个子集的划分是根据待排元素集中的最大值(max)、最小值(min)和元素规模来设定,假定整个待排元素集将被划分为l个子集,那么元素x对应的子集编号为:

步骤3):各个计算单元通过数据分布模型来对待排元素子集进行处理,主要包括以下步骤:

步骤3.1):各个计算单元使用数据分布模型来预测待排元素集中每一个元素在有序数组中的位置。将待排元素集依次输入数据分布模型,模型的输出乘以待排元素集规模就是该元素的预测位置。

步骤3.2):根据获得的预测位置,将各个元素放置在有序数组中。最终的有序数组就是待排元素的排序结果。

进一步的,在步骤3.2)中,由于可能会有多个元素的值相同从而导致它们有相同的预测位置。这会使得在将元素放置到有序数组的过程中可能会发生冲突。我们提供了一种存储结构来解决冲突的问题。首先,针对每个元素构建一个索引,用来指向与该元素有相同预测位置的前一个元素。然后,针对每一个可能的预测位置构建一个索引,用来指向该预测位置对应的最后一个元素。

步骤4):中央处理单元在步骤2)的集合划分时已获得各个集合的元素个数。中央处理单元在获取到计算单元返回的每一组结果时都将完成一个合并操作,包含以下步骤:

步骤4.1):根据返回结果确定合并初始位置。numk表示每个集合元素的个数,在对第k个集合进行合并时,其初始位置为:

步骤4.2):依次遍历步骤3.2)中每一个预测位置,将预测位置索引到的元素和通过该元素迭代索引到的其他元素依次放入有序数组。

本发明的技术效果在于,采用本发明提出的排序系统,其运行时间消耗更短。本发明提出的排序系统使用了非基于比较的排序方法,非基于比较的排序算法的理论时间复杂度最低为o(n),而基于比较的排序算法理论时间复杂度最低是o(nlogn)。本文提出的排序系统相比于其他排序系统在基础方法上有用更优的时间效率。

附图说明

图1是本发明理论架构图;

图2是本发明系统结构图;

图3是用于解决放置冲突的存储结构示意图;

图4是利用存储结构将元素放入有序数组的示意图。

具体实施方式

为使本发明的目的、设计思路和优点更加清楚,以下结合具体实例,并参照附图,对本发明作进一步详细说明。

本发明提供了一种基于数据分布的排序系统,包括以下步骤:1)获取数据分布模型;2)将待排元素集划分成若干子集并发送给计算单元集群;3)根据数据分布模型来预测待排元素集中每一个元素在有序数组中的位置,并根据获得的预测位置,将各个元素放置在有序数组中;4)中央处理单元对各个结果进行合并。

下面对本发明的方法涉及的关键步骤进行逐一详细说明,具体步骤如下所示:

步骤一,获取数据分布模型。模型的提供方式既可以是直接的数学函数,也可以是用机器学习模型来表示的模型。整个模型的功能是根据输入元素返回对应的分布函数值。

步骤二,将待排元素集划分成若干子集并发送给计算单元集群。主要包含以下工作:根据待排元素集中的最大值(max)、最小值(min)和元素规模来设定,假定整个待排元素集将被划分为l个子集,那么元素x对应的子集编号为:

在对待排元素集进行划分的同时需要统计各个子集元素的规模。

步骤三,根据数据分布模型来预测待排元素集中每一个元素在有序数组中的位置,并根据获得的预测位置,将各个元素放置在有序数组中。主要包括以下工作:将待排元素依次输入数据分布模型,将获得的模型输出值与待排元素集规模的乘积作为元素的预测位置。也就是模型输出值与最终有序数组长度的乘积是元素的预测位置。

根据待排元素的预测位置构建索引结构。主要包括以下工作:

假设待排元素集中各个元素的值分别为3,4,8,7,4,8,4。索引结构示意图如图3所示,待排元素集的序号表示了该元素在元素集中出现的位置;head数组是预测位置的索引,其序号表示预测位置的值,例如head[3]表示预测位置为3的索引;next数组是每个元素的索引,其序号表示元素序号,例如,next[4]是序号为4的元素的索引。假定待排元素集中数组序号为i的元素的预测位置是p,我们分两种情况对索引结构进行维护:

1)如果head数组中序号p的单元没有值。这意味着在排元素集的第i个元素之前没有元素的预测位置是p,因此我们只需要维护head数组,将head数组中序号p的单元直接指向数组序号为i的元素,于是head[p]被赋值为i。

2)如果head数组中序号p的单元已经有值了。这意味着在待排元素集的第i个元素之前有其他元素的预测位置也是p,我们需要先维护next数组才能维护head数组。先将next数组序号为i的单元指向前一个预测位置也是p的元素,由于head[p]已经记录了前一个预测位置是p的元素的数组序号,因此将next[i]赋值为head[p]。再将head数组中序号p的单元直接指向数组序号为i的元素,也就是将head[p]赋值为i。

步骤四,中央处理单元对各个结果进行合并。在获取到每一个子集的计算结果后,进行放置。主要包含以下步骤:

1)根据步骤二中统计的各个子集的规模来计算初始放置位置,第i个子集的初始放置位置的计算式为:

其中,numk表示每个集合元素的个数。

2)根据步骤三中的索引结构依次放置元素。如图4所示,依次访问每一个预测位置,也就是head数组中每一个单元,先将head数组中某个单元指向的元素放入结果数组,紧接着通过next数组将与该元素串联在一起的其他元素依次放入结果数组。在图4中,首先访问head数组中序号为0的单元,由于head[0]的值是0,因此将待排元素集中数组序号为0的元素放入结果数组;然后访问head数组序号为3的单元,因为head[3]的值是6,所以将待排元素集中数组序号为6元素也放入结果数组,由于next数组中序号为6的单元有值且值为4,这意味着有待排元素中序号为4的元素的预测位置也是3,因此将待排元素集中序号为4的元素也放入结果数组,又由于next数组中序号为4的单元有值且值为1,这意味着有待排元素中序号为1的元素的预测位置也是3,因此将待排元素集中序号为1的元素也放入结果数组;然后访问head数组中序号为5的单元,由于head[5]的值是3,因此将待排元素集中序号为3的元素放入结果数组;最后访问head数组中序号为6的单元,head[6]的值是5,因此将待排元素集序号为5的元素放入结果数组,由于next数组中序号为5的单元有值且值为2,这意味着有待排元素中序号为2的元素的预测位置也是6,因此将待排元素集中序号为2的元素也放入结果数组。这样就完成了整个放置过程。

3)所有子集都完成放置后,将最终结果返回给用户。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1