CN102306187A - 二维表hash排序方法 - Google Patents
二维表hash排序方法 Download PDFInfo
- Publication number
- CN102306187A CN102306187A CN201110254893A CN201110254893A CN102306187A CN 102306187 A CN102306187 A CN 102306187A CN 201110254893 A CN201110254893 A CN 201110254893A CN 201110254893 A CN201110254893 A CN 201110254893A CN 102306187 A CN102306187 A CN 102306187A
- Authority
- CN
- China
- Prior art keywords
- hash
- divided block
- cube
- coordinate
- row
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种二维表hash排序方法,它是一种高效的二维表排序方法,且此方法不会改变二维表中属性值完全相同的记录的相对顺序,即此二维表排序方法具有稳定性。本发明包括以下步骤:(1)二维表初始化为链表而建立初始划分块;(2)在当前属性上将划分块中的元素hash到hash-cube中;(3)遍历hash-cube重构划分块;(4)检查是否所有元素个数大于1的划分块均被重构和在所有属性上是否完成元素个数大于1的划分块被重构操作,若是则终止,若否则在下一划分块或者下一属性上进行步骤(2)、(3)、(4)。
Description
技术领域
本发明涉及一种二维表排序的方法,尤其涉及一种二维离散属性表的hash排序方法。
背景技术
二维表是信息的主要表达形式之一,用于信息处理的数据集表示为一张由多个属性特征进行描述的二维表,每一维属性上取值为离散的数值或字符(对于连续型数据可以先进行离散化预处理为离散型数据),二维表中的一行为一条记录,对这类二维表进行排序是指对数据集的多个属性字段按照一定的优先级别进行排序操作,如升序、降序排列等。在计算机的许多领域中常常需要二维表排序操作,例如,在典型商业数据处理中数据项是记录,并且记录按照关键字进行排序,排序大大简化了查找或更新一个记录的过程,对于分类问题,对样本进行二维排序也是一项非常有益和必要的预处理过程。二维表排序是许多数据处理算法的重要步骤,先对记录集在指定的属性集上排序,再求此属性集对论域划分生成的等价类,能降低计算上下近似集、属性约简、核的复杂度。
现有的典型的二维表排序方法是二维表快速排序法,但是此方法依赖于数据的分布情况,当大部分数据呈倒序排列时,性能下降很快,而且不具有稳定性。另一方面,随着信息技术的飞速发展,数据***性增长,处理大数据集越来越普遍,此方法在数据规模非常大时性能不够理想。探寻高效的适应大数据集的二维表排序方法是非常有必要的。
发明内容
本发明所要解决的技术问题是提供一种二维表hash排序方法,它是一种高效的二维表排序方法,且此方法不会改变二维表中属性值完全相同的记录的相对顺序,即此二维表排序方法具有稳定性。为此,本发明采用以下技术方案:
二维表hash排序方法,包括以下步骤:
(1)、二维表初始化为链表而建立初始划分块;
(2)、在当前属性上将划分块中的元素hash到hash-cube中;
(3)、遍历hash-cube重构划分块;
(4)、检查是否所有元素个数大于1的划分块均被重构和在所有属性上是否完成元素个数大于1的划分块被重构操作,若是则终止,若否则在下一划分块或者下一属性上进行步骤(2)、(3)、(4)。
在采用上述技术方案的基础上,本发明还可采用以下进一步的技术方案:
在步骤(1)中,将二维表记录存放在链表中,链表节点包括:二维表中记录的初始地址;指向下一个划分块的指针;指向同一划分块中下一个元素的指针。
在步骤(2)中,使用的hash方法步骤为:查找在当前属性上划分块中的最小和最大元素amin,amax;计算hash-cube的平面矩阵的维度d,即行和列的大小,计算划分块中每一个数据元素在hash-cube中的位置,构建划分块的hash-cube。
在hash-cube中,使用i、j、k分别表示hash-cube的行、列、层坐标,d为hash-cube的平面矩阵维度,x为划分块中待排序的数据元素,amin、amax分别为在当前属性上划分块中的最小、最大元素,数据元素为记录在当前属性上的属性值,[]表示向上取整。
计算每一个数据元素在hash-cube中的位置包括以下步骤:根据公式i=[(x-amin)/d]计算元素x在hash-cube中的行坐标值;根据公式j=(x-amin)%d计算元素x在hash-cube中的列坐标值;每一实数对(i,j)对应一个计数器kij,初始值为0,若(i,j)已经出现过,则kij=kij+1,kij为层坐标值。kij实质上标识了hash-cube中的平面矩阵层次,每一层平面矩阵除了层次标识不同,行数和列数都是相同的,平面矩阵中的行数据元素按照由左至右的顺序增大,列数据元素按照由上至下的顺序增大,且任一数据元素大于所有列坐标比它小的数据元素。每一层矩阵平面中的一个方格只存放一个数据元素,且所有方格中的数据元素不重复,划分块中所有不重复的元素都能在一个这样的矩阵平面中找到相应的位置。Hash-cube中以第0层矩阵平面为基准,划分块中的所有不重复元素都映射到此矩阵平面上,而重复的元素依次映射到下一层矩阵平面上。
在步骤(3)中重构划分块包括:按照层、行、列的顺序遍历hash-cube;坐标i和坐标j相同,只有坐标k不同的元素属于同一划分块;划分块之间的顺序由坐标i和坐标j标识;i、j、k分别表示hash-cube的行、列、层坐标。
Hash表是由数组、表和特定数学方法相结合,构造的一种能够有效支持动态数据存储和提取的结构,在数据存储和信息安全领域有重要应用,通过构造合适的hash函数可在线性时间内完成大量数据的存取映射操作,本发明中利用这一特性构造排序方法,实现一个线性时间复杂度的二维离散数据表hash排序方法,效率优于目前普遍使用的基于快速排序方法的二维表排序方法。二维表hash排序方法平均时间复杂度可降为O(m×n)(m是二维表的关键字个数,n是二维表的记录数),且在数据分布非均匀的情况下也能取得较好的计算效率,在数据饱合度变化的情况下,性能不受影响。该方法具有稳定性,适用于带有时序性的数据挖掘和序列机器学习等问题和海量数据处理中的排序问题研究。
本发明方法中,将划分块中的元素hash到一个hash-cube中,按照一定的次序遍历hash-cube即得到排好序的数据序列,此方法既适合于二维表排序也适合一维数据序列。Hash-cube为多层矩阵平面叠加的立方体,每一层矩阵平面由行和列划分成的方格存放数据元素,用i,j表示元素的行坐标和列坐标,k表示矩阵层次,(i,j,k)唯一标示了数据元素在hash-cube中的位置。Hash-cube中的元素是按照一定的次序存放的,通过hash-cube实现了从无序数据序列到有序数据序列的变换,按照层、行、列的顺序遍历hash-cube将立方体中的数据元素变换成有序的数据序列。
二维属性表排序等同于一个信息***在全部属性集上的有序划分过程。本发明方法采用广度优先和划分的思想,对每一维属性采用一维Hash排序进行处理,每调用一次一维Hash排序,数据集合被分割为更小的块,然后在每一块上分别在下一属性上调用一维Hash排序,直到在最后一个属性上排序完毕或者当前所有划分块中只有一个元素。排序时需要频繁的对划分的每一块进行Hash,本发明方法中排序时使用静态链表存放记录的属性数据,记录之间的次序由指针指示。Hash后形成的划分块是有序的,为了保存这种有序性,链表节点包含三个元素:每一条记录的初始地址;指向下一个划分块的指针;指向同一划分块中下一个元素的指针。
struct Node{
int*element; //值域中存放的是记录在内存中的地址
Node*next_Category; //指向下一划分块的的指针
Node*next_element; //指向同一划分块中下一个元素的指针
附图说明
图1是本发明实施例中将划分块中的元素hash到hash-cube中的方法流程图。
图2是本发明实施例中待排序序列的hash-cube示意图。
图3是本发明实施例中的二维hash排序方法流程图。
图4是本发明实施例中二维表初始化为链表而建立初始划分块的示意图。
图5至图7是本发明实施例中二维表在每个属性上的排序结果示意图。
具体实施方式
为了使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作具体详细的说明。应当理解,此处所述的具体实施例仅用于解释本发明,并不用于限定本发明。
二维表排序是一维排序的引申,在二维表hash排序方法中需要递归调用一维hash排序方法,一维hash排序的待排序序列等同于二维表hash排序方法中划分块的元素序列,现将本发明实施例中的hash方法介绍如下。
参照图1,是本发明实施例中将划分块中的元素hash到hash-cube中的方法流程图。
步骤101,查找在当前属性上划分块中的最小和最大元素amin,amax。
在当前属性上划分块中的所有元素介于最小和最大元素之间(包括最小、最大元素),若无重复数据,所有元素可以按照一定的顺序映射到方阵中,在行和列划分成的方格中存放数据。
步骤102,计算hash-cube的平面方阵的维度d。
步骤103,计算划分块中每一个数据元素在hash-cube中的位置,构建划分块的hash-cube。
一般情况下在当前属性上划分块中的元素有重复,若将划分块中的元素映射到平面方阵中,并不是一一映射,而是多对一映射。在hash-cube中,重复的元素存放在下一层平面方阵中,划分块中的元素可以唯一的hash到确定位置。需要进行hash的元素x在hash-cube中的坐标(i,j,k)为,i=[(x-amin)/d],j=(x-amin)%d,k=kij+1(kij初始值为0,若(i,j)已经出现过,kij自增1)。
举个例子,一个序列A={5,5,3,4,5,4},每一元素在hash-cube中的坐标如表1,由序列A构成的hash-cube如附图2。
序列A中的元素 | Hash-cube中的坐标 |
5 | (1,0,0) |
5 | (1,0,1) |
3 | (0,0,0) |
4 | (0,1,0) |
5 | (1,0,2) |
4 | (0,1,1) |
表1
参照图3,是本发明实施例中二维表hash排序方法流程图。
二维表Hash排序方法为:
1、初始化链表L、ri,L初始化为只有一个划分的链表,ri=r0。
2、遍历链表L。
2.1若划分块中元素个数大于1,扫描此划分块中的元素,得到rimax,rimin并计算d值,否则转到2.4。
2.2对划分块中的每一个元素执行以下步骤,映射到hash-cube,用数组a[d][d][n]表示。
2.2.1初始化计数数组count[d][d]=0(count数组存放元素的k坐标)
2.2.2计算出映射的行列i,j,i=r/d,j=r%d.
2.2.3count[i][j]++
2.2.4把存储当前元素的节点放到a[i][j][count[i][j]-1](存放链表节点为了重构链表)
2.3重构链表。遍历数组count[d][d],并根据数组count[d][d]的计数遍历hash-cube。
2.3.1当count[i][j]!=0时,执行如下操作,否则不执行。
2.3.2如果count[i][j]=1,把a[i][j][0]作为下一划分块***到链表中,如果count[i][j]>1,a[i][j][0]作为下一划分块***到链表L中,a[i][j][1]至a[i][j][cout[i][j]-1]作为同一划分块的下一元素***到链表中。
2.4对下一划分块重复步骤2.1、2.2、2.3,直到处理完所有划分块。
3、对下一属性ri+1重复步骤2,直到按照属性rm排序完毕或者每一个划分块中只有一个元素。
步骤301,二维表初始化为链表而建立初始划分块。
本发明实施例中,初始化时将待排序二维表中的所有记录划分为一个等价类,即所有记录之间的顺序是没有区分的,按照他们在二维表中的顺序放置在链表中。链表节点包括二维表中记录的初始地址;指向下一个划分块的指针;指向同一划分块中下一个元素的指针。链表节点的值域存放的是记录在内存中的地址,这样可以在排序时更快的查找到记录,初始化时,所有节点的next_Category为NULL,使用next_element指针将二维表中的记录构成一个链表。为了更好的阐述二维表hash排序方法,举一个简单的例子进行说明,表2是一个具有3个属性8条记录的二维表,所有属性均为int类型,图4中的401至408为8条记录在内存中的存放位置,411为初始化后的链表。下面以记录x1为例说明在某一属性上排序时如何定位记录属性值,变量r中存放的是偏移量,初始值为0,即图4中的410,节点409中的值域存放的是记录x1在内存中的地址4000,4000+0×2是内存中记录x1第一个属性的位置,当要在第二个属性上排序时,变量r中的偏移量值加1,通过节点409值域的值和偏移量可以计算出内存中记录x1第二个属性的位置,为4000+1×2。
记录 | r0 | r1 | r2 |
x1 | 4 | 2 | 5 |
x2 | 4 | 2 | 5 |
x3 | 3 | 5 | 2 |
x4 | 3 | 5 | 4 |
x5 | 5 | 4 | 3 |
x6 | 2 | 2 | 4 |
x7 | 3 | 4 | 2 |
x8 | 5 | 3 | 5 |
表2
步骤302,检查划分块中的元素个数是否大于1。
如果划分块中的元素个数为1,表示此划分块中只有一条记录,不需要与其它记录进行比较、排序,只有划分块中的元素多于1个,才需要在下一属性上将无法区分顺序的记录进行排序。图5是在属性r0上的排序结果,其中划分块501、502、503中的元素个数多于1,即这三个划分块中记录的r0属性值分别相等,无法区分顺序,需要在r1属性上再进行排序,同理,图6中的划分块601、602需要在属性r2上在进行排序。
步骤303,在当前属性上将划分块中的元素hash到hash-cube中。
此步骤采用一维hash方法,首先对待排序记录的当前属性值由公式计算出它在hash-cube中的坐标,然后把记录hash到hash-cube中,hash-cube与图2所示的hash-cube结构相同。
步骤304,遍历hash-cube重构划分块。
重构划分块时,坐标i和坐标j相同只有坐标k不同的元素属于同一划分块,否则不属于同一划分块,划分块之间的顺序由坐标i和坐标j标识。
步骤305,下移一个划分块,并检查最后一个划分块是否已经重构。
如果是则在当前属性上对所有划分块的工作结束,否则循环对划分块进行步骤302、303、304。
步骤306,后移一个属性,并检查在最后一个属性上是否已经完成划分块重构。
如果是则排序结束,否则在下一属性上循环对划分块进行步骤302、303、304、305。图5、6、7分别为在属性r0、r1、r2上的排序结果示意图。
Claims (5)
1.二维表hash排序方法,其特征在于,它包括以下步骤:
(1)、二维表初始化为链表而建立初始划分块;
(2)、在当前属性上将划分块中的元素hash到hash-cube中;
(3)、遍历hash-cube重构划分块;
(4)、检查是否所有元素个数大于1的划分块均被重构和在所有属性上是否完成元素个数大于1的划分块被重构操作,若是则终止,若否则在下一划分块或者下一属性上进行步骤(2)、(3)、(4)。
2.根据权利要求1所述的方法,其特征在于,链表节点包括:
二维表中记录的初始地址;
指向下一个划分块的指针;
指向同一划分块中下一个元素的指针。
4.根据权利要求3所述的方法,其特征在于,所述“计算划分块中每一个数据元素在hash-cube中的位置”包括以下步骤:
根据公式i=[(x-amin)/d]计算元素x在hash-cube中的行坐标值;
根据公式j=(x-amin)%d计算元素x在hash-cube中的列坐标值;
每一实数对(i,j)对应一个计数器kij,初始值为0,若(i,j)已经出现过,则kij=kij+1,kij为层坐标值;
i、j、k分别表示hash-cube的行、列、层坐标,d为hash-cube的平面矩阵维度,x为划分块中待排序的数据元素,amin、amax分别为当前属性上划分块中的最小、最大元素,[]表示向上取整。
5.根据权利要求1所述的方法,其特征在于,重构划分块包括:
按照层、行、列的顺序遍历hash-cube;
坐标i和坐标j相同,只有坐标k不同的元素属于同一划分块;
划分块之间的顺序由坐标i和坐标j标识;
i、j、k分别表示hash-cube的行、列、层坐标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110254893A CN102306187A (zh) | 2011-08-31 | 2011-08-31 | 二维表hash排序方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110254893A CN102306187A (zh) | 2011-08-31 | 2011-08-31 | 二维表hash排序方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102306187A true CN102306187A (zh) | 2012-01-04 |
Family
ID=45380049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110254893A Pending CN102306187A (zh) | 2011-08-31 | 2011-08-31 | 二维表hash排序方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102306187A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942343A (zh) * | 2014-05-12 | 2014-07-23 | 中国人民大学 | 一种面向哈希连接的数据存储优化方法 |
CN105260773A (zh) * | 2015-09-18 | 2016-01-20 | 华为技术有限公司 | 一种图像处理装置以及图像处理方法 |
CN107423422B (zh) * | 2017-08-01 | 2019-09-24 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040034616A1 (en) * | 2002-04-26 | 2004-02-19 | Andrew Witkowski | Using relational structures to create and support a cube within a relational database system |
US7027446B2 (en) * | 2001-07-18 | 2006-04-11 | P-Cube Ltd. | Method and apparatus for set intersection rule matching |
US20060125827A1 (en) * | 2004-12-15 | 2006-06-15 | Microsoft Corporation | System and method for interactively linking data to shapes in a diagram |
US7171427B2 (en) * | 2002-04-26 | 2007-01-30 | Oracle International Corporation | Methods of navigating a cube that is implemented as a relational object |
US20100094885A1 (en) * | 2004-06-30 | 2010-04-15 | Skyler Technology, Inc. | Method and/or system for performing tree matching |
CN101777073A (zh) * | 2010-02-01 | 2010-07-14 | 浪潮集团山东通用软件有限公司 | 一种基于xml格式的数据转换方法 |
-
2011
- 2011-08-31 CN CN201110254893A patent/CN102306187A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7027446B2 (en) * | 2001-07-18 | 2006-04-11 | P-Cube Ltd. | Method and apparatus for set intersection rule matching |
US20040034616A1 (en) * | 2002-04-26 | 2004-02-19 | Andrew Witkowski | Using relational structures to create and support a cube within a relational database system |
US7171427B2 (en) * | 2002-04-26 | 2007-01-30 | Oracle International Corporation | Methods of navigating a cube that is implemented as a relational object |
US20100094885A1 (en) * | 2004-06-30 | 2010-04-15 | Skyler Technology, Inc. | Method and/or system for performing tree matching |
US20060125827A1 (en) * | 2004-12-15 | 2006-06-15 | Microsoft Corporation | System and method for interactively linking data to shapes in a diagram |
CN101777073A (zh) * | 2010-02-01 | 2010-07-14 | 浪潮集团山东通用软件有限公司 | 一种基于xml格式的数据转换方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942343A (zh) * | 2014-05-12 | 2014-07-23 | 中国人民大学 | 一种面向哈希连接的数据存储优化方法 |
CN103942343B (zh) * | 2014-05-12 | 2017-03-08 | 中国人民大学 | 一种面向哈希连接的数据存储优化方法 |
CN105260773A (zh) * | 2015-09-18 | 2016-01-20 | 华为技术有限公司 | 一种图像处理装置以及图像处理方法 |
CN105260773B (zh) * | 2015-09-18 | 2018-01-12 | 华为技术有限公司 | 一种图像处理装置以及图像处理方法 |
CN107423422B (zh) * | 2017-08-01 | 2019-09-24 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3308303B1 (en) | Mechanisms for merging index structures in molap while preserving query consistency | |
CN104679778B (zh) | 一种搜索结果的生成方法及装置 | |
CN104199827B (zh) | 基于局部敏感哈希的大规模多媒体数据的高维索引方法 | |
CN102722531B (zh) | 一种云环境中基于分片位图索引的查询方法 | |
CN104199986A (zh) | 基于hbase和geohash的矢量数据空间索引方法 | |
CN104112011B (zh) | 一种海量数据提取的方法及装置 | |
CN103577440A (zh) | 一种非关系型数据库中的数据处理方法和装置 | |
CN102609490B (zh) | 一种面向列存储dwms的b+树索引方法 | |
CN106445416B (zh) | 一种数据记录的存储、查询和检索的方法及装置 | |
CN103745008A (zh) | 一种大数据索引的排序方法 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及*** | |
CN106055621A (zh) | 一种日志检索方法及装置 | |
CN104809182A (zh) | 基于动态可***Bloom Filter的网络爬虫URL去重方法 | |
CN101329676A (zh) | 一种数据并行抽取方法、装置和数据库*** | |
CN102737123B (zh) | 一种多维数据分布方法 | |
CN104111936A (zh) | 数据查询方法和*** | |
CN103902701A (zh) | 一种数据存储***和存储方法 | |
CN102495834A (zh) | 基于内存映像的增量数据清洗方法 | |
CN101299213A (zh) | N维聚类排序记录树空间索引方法 | |
CN102411632B (zh) | 基于链表的内存数据库页式存储方法 | |
Siddique et al. | Comparing synopsis techniques for approximate spatial data analysis | |
CN101620600A (zh) | 一种海量数据的处理方法 | |
CN102306187A (zh) | 二维表hash排序方法 | |
CN100399338C (zh) | 一种数据记录处理方法 | |
CN107239454A (zh) | 基于文本数据库的检索方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120104 |