基于FPGA的数组排序方法、系统及数据压缩方法与流程

文档序号:26698275发布日期:2021-09-18 02:33阅读:424来源:国知局
基于FPGA的数组排序方法、系统及数据压缩方法与流程
基于fpga的数组排序方法、系统及数据压缩方法
技术领域
1.本发明涉及数据处理领域,特别涉及一种基于fpga的数组排序方法、系统及数据压缩方法。


背景技术:

2.数据排序是按一定顺序将数据进行排列,以便研究者通过浏览数据发现一些明显的特征或趋势,找到解决问题的线索。除此之外,排序还有助于对数据检查纠错,以及为重新归类或分组等提供方便。好的排序方法可以有效提高排序速度,提高排序效果。常用的排序方法包括冒泡排序法、快速排序法、插入排序法、希尔排序法、归并排序法等。
3.冒泡排序法:将数组中的相邻两个数据进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾)。
4.插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的数据插入到前一部分的适当位置。
5.快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。
6.但上述常见的排序方法都无法经过一次遍历就完成数组排序,无法做到时间复杂度o=n;且大多情况下受数据集本身影响,排序空间复杂度与时间复杂度不稳定。
7.因此,现有技术的排序方法普遍存在复杂度高、比较次数多(空间复杂度高)、排序时间长(时间复杂度高),且在实现排序时间受数据本身影响等缺点。由此,急需一种数组排序方案能够解决上述问题。


技术实现要素:

8.有鉴于此,本发明提出了一种基于fpga的数组排序方法、系统及数据压缩方法,具体方案如下:
9.一种基于fpga的数组排序方法,应用于fpga数据压缩中,包括如下:
10.获取待排序数组,所述待排序数组中的数据按照初始顺序排列,按照所述初始顺序对所述数据进行编号,获取初始序号;
11.按照所述初始顺序从所述待排序数组中依次选取数据作为第一数据,比较所述第一数据与所述待排序数组中的数据的大小,通过标志位记录比较结果,所述标志位包括标志位数值和和标志位序号,所述标志位序号与所述初始序号对应,每个所述第一数据的标志位数量与所述待排序数组中的数据数量相同;
12.将所述第一数据的所述标志位数值相加得到最终序号,所述最终序号即为所述第一数据在所述待排序数组中按升序排序的位置序号。
13.在一个具体实施例中,“比较所述第一数据与所述待排序数组中的数据的大小,通
过标志位记录比较结果”具体包括:
14.将所述第一数据与所述待排序数组中的每一个数据进行比较,并通过标志位记录比较结果,
15.当所述第一数据大于所述待排序数组中的某一数据时,所述标志位数值记为1;
16.当所述第一数据小于所述待排序数组中的某一数据时,所述标志位数值记为0;
17.当所述第一数据等于所述待排序数组中的某一数据时,判断所述第一数据的初始序号是否大于所述数据的初始序号:
18.若是,则所述标志位数值记为1;若否,则所述标志位数值记为0。
19.在一个具体实施例中,获取fpga的计数器;
20.每选取一次所述第一数据,所述计数器数值加1,每个所述第一数据对应一个计数器数值,所述计数器数值等于所述第一数据的初始序号;
21.当所述第一数据等于所述待排序数组中的某一数据时,判断所述计数器数值是否大于所述数据的初始序号:
22.若是,则所述标志位数值记为1;若否,则所述标志位数值记为0。
23.在一个具体实施例中,所述数组排序方法在fpga内部时钟驱动下进行;在一个时钟周期内,完成从选取所述第一数据到获取所述最终序号的过程。fpga的排序动作,以及count计数都是由fpga内部时钟驱动。
24.在一个具体实施例中,设定所述待排序数组为d={d0,d1

dn},所述计数器数值为cnt=0~n,所述第一数据为dx,使用n+1个标志位flag记录dx与d0~dn的比较结果:
25.dx>d0:flag[0]=1
[0026]
dx=d1:flag[1]=0 or 1(当cnt>1时flag[1]=1,当cnt<=1时flag[1]=0)
[0027]
dx<d2:flag[2]=0
[0028]
……
[0029]
dx<dn:flag[n]=0
[0030]
将n+1个标志位数值相加,即flag[0]+flag[1]+

