CN1790337A - 基于位的排序方法和装置 - Google Patents

基于位的排序方法和装置 Download PDF

Info

Publication number
CN1790337A
CN1790337A CN 200510132879 CN200510132879A CN1790337A CN 1790337 A CN1790337 A CN 1790337A CN 200510132879 CN200510132879 CN 200510132879 CN 200510132879 A CN200510132879 A CN 200510132879A CN 1790337 A CN1790337 A CN 1790337A
Authority
CN
China
Prior art keywords
value
integer
record
storage space
key word
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.)
Granted
Application number
CN 200510132879
Other languages
English (en)
Other versions
CN100383791C (zh
Inventor
艾国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CNB2005101328796A priority Critical patent/CN100383791C/zh
Publication of CN1790337A publication Critical patent/CN1790337A/zh
Application granted granted Critical
Publication of CN100383791C publication Critical patent/CN100383791C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

对一组互不相同的整数排序的方法,包括:估计整数的最大值和最小值;提供一个位数不小于最大值与最小值之差的连续存储空间,将所述连续存储空间的所有位置为第一值,所述连续存储空间具有起始位;选择一个不小于最小值且不大于最大值的整数作为参考值;对于所述一组整数中的每个整数,将所述连续存储空间中、相对于所述起始位的增量位数等于该整数相对于所述参考值之增量的位置为第二值;以及,对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组整数中的一个整数,确定该整数的排序位次为该位在所有被置为第二值的位中所处的位次。并提供基于关键字对记录排序的方法。主要优点是复杂度仅为0(n)。

Description

基于位的排序方法和装置
发明领域
本发明涉及排序方法及装置。
背景技术
排序是一种基本且常用的算法。所谓排序,通常是指对文件中的记录进行整理,使之按关键字递增(或递减)的次序排列。排序对象,即文件,由一组记录组成。每个记录由若干个数据项(或域)组成,其中有一个数据项可用来标识记录,称为关键字项。用来作为排序运算依据的关键字项可以是数字类型,也可以是字符类型,其选取应根据具体情况而定,其值称为关键字。
随着计算机的发展,排序算法层出不穷。常用的有,例如,起泡排序、直接插入排序、简单选择排序、快速排序和堆排序等经典排序算法。大多数排序算法都涉及两个基本操作:比较关键字的大小;和,改变指向记录的指针或移动记录本身,其中后者的实现依赖于待排序记录的存储方式。大多数排序算法的时间开销主要来源于关键字之间的比较和记录的移动。对于有些排序算法,其执行时间不仅取决于问题的规模,还取决于实例中数据的状态。因此,在实际进行排序时,应根据具体情况选择合适的排序算法。
衡量算法性能的一个主要标准是时间复杂度,一般用0方法表示。例如,起泡排序的平均时间复杂度为0(n2),快速排序的平均时间复杂度为0(nlgn)。
发明内容
本发明提出了一种基于位的排序方法和装置。
根据本发明的第一方面,提供了对一组互不相同的整数排序的方法,包括:
估计整数的最大值和最小值;
提供一个位数不小于最大值与最小值之差的连续存储空间,将所述连续存储空间的所有位置为第一值,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值;
对于所述一组整数中的每个整数,将所述连续存储空间中、相对于所述起始位的增量位数等于该整数相对于所述参考值之增量的位置为第二值;以及,
对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组整数中的一个整数,确定该整数的排序位次为该位在所有被置为第二值的位中所处的位次。
优选的是,所述参考值是最小值。
根据本发明的第二方面,提供了一种排序装置,用于按照第一方面所述的方法对一组互不相同的整数排序。
根据本发明的第三方面,提供了对一组记录排序的方法,所述一组记录中的每个记录具有能唯一识别该记录、且为整数的关键字,该方法包括:
估计关键字的最大值和最小值;
提供一个位数不小于最大值与最小值之差的连续存储空间,将所述连续存储空间的所有位置为第一值,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值;
对于所述一组记录中的每个记录的关键字,将所述连续存储空间中、相对于所述起始位的增量位数等于该关键字相对于所述参考值之增量的位置为第二值,将该关键字所识别的记录与该位对应;以及,
对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组记录中的一个记录的关键字,确定该关键字的排序位次为该位在所有被置为第二值的位中所处的位次,将该关键字与对应于该位的记录对应。
优选的是,所述参考值是最小值。
根据本发明的第四方面,提供了一种对一组记录排序的排序装置,用于实现第三方面所述的方法。
本发明的主要优点是时间复杂度仅为0(n)。附加优点是,在某些情况下,可节省存储空间。
附图简述
仅以举例的方式,参照附图更详细地描述本发明的优选实施方案,其中:
图1示出了根据本发明的一个优选实施方案的流程图;
图2a-2g示出了利用图1的流程图对一个实例排序的过程;和
图3示意性图解了根据本发明对记录排序的过程。
具体实施方式
首先通过一个具体例子来说明本发明的基本原则。
假设某班一共有15名学生,其中六名学生要补考英语,他们的学号分别为10、8、1、5、4、9,现在希望借助计算机根据他们学号的次序安排他们补考时的座位次序。为此,计算机要对这六名学生的学号进行排序。容易理解的是,待排序的学号均为整数、且互不相同。需要说明的是,该实例可能并未体现出本发明的一般应用,不过给出这个例子的目的仅在于清楚地描述本发明的基本原则。稍后将结合一般性的例子对本发明作进一步描述。
根据本发明的一个优选实施方案,参照图1所示的流程图进行排序。首先,估计待排序整数的最大值Max和最小值Min。在这个例子中,根据该班共15名学生且学号一般会从1开始,可估计待排序整数的最大值为Max=15、最小值为Min=1。
然后,提供一个位数大于最大值与最小值之差的连续存储空间,将所有位置“0”。在这个例子中,最大值与最小值之差为(Max-Min)=14。鉴于计算机中的存储空间一般是以字节(Byte)为单位的,我们可确定一个16位(Bit)的连续存储空间,如图2a所示。
接下来,对于每个整数,将连续存储空间中、相对于起始位的增量位数等于该整数相对于最小值之增量的位置“1”。在这个例子中,对于第一个整数10,其相对于最小值Min的增量为10-1=9,于是将连续存储空间中相对于起始位的增量位数等于9的位,即第(1+9)=10位,置“1”,如图2b所示;对于第二个整数8,其相对于最小值的增量为8-1=7,于是将连续存储空间中相对于起始位的增量位数等于7的位,即第(1+7)=8位,置“1”,如图2c所示;依此类推,对于第三、四、五、六个整数:1、5、4、9,分别将第(1+(1-Min))=1位、第(1+(5-Min))=5位、第(1+(4-Min))=4位、第(1+(9-Min))=9位置“1”,如图2d-2g所示。
然后,从第一位开始遍历连续存储空间。若当前位为“1”,则将当前位相对于起始位的增量位数与最小值之和确定为所排序整数中的一个整数,并将到目前为止遍历到的“1”的个数确定为该整数的排序位次。就这个例子而言,第一位是“1”且是遍历到的第一个“1”,第一位相对于起始位的增量位数是(1-1)=0,可确定排好序后的第一个整数相对于最小值的增量为0,即第一个整数为(Min+0)=1;第四位是“1”且是遍历到的第二个“1”,第四位相对于起始位的增量位数是(4-1)=3,可确定排好序后的第二个整数相对于最小值的增量为3,即第二个整数为(Min+3)=4;类似地,第5位、第8位、第9位、第10位均为“1”,可确定排好序后的第三、四、五、六个整数分别相对于最小值的增量位数为(5-1)=4、(8-1)=7、(9-1)=8、(10-1)=9,即第三、四、五、六个整数分别为(Min+4)=5、(Min+7)=8、(Min+8)=9、(Min+9)=10。这样,就得到了这6个整数即学号的排序结果:1、4、5、8、9、10。
可替换地,在这一遍历步骤中,可从连续存储空间的最后一位进行遍历,其它过程类似。容易理解的是,利用这种方式遍历,将得到这6名学生的学号的递减排序结果:10、9、8、5、4、1。
实际上,针对所有排序整数进行上述置“1”操作后,连续存储空间中存储的位流和用作置“1”操作参考的最小值一起包含了有关所有排序整数的值及排序次序的信息,即已经完成了排序。因此,根据具体情况,就排序而言,上述遍历步骤可以不是必要的,而是可以在后来需利用排序结果时进行,例如在查询、检索等时进行。
需要说明的是,在这个优选实施方案中,通过置“1”将待排序整数映射到所提供的连续存储空间中的操作是相对所估计的最小值进行的,通常这也是优选的。然而,就本发明的实质而言,该操作也可相对除最小值以外的其它整数进行。当然,这个用作参考的整数应合适,至少应介于所估计的最小值与最大值之间,以便能将待排序整数映射到所提供的连续存储空间的范围内,即被确定要置“1”的位不超出连续存储空间的范围,从而避免空间不够用。另外,对于所提供的连续存储空间,最初可将所有位置“1”,之后进行映射操作时将有关位置“0”。
下面通过对记录排序来对本发明进行描述。例如,一个学生管理系统的数据库中有n条记录,每条记录有一个唯一的关键字,这个关键字一般是从1开始的。由于经常对数锯库进行修改、删除和添加,所以数据库中的关键字一般并不是顺序和连续的。但我们经常要查询某个关键字的记录,我们通常会按照关键字对数据库中的记录进行排序,以便之后能以很快的速度进行查询。
按照之前描述的方式,假如我们估计这个学校有1000名学生,则可推定关键字的最小值为Min=1,最大值Max=1000。可开辟一块包含至少1000个位的连续内存,将该连续内存全部置“0”。然后针对各个待排序记录的关键字将有关位置“1”。这样处理后得到的部分连续内存如图3的上部所示。
注意到,由于排序对象是记录,对关键字进行排序时,还应对关键字所对应的记录进行适当的操作,以记录它们之间的对应关系。在根据本发明的一种优选实施方案中,为实现这一点,可开辟另一块连续内存(为方便叙述,在下文中将该另一块连续内存称为第二连续内存,将前面提到的连续内存称为第一连续内存),用于存放记录的地址,并将第一和第二连续内存对应起来。目前,记录的地址一般是32位的。鉴于此,使第二连续内存的每32位依次与第一连续内存中的1个位对应:第二连续内存中的第一个32位与第一连续内存中的第一位对应;第二连续内存中的第二个32位与第一连续内存中的第二位对应;…;第二连续内存中的最后一个32位与第一连续内存中的最后一位对应。在开辟第二连续内存时,通过使第二连续内存的位数是第一连续内存的位数的32倍,即可实现两块连续内存之间的这种对应。
现在详细说明如何保持关键字与相应记录之间的对应关系。当将第一连续内存中的第m位置“1”时,将该置“1”操作所针对的特定关键字所对应的记录的地址存放在第二连续内存中的第m个32位中。例如,当将图3上部所示的第一连续内存中的第4个位置“1”时,将该置“1”操作所针对的关键字所对应的记录的地址存放在图3下部所示的第二连续内存中的第4个32位中。需要说明的是,图3中的箭头是示意性的,仅表示第一连续内存与第二连续内存之间存在对应关系。针对所有关键字进行上述置“1”操作后,从起始位开始遍历第一连续内存,可还原出各个记录的关键字。具体过程参考上文。需要附加说明的操作是,当基于第一连续内存中的某个被置为“1”的位还原出一个关键字时,还应根据第二连续内存中的、与该被置为“1”的位对应的一个32位中存放的地址,将该地址所指向的记录与所还原的关键字对应起来。这样,还原所有关键字并将各个关键字与相应的记录对应起来之后,可释放第一和第二连续内存。
可替换地,可将开辟的第二连续内存用来直接存储记录的内容。
基于本发明的原则,还可设想许多其他应用。下面给出一个例子。目前,在计算机中,整数一般需要用32位表示。假设要存储一组互不相同的整数,而该组整数的平均间隔较小,例如,小于32。在这种情况下,可利用本发明以位流的形式存储这组整数。具体而言,以上文描述的方式,将待存储的各个整数依次映射到一连续存储空间中,得到一个位流,并记录作为该映射操作参考的参考值。这样位流和参考值就共同包含了有关这些整数的信息。以这种方式存储的好处是能节省存储空间。
尽管描述了本发明的优选实施方案,但通过阅读和掌握本发明的原则和教导,本领域的技术人员可对这里公开的实施方案进行各种改型。因而,本发明的范围由附在这里的权利要求限定。

Claims (8)

1.对一组互不相同的整数排序的方法,包括:
估计整数的最大值和最小值;
提供一个位数不小于最大值与最小值之差的连续存储空间,将所述连续存储空间的所有位置为第一值,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值;
对于所述一组整数中的每个整数,将所述连续存储空间中、相对于所述起始位的增量位数等于该整数相对于所述参考值之增量的位置为第二值;以及,
对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组整数中的一个整数,确定该整数的排序位次为该位在所有被置为第二值的位中所处的位次。
2.根据权利要求1所述的方法,其特征在于,所述参考值是最小值。
3.一种排序装置,用于对一组互不相同的整数排序,该装置包括:
估计整数的最大值和最小值的装置;
提供一个位数不小于最大值与最小值之差的连续存储空间并将所述连续存储空间的所有位置为第一值的装置,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值的装置;
映射装置,对于所述一组整数中的每个整数,将所述连续存储空间中、相对于所述起始位的增量位数等于该整数相对于所述参考值之增量的位置为第二值;以及,
还原装置,对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组整数中的一个整数,确定该整数的排序位次为该位在所有被置为第二值的位中所处的位次。
4.根据权利要求3所述的装置,其特征在于,所述参考值是最小值。
5.对一组记录排序的方法,所述一组记录中的每个记录具有能唯一识别该记录、且为整数的关键字,该方法包括:
估计关键字的最大值和最小值;
提供一个位数不小于最大值与最小值之差的连续存储空间,将所述连续存储空间的所有位置为第一值,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值;
对于所述一组记录中的每个记录的关键字,将所述连续存储空间中、相对于所述起始位的增量位数等于该关键字相对于所述参考值之增量的位置为第二值,将该关键字所识别的记录与该位对应;以及,
对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组记录中的一个记录的关键字,确定该关键字的排序位次为该位在所有被置为第二值的位中所处的位次,将该关键字与对应于该位的记录对应。
6.根据权利要求5所述的方法,其特征在于,所述参考值是最小值。
7.一种排序装置,用于对一组记录排序,所述一组记录中的每个记录具有能唯一识别该记录、且为整数的关键字,该装置包括:
估计关键字的最大值和最小值的装置;
提供一个位数不小于最大值与最小值之差的连续存储空间并将所述连续存储空间的所有位置为第一值的装置,所述连续存储空间具有起始位;
选择一个不小于最小值且不大于最大值的整数作为参考值的装置;
映射装置,对于所述一组记录中的每个记录的关键字,将所述连续存储空间中、相对于所述起始位的增量位数等于该关键字相对于所述参考值之增量的位置为第二值,将该关键字所识别的记录与该位对应;以及,
还原装置,对于每个被置为第二值的位,确定该位相对于所述起始位的增量位数与所述参考值之和为所述一组记录中的一个记录的关键字,确定该关键字的排序位次为该位在所有被置为第二值的位中所处的位次,将该关键字与对应于该位的记录对应。
8.根据权利要求7所述的装置,其特征在于,所述参考值是最小值。
CNB2005101328796A 2005-12-27 2005-12-27 基于位的排序方法和装置 Expired - Fee Related CN100383791C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005101328796A CN100383791C (zh) 2005-12-27 2005-12-27 基于位的排序方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005101328796A CN100383791C (zh) 2005-12-27 2005-12-27 基于位的排序方法和装置

Publications (2)

Publication Number Publication Date
CN1790337A true CN1790337A (zh) 2006-06-21
CN100383791C CN100383791C (zh) 2008-04-23

Family

ID=36788189

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101328796A Expired - Fee Related CN100383791C (zh) 2005-12-27 2005-12-27 基于位的排序方法和装置

Country Status (1)

Country Link
CN (1) CN100383791C (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101625376B (zh) * 2008-07-08 2011-07-20 华硕电脑股份有限公司 缩小搜寻区域特征值的方法
CN104199895A (zh) * 2014-08-26 2014-12-10 河南中医学院 一种基于双体内存系统的大数据实时排序处理器
CN110020954A (zh) * 2019-03-26 2019-07-16 阿里巴巴集团控股有限公司 一种收益分配方法、装置及计算机设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5907842A (en) * 1995-12-20 1999-05-25 Intel Corporation Method of sorting numbers to obtain maxima/minima values with ordering
US20020147717A1 (en) * 2001-01-26 2002-10-10 Barros Mark Alexander Communication device, system, method, and computer program product for sorting data based on proximity
US6615211B2 (en) * 2001-03-19 2003-09-02 International Business Machines Corporation System and methods for using continuous optimization for ordering categorical data sets
CN1530852A (zh) * 2003-03-10 2004-09-22 磊 杨 基于概率分布的计算机排序技术
US20040220941A1 (en) * 2003-04-30 2004-11-04 Nielson Mark R. Sorting variable length keys in a database

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101625376B (zh) * 2008-07-08 2011-07-20 华硕电脑股份有限公司 缩小搜寻区域特征值的方法
CN104199895A (zh) * 2014-08-26 2014-12-10 河南中医学院 一种基于双体内存系统的大数据实时排序处理器
CN104199895B (zh) * 2014-08-26 2017-04-26 河南中医学院 一种基于双体内存系统的大数据实时排序处理器
CN110020954A (zh) * 2019-03-26 2019-07-16 阿里巴巴集团控股有限公司 一种收益分配方法、装置及计算机设备
CN110020954B (zh) * 2019-03-26 2023-09-05 创新先进技术有限公司 一种收益分配方法、装置及计算机设备

Also Published As

Publication number Publication date
CN100383791C (zh) 2008-04-23

Similar Documents

Publication Publication Date Title
US4991087A (en) Method of using signature subsets for indexing a textual database
US6014733A (en) Method and system for creating a perfect hash using an offset table
US5218700A (en) Apparatus and method for sorting a list of items
US5497485A (en) Method and apparatus for implementing Q-trees
AU2005255348B2 (en) Data collection cataloguing and searching method and system
US20060288002A1 (en) Reordered search of media fingerprints
CN100468402C (zh) 一种数据存储及查询方法
US6460046B1 (en) Method and system for forming, storing and using sets of data values
US6725223B2 (en) Storage format for encoded vector indexes
CN87100829A (zh) 用于检索的方法和装置
EP1265160A2 (en) Data structure
CN1991826A (zh) 电子书检索系统及方法
US7822700B2 (en) Method for using lengths of data paths in assessing the morphological similarity of sets of data by using equivalence signatures
US20070271289A1 (en) Method and apparatus for compressing a data set
US7584173B2 (en) Edit distance string search
CN108509505A (zh) 一种基于分区双数组Trie的字符串检索方法及装置
CN1790337A (zh) 基于位的排序方法和装置
CN1282108C (zh) 消除指针存储以减少ram大小的散列技术
US6901476B2 (en) Variable key type search engine and method therefor
CN104021223A (zh) 一种集群数据库测点的访问方法及装置
JP2007034878A (ja) 情報処理方法、情報処理装置および情報処理プログラム
CN109857366A (zh) 基于外存的插入排序方法、系统、设备及存储介质
US20080288495A1 (en) Fast select for fetch first n rows with order by
CN108256064A (zh) 一种数据搜索方法和装置
CN109446162A (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
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080423

Termination date: 20111227