+flag[n]=sum,sum值则为dx在升序排序后数组中的位置。
[0031]
一种基于fpga的数组排序系统,应用于fpga数据压缩中,包括,
[0032]
数组获取单元:用于获取待排序数组,所述待排序数组中的数据按照初始顺序排列,按照所述初始顺序对所述数据进行编号,获取初始序号;
[0033]
比较单元:用于按照所述初始顺序从所述待排序数组中依次选取数据作为第一数据,比较所述第一数据与所述待排序数组中的数据的大小,通过标志位记录比较结果,所述标志位包括标志位数值和和标志位序号,所述标志位序号与所述初始序号对应,每个所述第一数据的标志位数量与所述待排序数组中的数据数量相同;
[0034]
排序单元:用于将所述第一数据的所述标志位数值相加得到最终序号,所述最终序号即为所述第一数据在所述待排序数组中按升序排序的位置序号。
[0035]
在一个具体实施例中,所述比较单元还包括:
[0036]
将所述第一数据与所述待排序数组中的每一个数据进行比较,并通过标志位记录比较结果,
[0037]
当所述第一数据大于所述待排序数组中的某一数据时,所述标志位数值记为1;
[0038]
当所述第一数据小于所述待排序数组中的某一数据时,所述标志位数值记为0;
[0039]
当所述第一数据等于所述待排序数组中的某一数据时,判断所述第一数据的初始序号是否大于所述数据的初始序号:
[0040]
若是,则所述标志位数值记为1;若否,则所述标志位数值记为0。
[0041]
在一个具体实施例中,获取所述fpga的计数器;
[0042]
每选取一次所述第一数据,所述计数器数值加1,每个所述第一数据对应一个计数器数值,所述计数器数值等于所述第一数据的初始序号;
[0043]
当所述第一数据等于所述待排序数组中的某一数据时,判断所述计数器数值是否大于所述数据的初始序号:
[0044]
若是,则所述标志位数值记为1;若否,则所述标志位数值记为0。
[0045]
在一个具体实施例中,所述数组排序系统在fpga内部时钟驱动下进行;
[0046]
在一个时钟周期内,完成从选取所述第一数据到获取所述最终序号的过程。
[0047]
一种基于fpga的数据压缩方法,所述压缩方法采用上述所述的基于fpga的数组排序方法对数据进行排序。
[0048]
有益效果:
[0049]
本发明提供了一种基于fpga的数组排序方法、系统及数据压缩方法。
[0050]
基于fpga的数组排序方法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n,解决了现有排序算法排序时间长、排序耗时不固定的问题。
[0051]
基于fpga的数组排序系统,将上述方法系统化,使其更具实际应用性。
[0052]
基于fpga的数据压缩方法,利用fpga实现数据压缩,通过并行的方式处理排序算法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n。
附图说明
[0053]
图1为本发明实施例1的基于fpga的数组排序方法流程图;
[0054]
图2为本发明实施例1的待排序数组排序前的结果示意图;
[0055]
图3为本发明实施例1的排序流程图;
[0056]
图4为本发明实施例1的待排序数组排序后的结果示意图;
[0057]
图5为本发明实施例2的基于fpga的数组排序系统的结构框图。
[0058]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0059]
附图标记:1

数组获取单元;2

比较单元;3

排序单元。
具体实施方式
[0060]
在下文中,将更全面地描述本发明公开的各种实施例。本发明公开可具有各种实施例,并且可在其中做出调整和改变。然而,应理解:不存在将本发明公开的各种实施例限
于在此公开的特定实施例的意图,而是应将本发明公开理解为涵盖落入本发明公开的各种实施例的精神和范围内的所有调整、等同物和/或可选方案。
[0061]
本发明提供了一种基于fpga的数组排序方法、系统及数据压缩方法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n,解决了现有排序算法排序时间长、排序耗时不固定的问题。
[0062]
在本发明公开的各种实施例中使用的术语仅用于描述特定实施例的目的并且并非意在限制本发明公开的各种实施例。如在此所使用,单数形式意在也包括复数形式,除非上下文清楚地另有指示。除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明公开的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明公开的各种实施例中被清楚地限定。
[0063]
实施例1
[0064]
本发明实施例1公开了一种基于fpga的数组排序方法,方法流程图说明书附图1所示,具体方案如下:
[0065]
一种基于fpga的数组排序方法,应用于fpga数据压缩中,包括如下步骤:
[0066]
101、获取待排序数组,待排序数组中的数据按照初始顺序排列,按照初始顺序对数据进行编号,获取初始序号;
[0067]
102、按照初始顺序从待排序数组中依次选取数据作为第一数据,比较第一数据与待排序数组中的数据的大小,通过标志位记录比较结果;标志位包括标志位数值和和标志位序号,标志位序号与初始序号对应,每个第一数据的标志位数量与待排序数组中的数据数量相同;
[0068]
103、将第一数据的标志位数值相加得到最终序号,最终序号即为第一数据在待排序数组中按升序排序的位置序号。
[0069]
具体地,101、获取待排序数组,待排序数组中的数据按照初始顺序排列,按照初始顺序对数据进行编号,获取初始序号。
[0070]
在本实施例中,待排序数组包括但不限于一维数组。待排序数组中包括多个数据,数据按照初始顺序排列分布。初始顺序即为待排序数组中各数据的具体排序位置。根据初始顺序对数据进行编号,获取初始序号。
[0071]
例如,待排序数组d={d0,d1

dn},数组中包含n+1个数据,初始顺序即为d0,d1

dn。根据初始顺序进行编号得到初始序号,则d0为编号0,d1为编号1,d2为编号2
……
以此类推,dn为编号n。
[0072]
基于此,本实施例获取fpga的计数器,通过计数器代替初始序号。每计算完一个数据的最终序号或每选取一次第一数据,计数器数值加1,则每个数据对应一个计数器数值。按照初始顺序计算每个数据的最终序号,则每个数据的初始序号对应各自的计数器数值。
[0073]
具体地,102、按照初始顺序从待排序数组中依次选取数据作为第一数据,比较第一数据与待排序数组中的数据的大小,通过标志位记录比较结果。
[0074]
在本实施例中,标志位包括标志位数值和和标志位序号,标志位序号与初始序号对应,每个第一数据的标志位数量与待排序数组中的数据数量相同。例如,标志位flag[h]
=n,h即为标志位序号,n为标志位数值,在本实施例中,标志位数值为0或1。因此,可采用波形信号表述标志位,高电平为1,低电平为0。
[0075]
例如,待排序数组d={d0,d1

dn},按照初始顺序依次选取数据作为第一数据。首先,选取d0作为第一数据时,d0需要依次与d0~dn进行比较,并通过标志位flag[0]记录比较结果;其次,选取d1作为第一数据时,d1需要依次与d0~dn进行比较,并通过标志位flag[1]记录比较结果;接着,选取d2作为第一数据时,d2需要依次与d0~dn进行比较,并通过标志位flag[2]记录比较结果
……
依次类推,最终,选取dn作为第一数据时,dn需要依次与d0~dn进行比较,并通过标志位flag[n]记录比较结果。通过标志位记录比较结果,最终将标志位数值求和即可得到第一数据的排序位置。
[0076]
标志位的获取具体包括:第一数据与待排序数组中的每一个数据进行比较,并通过标志位记录比较结果,
[0077]
当第一数据大于待排序数组中的某一数据时,标志位数值记为1;
[0078]
当第一数据小于待排序数组中的某一数据时,标志位数值记为0;
[0079]
当第一数据等于待排序数组中的某一数据时,判断第一数据的初始序号是否大于数据的初始序号:若是,则标志位数值记为1,若否,则标志位数值记为0。
[0080]
例如,待排序数组为d={d0,d1

dn},计数器数值为cnt=0~n,第一数据为dx,使用n+1个标志位flag记录dx与d0~dn的比较结果:
[0081]
当第一数据大于待排序数组中的某一数据时,标志位数值记为1;dx>d0:flag[0]=1
[0082]
当第一数据小于待排序数组中的某一数据时,标志位数值记为0;dx<d2:flag[2]=0
[0083]
当第一数据等于待排序数组中的某一数据时,存在两种情况:(1)第一数据即为待排序数组中的某一数据。例如数组{d0,d1

dn},选取d0作为第一数据dx时,d0需要依次与d0~dn进行比较,当第一数据dx与d0比较时,此时dx=d0。(2)待排序数组中存在数值大小相同的数据。例如数组{d0,d1

dn},其中,d0=d1,选取d0作为第一数据dx时,d0需要依次与d0~dn进行比较,当第一数据dx与d1比较时,此时dx=d0。
[0084]
针对情况(1),本实施例通过标志位序号和初始序号进行判断。判断第一数据的初始序号是否大于数据的初始序号:若是,则标志位数值为1,证明此时为情况(2);若否,则第一数据的初始序号等于或小于数据的初始序号,则标志位数值为0。第一数据的初始序号等于数据的初始序号时,证明此时为情况(1);第一数据的初始序号不等于数据的初始序号时,证明此时为情况(2)。
[0085]
此外,本实施例引入了fpga的计数器,计数器数值对应初始序号,可通过比较第一数据的计数器数值与数据的初始序号的大小。
[0086]
dx=d1:flag[1]=0 or 1(当cnt>1时flag[1]=1,当cnt<=1时flag[1]=0)
[0087]
此外,本实施例还引入了fpga内部时钟。数组排序方法在fpga内部时钟驱动下进行,fpga的排序动作,以及count计数都是由fpga内部时钟驱动。在一个时钟周期内,从待排序数组中选取数据作为第一数据并获取最终序号。即每一个时钟周期内,获取一个数据的最终序号。
[0088]
假设待排序数组为d={d0,d1

dn},计数器数值为cnt=0~n,第一数据为dx,使
用n+1个标志位flag记录dx与d0~dn的比较结果:
[0089]
dx>d0:flag[0]=1
[0090]
dx=d1:flag[1]=0 or 1(当cnt>1时flag[1]=1,当cnt<=1时flag[1]=0)
[0091]
dx<d2:flag[2]=0
[0092]
……
[0093]
dx<dn:flag[n]=0
[0094]
将n+1个标志位相加,即flag[0]+flag[1]+

+flag[n]=sum,sum值则为dx在升序排序后数组中的位置。
[0095]
本实施例以说明书附图2

4的实验结果予以论证。说明书附图2为待排序数组{7,2,1,3,0,5,4,2},说明书附图4为排序后的排序数组,说明书附图3为具体处理过程。根据实验结果可见,本实施例提供的数组排序方法,只需将数组遍历一次即可完成数组的排序,解决了现有技术的弊端。
[0096]
如说明书附图3所示。待排序数组为{d0,d1,d2,d3,d4,d5,d6,d7},横向为时间轴。以fpga内部时钟为时间轴,按照时间顺序推进,依次选取d0,d1,d2,d3,d4,d5,d6,d7作为第一数据。纵轴为标志位,标志位记录第一数据与各数据的比较结果。以d1作为第一数据为例,此时dx=2,计数器数值cnt=1,待排列数组中d1=d7=2,存在数据数值相同的情况。dx依次与d0,d1,d2,d3,d4,d5,d6,d7进行比较:
[0097]
(1)2<7,dx小于d0,标志位flag[0]=0;
[0098]
(2)2=2,dx等于d1,cnt=1,标志位flag[1]=0;
[0099]
(3)2>1,dx大于d2,标志位flag[2]=1;
[0100]
(4)2<3,dx小于d3,标志位flag[3]=0;
[0101]
(5)2>0,dx大于d4,标志位flag[4]=1;
[0102]
(6)2<5,dx小于d5,标志位flag[5]=0;
[0103]
(7)2<4,dx小于d6,标志位flag[6]=0;
[0104]
(8)2=2,dx等于d7,cnt<7,标志位flag[7]=0;
[0105]
sum=flag[0]+flag[1]+flag[2]+flag[3]+flag[4]+flag[5]+flag[6]+flag[7]=2
[0106]
则d2在排序后的数组中排名序号为2,如说明书附图4所示。
[0107]
本实施例提供了一种基于fpga的数组排序方法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n,解决了现有排序算法排序时间长、排序耗时不固定的问题。
[0108]
实施例2
[0109]
本发明实施例2公开了一种基于fpga的数组排序系统。在实施例1的基础上,将实施例1的方法系统化,具体结构如说明书附图5所示,具体方案如下:
[0110]
一种基于fpga的数组排序系统,应用于fpga数据压缩中,包括数组获取单元1、比较单元2和排序单元3。具体内容如下
[0111]
数组获取单元1:用于获取待排序数组,待排序数组中的数据按照初始顺序排列,按照初始顺序对数据进行编号,获取初始序号;
[0112]
比较单元2:用于按照初始顺序从待排序数组中依次选取数据作为第一数据,比较
第一数据与待排序数组中的数据的大小,通过标志位记录比较结果,标志位包括标志位数值和和标志位序号,标志位序号与初始序号对应,每个第一数据的标志位数量与待排序数组中的数据数量相同;
[0113]
排序单元3:用于将第一数据的标志位数值相加得到最终序号,最终序号即为第一数据在待排序数组中按升序排序的位置序号。
[0114]
其中,比较单元2还包括:
[0115]
将第一数据与待排序数组中的每一个数据进行比较,并通过标志位记录比较结果,
[0116]
当第一数据大于待排序数组中的某一数据时,标志位数值记为1;
[0117]
当第一数据小于待排序数组中的某一数据时,标志位数值记为0;
[0118]
当第一数据等于待排序数组中的某一数据时,判断第一数据的初始序号是否大于数据的初始序号:若是,则标志位数值记为1,若否,则标志位数值记为0。
[0119]
此外,通过数组排序系统获取fpga的计数器;
[0120]
每选取一次第一数据,计数器数值加1,每个第一数据对应一个计数器数值;
[0121]
当第一数据等于待排序数组中的某一数据时,判断计数器数值是否大于数据的初始序号:若是,则标志位数值记为1,若否,则标志位数值记为0。
[0122]
在本实施例中,数组排序系统在fpga内部时钟驱动下进行,fpga的排序动作,以及count技术都是由fpga内部时钟驱动。
[0123]
在一个时钟周期内,从待排序数组中选取数据作为第一数据并获取最终序号。
[0124]
本实施例提供了一种基于fpga的数组排序系统,在实施例1的基础上,将实施例1的方法系统化,使其更具实际应用性。
[0125]
实施例3
[0126]
本实施例在实施例1的基础上,提出了一种基于fpga的数据压缩方法。将实施例1的基于fpga的数组排序方法应用到具体的数据压缩中。
[0127]
本实施例利用fpga实现数据压缩算法,压缩算法中需要做大量的排序算法,传统排序算法复空间杂度与时间复杂度受数据影响比较大,不同的数据集进行排序时空间复杂度与时间复杂度均不相同。数据压缩方法过程中涉及到的数据排序,采用实施例1的方法进行排序。具体方案如下:
[0128]
101、获取待排序数组,待排序数组中的数据按照初始顺序排列,按照初始顺序对数据进行编号,获取初始序号;
[0129]
102、按照初始顺序从待排序数组中依次选取数据作为第一数据,比较第一数据与待排序数组中的数据的大小,通过标志位记录比较结果;标志位包括标志位数值和和标志位序号,标志位序号与初始序号对应,每个第一数据的标志位数量与待排序数组中的数据数量相同;
[0130]
103、将第一数据的标志位数值相加得到最终序号,最终序号即为第一数据在待排序数组中按升序排序的位置序号。
[0131]
本实施例提供了一种基于fpga的数据压缩方法,基于fpga实现压缩技术中,通过并行的方式处理排序算法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n,解决了fpga压缩算法中排序时间长,且
排序耗时不固定的问题。
[0132]
本发明提供了一种基于fpga的数据压缩方法、系统及数据压缩方法。基于fpga的数组排序方法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n,解决了现有排序算法排序时间长、排序耗时不固定的问题。基于fpga的数组排序系统,将上述方法系统化,使其更具实际应用性。基于fpga的数据压缩方法,利用fpga实现数据压缩,通过并行的方式处理排序算法,只需将数组遍历一次即可完成数组的排序,且时间复杂度不受数据集影响,每一次排序的时间复杂度固定为o=n。
[0133]
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1