CN101441637A - 对已排序的字符串序列再排序的方法及装置 - Google Patents
对已排序的字符串序列再排序的方法及装置 Download PDFInfo
- Publication number
- CN101441637A CN101441637A CNA2007101868384A CN200710186838A CN101441637A CN 101441637 A CN101441637 A CN 101441637A CN A2007101868384 A CNA2007101868384 A CN A2007101868384A CN 200710186838 A CN200710186838 A CN 200710186838A CN 101441637 A CN101441637 A CN 101441637A
- Authority
- CN
- China
- Prior art keywords
- character
- character string
- order standard
- ordering
- unaffected
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种对已排序的字符串序列再排序的方法,其中,所述已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且所述再排序是基于第二字符排序标准,所述方法包括:比较所述第一字符排序标准和所述第二字符排序标准,以获得字符排序标准的变化;以及基于所述字符排序标准的变化,对所述已排序的字符串序列进行再排序。本发明的方法考虑了字符排序标准的变化和这种变化对已排序的字符串序列的影响,能够快速地对已排序的字符串序列进行再排序,从而节省了再排序的时间。
Description
技术领域
本发明涉及字符串的排序技术,具体地说,涉及对由已排序的字符串构成的序列进行再排序的方法及装置。
背景技术
在数据库应用中,经常会对字符串进行排序,例如,在建立数据库的索引时,将作为索引的字符串进行排序。字符串的排序技术需要两个主要的因素:字符排序标准和字符串比较算法。当进行字符串排序时,根据字符排序标准,使用字符串比较算法对各个字符串中的字符依次进行比较,然后,根据比较结果对字符串进行排序。
字符排序标准(Character Collation Standard,以下简称为CS)是用于描述字符之间的排序关系的规则。例如,“a”<“b”<“c”<“d”...给出了字母之间的排序顺序,这个排序顺序就是一个字符排序标准。另外,Unicode 3.0、Unicode 4.1等也是字符排序标准。
在现有技术中,有两种类型的字符串比较算法,即无级别的字符串比较算法(普通字符串比较算法)和分级字符串比较算法。典型的无级别的字符串比较算法是C语言应用程序接口(API)的字符串处理函数strcmp(),而典型的分级字符串比较算法是Unicode排序算法(Unicode CollationAlgorithm,简称为UCA),其详细的信息可以通过Unicode官方网站www.unicode.org获得。
在此,对UCA算法进行简单描述。Unicode(统一码)对每一种语言的每一个字符设定了统一且唯一的二进制码,虽然不同的国家可能使用相同的字符,但这些字符在不同的语言中可能具有不同的排序规则。例如,在中文和日文中有某些字符的形状相同,但是含义不同,那么这些字符的排序规则也不同。例如,虽然许多语言使用26个英文字母,但这些字母之间的排序规则可能不同,例如在立陶宛语中,字母“y”排在字母“i”和“k”之间。再例如,在使用拉丁字母的语言中,某些字母带有一些音调符号,例如“á”、“é”等,然而在多数情况下都默认普通字母与带音调符号的字母是相同的。
为了统一全世界的字符比较规则,提出了UCA算法,其将字符之间的比较分为4个级别:第一级别是指最简单的字符比较,例如a=A<b;第二级别增加了音调符号的字符比较,例如a<á<b;第三级别增加了大小写字符的比较,例如a<A;第四级别是考虑某些特殊字符后的字符比较,例如ab<a-b<aB。因此,在使用UCA算法进行字符比较时,可能会出现这样的情况:两个字符在第一级别上相等,但在其它级别上不一定相等。然而,如果两个字符在第一级别上不相等,则在其它级别上肯定不相等。因此,当使用UCA算法对字符进行比较时,需要对字符在所有级别上进行比较,只有当两个字符在所有级别上都相等时,这两个字符才相等。
下面通过一个简单的例子说明字符串的排序,其中字符排序标准是上述的“a”<“b”<“c”<“d”...,而字符串比较算法采用普通字符串比较算法,并且规定字符比较的顺序是从第一个字符开始。那么,对于字符串“apple”和“banana”,首先比较第一个字母,根据字符排序标准“a”<“b”,因此,字符串“apple”被排在字符串“banana”之前。如果规定字符比较的顺序是从最后一个字符开始,则根据字符排序标准“a”<“e”,因此,字符串“apple”被排在字符串“banana”之后。
然而实际上,由于版本更新或者环境(locale)的不同,字符排序标准会发生改变。例如,在Unicode3.0中,字符"_"(0x5F)、"`"(0x60)和"^"(0x5E)被排序为"_"(0x5F)<"`"(0x60)<"^"(0x5E),而在Unicode4.1中,上述字符的排序变为"`"(0x60)<"^"(0x5E)<"_"(0x5F),其它字符的排序规则保持不变。再例如,在英语环境下,Unicode4.1规定字符“v”小于字符“w”,而在瑞典语环境下,如果不考虑大小写,则Unicode4.1规定字符“v”等于字符“w”。
由于字符排序标准发生变化,因此需要对已排序的字符串的序列进行再排序。例如,IBM公司的Lotus Domino 8系统使用了与以往LotusDomino系统不同的字符排序标准,那么Lotus Domino系统的数据库的索引需要根据新的字符排序标准进行重建。
在现有技术中,通常使用排序方法直接根据新的字符排序标准对字符串进行排序,例如插入排序算法等,而并不考虑这些字符串是否已经排序。插入排序算法的基本思想是:每次将一个待排序的字符/字符串按照字符排序标准插入前面已经排好序的字符串的序列中的适当位置,直到所有字符/字符串都被插入。即,对于第一个待排序的字符/字符串无需排序,然后,将下一个待排序的字符/字符串与已排序的字符/字符串逐一比较,以确定插入的位置,然后将该字符/字符串插入。
然而,字符排序标准的变化通常是很细微的,即,绝大多数字符不会受到影响,并且这种变化可以通过几个简单的规则进行描述。现有技术的排序方法并不考虑新旧字符排序标准之间的变化,对于已排序的字符串序列中与字符排序标准中没有变化的部分对应的字符串也进行排序,从而消耗大量不必要的时间。
发明内容
本发明正是基于上述技术问题而提出的,其目的在于提供一种对已排序的字符串序列再排序的方法及装置,其考虑了字符排序标准的变化,能够快速地对已排序的字符串序列进行再排序,从而能够节省大量的时间。
根据本发明的一个方面,提出了一种对已排序的字符串序列再排序的方法,其中,所述已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且所述再排序是基于第二字符排序标准,所述方法包括:比较所述第一字符排序标准和所述第二字符排序标准,以获得字符排序标准的变化;以及基于所述字符排序标准的变化,对所述已排序的字符串序列进行再排序。
根据本发明的另一个方面,提出了一种对已排序的字符串序列再排序的装置,其中,所述已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且所述再排序是基于第二字符排序标准,所述装置包括:比较单元,用于比较所述第一字符排序标准和所述第二字符排序标准,以获得字符排序标准的变化;以及再排序单元,用于基于所述字符排序标准的变化,对所述已排序的字符串序列进行再排序。
附图说明
图1是根据本发明的一个实施例的对已排序的字符串序列再排序的方法的流程图;
图2是图1所示的实施例中的比较第一字符排序标准和第二字符排序标准的步骤的流程图;
图3是用于说明图1所示的实施例中的比较第一字符排序标准和第二字符排序标准的步骤的示例图;
图4是图1所示的实施例中的对已排序的字符串序列进行再排序的步骤的流程图;
图5是用于说明图1所示的实施例中的对已排序的字符串序列进行再排序的步骤的示例图;
图6是根据本发明的一个实施例的对已排序的字符串序列再排序的装置的方框示意图。
具体实施方式
通过以下结合附图对本发明的具体实施例的详细描述,本发明的上述和其它目的、特征和优点将更加明显。
图1是根据本发明的一个实施例的对已排序的字符串序列再排序的方法的流程图,下面结合附图详细说明本实施例。
在本实施例中,已排序的字符串序列是基于旧的字符排序标准(第一字符排序标准)对多个字符串进行排序而得到的。在字符排序标准变为新的字符排序标准(第二字符排序标准)时,需要基于该第二字符排序标准,对上述已排序的字符串序列进行再排序。
如图1所示,首先,在步骤10,比较第一字符排序标准和第二字符排序标准,以获得字符排序标准的变化。
如前所述,字符排序标准的变化是细微的,例如,对于Unicode3.0和Unicode4.1,它们之间的变化仅在于字符"_"(0x5F)、"`"(0x60)和"^"(0x5E)之间的相邻位置关系发生了改变,而其余字符的排序没有影响。而且,大多数的字符排序标准的变化都可以通过字符的相邻位置关系的变化描述。因此,在本实施例中,使用“未受影响的字符块(Unaffected CharacterBlock,简称为UCB)”表示相邻位置关系未改变的字符,这样,通过将第二字符排序标准中的字符划分为多个UCB,就可以获得第二字符排序标准相对于第一字符排序标准的变化。
图2示出了本实施例中的比较第一字符排序标准和第二字符排序标准的步骤的流程图。
具体地,如图2所示,在步骤100,根据第一字符排序标准,在第二字符排序标准中查找相邻位置关系未改变的字符。在该步骤100中,考虑到前面所述的两种类型的字符串比较算法的不同,因此,相应的查找相邻位置关系未改变的字符的方法也不同。下面分别描述与无级别的字符串比较算法对应的查找方法和与分级字符串比较算法对应的查找方法。
(一)与无级别的字符串比较算法对应的查找方法
在已排序的字符串序列是使用无级别的字符串比较算法得到的时候,使用该查找方法查找相邻位置关系未改变的字符。
首先,在步骤1001,从第一字符排序标准中的第一个字符开始,在第二字符排序标准中搜索对应的字符。然后,在步骤1002,判断所搜索的字符在第二字符排序标准中的后一个字符是否是其在第一字符排序标准中的后一个字符(第一判断步骤),即判断所搜索的字符在第二字符排序标准中的相邻位置关系是否与其在第二字符排序标准中的相同。
如果所搜索的字符在第二字符排序标准中的后一个字符不是其在第一字符排序标准中的后一个字符,即所搜索的字符的相邻位置关系改变,则在步骤1003,在第二字符排序标准中搜索上述所搜索的字符在第一字符排序标准中的后一个字符,作为新的所搜索的字符,然后返回第一判断步骤1002,对该新的所搜索的字符执行判断操作。
如果所搜索的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,即相邻位置关系未改变,则在步骤1004,将该所搜索的字符与其在第二字符排序标准中的后一个字符合并为相邻位置关系未改变的字符。然后在步骤1005,判断该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是否是其在第一字符排序标准中的后一个字符(第二判断步骤),即判断这些字符在第二字符排序标准中的相邻位置关系是否与其在第一字符排序标准中的相同。
如果该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,即这些字符的相邻位置关系未改变,则在步骤1006,将该相邻位置关系未改变的字符与其在第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符,然后返回步骤1005执行第二判断操作。
如果该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符不是其在第一字符排序标准中的后一个字符,即这些字符的相邻位置关系改变,则在步骤1007,在第二字符排序标准中搜索该相邻位置关系未改变的字符在第一字符排序标准中的后一个字符,作为新的所搜索的字符,然后返回步骤1002执行第一判断操作。
通过上述步骤,第二字符排序标准中的字符可被划分为至少一个相邻位置关系未改变的字符和其它的单独的字符。
(二)与分级字符串比较算法对应的查找方法
在已排序的字符串序列是使用包括多个字符比较级别的分级字符串比较算法得到的时候,使用该查找方法查找相邻位置关系未改变的字符。如前所述,当使用分级字符串比较算法进行排序时,需要在所有的字符比较级别上对字符进行比较,两个字符只有在所有的字符比较级别上都相等时才是相等的。因此,与分级字符串比较算法对应的查找方法也需要在所有的字符比较级别上对第一字符排序标准和第二字符排序标准进行比较以查找相邻位置关系未改变的字符。
当开始查找相邻位置关系未改变的字符时,首先,从第一字符排序标准中的第一个字符开始,在第二字符排序标准中搜索对应的字符。然后,在多个字符比较级别的每一个字符比较级别上,判断所搜索的字符在第二字符排序标准中的后一个字符是否是其在第一字符排序标准中的后一个字符(第三判断步骤)。
如果在某一个字符比较级别上,所搜索的字符在第二字符排序标准中的后一个字符不是其在第一字符排序标准中的后一个字符,则在第二字符排序标准中搜索上述所搜索的字符在第一字符排序标准中的后一个字符,作为新的所搜索的字符,然后返回上一步骤,对该新的所搜索的字符执行第三判断操作。
如果在所有的字符比较级别上,所搜索的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,则合并该所搜索的字符与其在第二字符排序标准中的后一个字符,作为相邻位置关系未改变的字符。然后,在多个字符比较级别的每一个字符比较级别上,判断该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是否是其在第一字符排序标准中的后一个字符(第四判断步骤)。
如果在所有字符比较级别上,该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,则将该相邻位置关系未改变的字符与其在第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符,然后返回上一步骤,对该新的相邻位置关系未改变的字符执行第四判断操作。
如果在某一个字符比较级别上,该相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,则在第二字符排序标准中搜索该相邻位置关系未改变的字符在第一字符排序标准中的后一个字符,作为新的所搜索的字符,然后对该新的所搜索的字符执行第三判断操作。
通过上述步骤,第二字符排序标准中的字符可被划分为至少一个相邻位置关系未改变的字符和其它的单独的字符。
在通过步骤100获得了第二字符排序标准中的相邻位置关系未改变的字符后,在步骤110,分别记录各个相邻位置关系未改变的字符和第二字符排序标准中剩余的字符的每一个,作为未受影响的字符块UCB。
下面通过一个例子来说明上述的比较第一字符排序标准和第二字符排序标准的步骤。如图3所示,第一字符排序标准为Unicode3.0,第二字符排序标准为Unicode4.1。Unicode3.0的第一个字符是0x5F,则在Unicode4.1中找到该字符0x5F,然后继续在Unicode4.1中搜索,得到字符0x5F的下一个字符是0x21,而在Unicode3.0中,字符0x5F的下一个字符是0x60,因此,在Unicode4.1中,字符0x5F的相邻位置关系改变。然后,在Unicode4.1中搜索字符0x5F在Unicode3.0中的下一个字符0x60,并得到字符0x60的下一个字符为0x5E,而在Unicode3.0中,字符0x60的下一个字符也是0x5E,那么,字符0x60和字符0x5E的相邻位置关系未改变,将字符0x60和字符0x5E合并成一个相邻位置关系未改变的字符。然后,继续在Unicode4.1中搜索上述相邻位置关系未改变的字符的下一个字符,即字符0x5E的下一个字符,得到字符0x5F,而在Unicode3.0中,字符0x5E的下一个字符是0x21,因此,在Unicode4.1中,包含字符0x60和字符0x5E的相邻位置关系未改变的字符的相邻位置关系改变。接着,在Unicode4.1中搜索字符0x5E在Unicode3.0中的下一个字符0x21,并搜索该字符0x21的下一个字符,然后判断字符0x21在Unicode4.1中的下一个字符是否与其在Unicode3.0中的下一个字符相同,并在相同的情况下,合并为相邻位置关系未改变的字符,而在不同的情况下,继续进行搜索并判断。重复执行这样的搜索、判断、合并的操作,直到Unicode3.0的最后一个字符。在该例中,得到的相邻位置关系未改变的字符是0x60和0x5E、0x21-0x5d &0x61-0x7e。因此,在Unicode4.0中,未受影响的字符块UCB包括由字符0x5F构成的UCB1、由字符0x60和0x5E构成的UCB2、以及由字符0x21-0x5d & 0x61-0x7e构成的UCB3。
返回图1,在获得了字符排序标准的变化即未受影响的字符块UCB后,在步骤20,基于该字符排序标准的变化,对已排序的字符串序列进行再排序。
图4示出了上述基于字符排序标准的变化对已排序的字符串序列进行再排序的步骤20的流程。具体地,如图4所示,在步骤201,根据在步骤10中获得的未受影响的字符块UCB,在已排序的字符串序列中获取至少一个未受影响的字符串块(Unaffected String Block,简称为USB),其中USB包括至少一个由属于同一个UCB的字符组成的字符串。由于未受影响的字符串块USB内部的字符串的字符来自同一个未受影响的字符块UCB,因此这些字符串无需重新排序。
具体地,在步骤2011,从第一个字符串开始,扫描已排序的字符串序列中的字符串,然后在步骤2012,确定当前所扫描的字符串所包含的字符是否在同一个UCB内。
如果该字符串所包含的字符不在同一个UCB内,则返回步骤2011,继续扫描下一个字符串。
如果该字符串所包含的字符在同一个UCB内,则在步骤2013,记录该字符串,作为未受影响的字符串块USB。然后,在步骤2014,判断在已排序的字符串序列中该USB的后一个字符串所包含的字符是否在与该USB的相同的UCB内。
如果该USB的后一个字符串所包含的字符在与该USB的相同的UCB内,则在步骤2015,将该USB与其后一个字符串合并,作为新的USB,然后返回步骤2014执行判断操作。
如果该USB的后一个字符串所包含的字符不在与该USB的相同的UCB内,则在步骤2016,确定该后一个字符串所包含的字符是否在同一个UCB内。
如果该后一个字符串所包含的字符在同一个UCB内,则返回步骤2013;如果该后一个字符串所包含的字符不在同一个UCB内,则返回步骤2011。
重复执行上述步骤,直到所述已排序的字符串序列中的最后一个字符串。
通过上述步骤,可以获得未受影响的字符串块USB,这样,已排序的字符串序列被划分为至少一个未受影响的字符串块USB和其它字符串。
然后,在步骤205,从在步骤201中获得的未受影响的字符串块USB中各自选择任意一个字符串。由于未受影响的字符串块USB内部的字符串不需要重新排序,因此可以从每一个未受影响的字符串块USB中选择任意一个字符串作为该未受影响的字符串块USB的代表。一般地,可以选择未受影响的字符串块USB中的第一个字符串。
在步骤210,在已排序的字符串序列中,用在步骤205中选择的字符串替换对应的未受影响的字符串块USB,以形成新的字符串序列。然后,在步骤215,根据第二字符排序标准,对在步骤210中形成的新的字符串序列进行排序。在该步骤215中可以使用现有的任意的排序算法,例如插入排序算法等。
然后,在步骤220,对于经过步骤215的排序后的新的字符串序列,将所选择的字符串替换为对应的未受影响的字符串块。这样,所得到的字符串序列就是再排序后的字符串序列。
下面给出一个例子来说明基于字符排序标准的变化对已排序的字符串序列进行再排序的步骤。如图5所示,已排序的字符串序列为:“_ABCD”、“^ABCD”、“ABCDE”、“BCDEF”、“abcde”,而第一和第二字符排序标准分别是Unicode3.0和Unicode4.1,并且已通过图3所示的例子获得了多个未受影响的字符块UCB,即UCB1、UCB2和UCB3。
首先,扫描第一个字符串“_ABCD”,确定该字符串中“_”属于UCB1,“A”属于UCB3,因此,该字符串中的字符不在同一个UCB内,那么该字符串不是未受影响的字符串块USB。接着,扫描第二个字符串“^ABCD”,同样,该字符串也不是未受影响的字符串块USB。接着,扫描第三个字符串“ABCDE”,并确定该字符串中的所有字符都是属于UCB3,然后,记录该字符串是未受影响的字符串块USB。然后,判断下一个字符串,即第四个字符串“BCDEF”的所有字符是否在UCB3内,其判断结果是字符串“BCDEF”是由UCB3内的字符组成,因此,将该字符串“BCDEF”与未受影响的字符串块USB“ABCDE”合并,构成新的USB。最后,判断第五个字符串“abcde”的所有字符是否在UCB3内,其判断结果是字符串“abcde”是由UCB3内的字符组成,因此,将该字符串“abcde”与未受影响的字符串块USB(“ABCDE”+“BCDEF”)合并,构成新的USB。这样,已排序的字符串序列具有一个未受影响的字符串块USB(“ABCDE”+“BCDEF”+“abcde”)和两个不是未受影响的字符串块的字符串。
然后,从该未受影响的字符串块USB(“ABCDE”+“BCDEF”+“abcde”)中选择一个字符串,例如“ABCDE”,并代替该未受影响的字符串块,与两个不是未受影响字符串块的字符串“_ABCD”和“^ABCD”一起组成新的字符串序列。然后,根据第二字符排序标准Unicode4.1,利用任意的排序算法对该新的字符串序列进行排序,在此,使用插入排序算法进行排序。这样,经过再排序得到的新的字符串序列为“^ABCD”、“_ABCD”、“ABCDE”。
最后,用该未受影响的字符串块替换上述再排序的字符串序列中的字符串“ABCDE”,从而获得再排序的字符串序列为“^ABCD”、“_ABCD”、“ABCDE”、“BCDEF”、“abcde”。
通过以上描述可以看出,本实施例的对已排序的字符串序列再排序的方法通过比较第一和第二字符排序标准以在第二字符排序标准中确定未受影响的字符块UCB,并且在已排序的字符串序列中根据未受影响的字符块UCB确定未受影响的字符串块USB,实现对已排序的字符串序列进行再排序,从而能够快速地对已排序的字符串序列进行再排序,并节省了再排序的时间。
进一步地,在本实施例中,还可以在比较第一和第二字符排序标准之前,定义常用字符范围,即从所有字符中选择常用的字符,构成常用字符范围。例如,定义常用字符范围为0x4E00-0x9FA5。然后,在执行比较步骤时,仅对第一和第二字符排序标准中的在常用字符范围内的字符进行比较,以获得未受影响的字符块。当根据未受影响的字符块对已排序的字符串序列进行排序时,先判断该已排序的字符串序列中是否包含有不在常用字符范围内的字符。如果包含有不在常用字符范围内的字符,则使用原来的排序算法对该已排序的字符串序列进行排序。而如果不包含不在常用字符范围内的字符,则使用本实施例的再排序方法对该已排序的字符串序列进行排序。
由于常用字符之间的排序关系相对固定,变化比较小,而且当字符排序标准变化时,受影响的大多数是不常用的字符,因此,通过定义常用字符范围,可以减少受字符排序标准变化的影响的字符,从而进一步节省再排序的时间。
在同一个发明构思下,图6是根据本发明的一个实施例的对已排序的字符串序列再排序的装置的方框示意图。下面结合附图,对本实施例进行详细描述。
在本实施例中,已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且再排序是基于第二字符排序标准进行的。
如图6所示,本实施例的对已排序的字符串序列再排序的装置600包括:比较单元601,其比较第一字符排序标准和第二字符排序标准,以获得字符排序标准的变化;以及再排序单元602,其基于由比较单元601获得的字符排序标准的变化,对已排序的字符串序列进行再排序。
当本实施例的对已排序的字符串序列再排序的装置600工作时,第一字符排序标准和第二字符排序标准被提供给比较单元601,然后在比较单元601中,首先由查找单元6011根据第一字符排序标准,在第二字符排序标准中查找相邻位置关系未改变的字符。
在查找单元6011中,当查找相邻位置关系未改变的字符时,搜索单元60111在第二字符排序标准中依次搜索第一字符排序标准中的字符,然后字符判断单元60112判断当前所搜索的字符在第二字符排序标准中的后一个字符是否是其在第一字符排序标准中的后一个字符。当判断结果是否定的时候,即当前所搜索的字符在第二字符排序标准中的后一个字符不是其在第一字符排序标准中的后一个字符,使搜索单元60111搜索当前所搜索的字符在第一字符排序标准中的后一个字符,然后由字符判断单元60112进行判断。当判断结果是肯定的时候,即当前所搜索的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符,由字符合并单元60113合并当前所搜索的字符与其在第二字符排序标准中的后一个字符,作为相邻位置关系未改变的字符。然后由字符判断单元60112对该相邻位置关系未改变的字符进行判断。当字符判断单元60112的判断结果为相邻位置关系未改变的字符在第二字符排序标准中的后一个字符是其在第一字符排序标准中的后一个字符时,由字符合并单元60113将该相邻位置关系未改变的字符与其在第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符。当字符判断单元60112的判断结果为相邻位置关系未改变的字符在第二字符排序标准中的后一个字符不是其在第一字符排序标准中的后一个字符时,使搜索单元60111搜索该相邻位置关系未改变的字符在第一字符排序标准中的后一个字符,然后由字符判断单元60112进行判断。
这样,经过查找单元6011后,第二字符排序标准中的字符被划分为至少一个相邻位置关系未改变的字符和其它的单独的字符。然后,由记录单元6012分别记录各个相邻位置关系未改变的字符和每一个单独的字符,作为未受影响的字符块UCB。
未受影响的字符块UCB和已排序的字符串序列被输入到再排序单元602中,以对已排序的字符串序列进行再排序。
在再排序单元602中,首先获取单元6021根据未受影响的字符块UCB,在已排序的字符串序列中获取未受影响的字符串块,其中未受影响的字符串块包括由属于同一个未受影响的字符块的字符组成的字符串。
具体地,在获取单元6021中,由扫描单元60211依次扫描已排序的字符串序列中的字符串,然后确定单元60212确定当前所扫描的字符串的后一个字符串所包含的字符是否在同一个未受影响的字符块UCB内。如果当前所扫描的字符串的后一个字符串所包含的字符不在同一个未受影响的字符块UCB内,则使扫描单元60211扫描已排序的字符串序列中的下一个字符串。如果当前所扫描的字符串所包含的字符在同一个未受影响的字符块UCB内,则记录单元60213记录当前所扫描的字符串,作为未受影响的字符串块USB。然后,字符串判断单元60214判断在已排序的字符串序列中该未受影响的字符串块USB的后一个字符串所包含的字符是否在与该未受影响的字符串块USB的相同的未受影响的字符块UCB内。当判断结果是否定时,使确定单元60212确定该未受影响的字符串块USB的后一个字符串所包含的字符是否在同一个未受影响的字符块UCB内。当判断的结果是肯定时,由字符串合并单元60215合并该未受影响的字符串块及其后一个字符串,作为新的未受影响的字符串块。
这样,通过获取单元6021,可以在已排序的字符串序列中找到未受影响的字符串块USB。
然后,选择单元6022从每一个未受影响的字符串块USB中选择任意一个字符串,作为该未受影响的字符串块USB的代表,并通过替换单元6023替换在已排序的字符串序列中的对应的未受影响的字符串块USB,从而形成新的字符串序列。然后,排序单元6024根据第二字符排序标准,对形成的新的字符串序列进行排序。对于排序后的新的字符串序列,由替换单元6023将所选择的字符串替换为对应的未受影响的字符串块USB,从而得到再排序后的字符串序列。
进一步地,本实施例的对已排序的字符串序列再排序的装置600还可以包括:常用字符集合,用于存储预先定义的常用字符范围;以及常用字符判断单元,其判断在已排序的字符串序列中是否包含不在常用字符集合内的字符,当判断为已排序的字符串序列中不包含不在常用字符集合内的字符时,将该已排序的字符串序列传输到再排序单元602。常用字符集合还被提供给比较单元601,以使比较单元601仅对第一字符排序标准和第二字符排序标准中的在常用字符集合内的字符进行比较。
本实施例的对已排序的字符串序列再排序的装置600及其组件可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。并且,本实施例的对已排序的字符串序列再排序的装置600在操作上可以实现图1、图2和图4所示的实施例的对已排序的字符串序列再排序的方法。
以上虽然通过一些示例性的实施例详细描述了本发明的对已排序的字符串序列再排序的方法和对已排序的字符串序列再排序的装置,但是以上这些实施例并不是穷举的,本领域技术人员可以在本发明的精神和范围内实现各种变化和修改。因此,本发明并不限于这些实施例,本发明的范围仅由所附的权利要求限定。
Claims (14)
1.一种对已排序的字符串序列再排序的方法,其中,所述已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且所述再排序是基于第二字符排序标准,所述方法包括:
比较所述第一字符排序标准和所述第二字符排序标准,以获得字符排序标准的变化;以及
基于所述字符排序标准的变化,对所述已排序的字符串序列进行再排序。
2.根据权利要求1所述的对已排序的字符串序列再排序的方法,其中,所述比较所述第一字符排序标准和所述第二字符排序标准的步骤包括:
根据所述第一字符排序标准,在所述第二字符排序标准中查找相邻位置关系未改变的字符;以及
分别记录各个所述相邻位置关系未改变的字符和所述第二字符排序标准中剩余的字符的每一个,作为未受影响的字符块。
3.根据权利要求2所述的对已排序的字符串序列再排序的方法,其中,所述已排序的字符串序列是使用无级别的字符串比较算法而得到的;
所述在所述第二字符排序标准中查找相邻位置关系未改变的字符的步骤包括:
在所述第二字符排序标准中搜索所述第一字符排序标准中的一个字符;
第一判断步骤:判断所搜索的字符在所述第二字符排序标准中的后一个字符是否是其在所述第一字符排序标准中的后一个字符;
如果上述第一判断步骤的判断结果是否定的,则
在所述第二字符排序标准中搜索在所述第一字符排序标准中的上述所搜索的字符的后一个字符,作为新的所搜索的字符;
对于所述新的所搜索的字符,返回上述第一判断步骤;
如果上述第一判断步骤的判断结果是肯定的,则
合并所述第二字符排序标准中的上述所搜索的字符及其后一个字符,作为相邻位置关系未改变的字符;
第二判断步骤:判断所述相邻位置关系未改变的字符在所述第二字符排序标准中的后一个字符是否是其在所述第一字符排序标准中的后一个字符;
如果上述第二判断步骤的判断结果是肯定的,则
将所述相邻位置关系未改变的字符与其在所述第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符;
对于所述新的相邻位置关系未改变的字符,返回上述第二判断步骤;
如果上述第二判断步骤的判断结果是否定的,则
在所述第二字符排序标准中搜索在所述第一字符排序标准中的所述相邻位置关系未改变的字符的后一个字符,作为新的所搜索的字符;以及
对于所述新的所搜索的字符,返回上述第一判断步骤。
4.根据权利要求2所述的对已排序的字符串序列再排序的方法,其中,所述已排序的字符串序列是使用包括多个字符比较级别的分级字符串比较算法得到的;
所述在所述第二字符排序标准中查找相邻位置关系未改变的字符的步骤包括:
在所述第二字符排序标准中搜索所述第一字符排序标准中的一个字符;
第三判断步骤:在所述多个字符比较级别的每一个字符比较级别上,判断所搜索的字符在所述第二字符排序标准中的后一个字符是否是其在所述第一字符排序标准中的后一个字符;
如果在某一个字符比较级别上,上述第三判断步骤的判断结果是否定的,则
在所述第二字符排序标准中搜索在所述第一字符排序标准中的上述所搜索的字符的后一个字符,作为新的所搜索的字符;
对于所述新的所搜索的字符,返回上述第三判断步骤;
如果在所有字符比较级别上,上述第三判断步骤的判断结果是肯定的,则
合并所述第二字符排序标准中的上述所搜索的字符及其后一个字符,作为相邻位置关系未改变的字符;
第四判断步骤:在所述多个字符比较级别的每一个字符比较级别上,判断所述相邻位置关系未改变的字符在所述第二字符排序标准中的后一个字符是否是其在所述第一字符排序标准中的后一个字符;
如果在所有字符比较级别上,上述第四判断步骤的判断结果是肯定的,则
将所述相邻位置关系未改变的字符与其在所述第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符;
对于所述新的相邻位置关系未改变的字符,返回上述第四判断步骤;
如果在某一个字符比较级别上,上述第四判断步骤的判断结果是否定的,则
在所述第二字符排序标准中搜索在所述第一字符排序标准中的所述相邻位置关系未改变的字符的后一个字符,作为新的所搜索的字符;以及
对于所述新的所搜索的字符,返回上述第三判断步骤。
5.根据权利要求4所述的对已排序的字符串序列再排序的方法,其中,所述分级字符串比较算法是Unicode排序算法。
6.根据权利要求2至5任意一项所述的对已排序的字符串序列再排序的方法,其中,所述对所述已排序的字符串序列进行再排序的步骤包括:
根据所述未受影响的字符块,在所述已排序的字符串序列中获取至少一个未受影响的字符串块,其中所述未受影响的字符串块包括至少一个由属于同一个未受影响的字符块的字符组成的字符串;
从所述未受影响的字符串块中各自选择任意一个字符串;
在所述已排序的字符串序列中用所选择的字符串替换对应的所述未受影响的字符串块,以形成新的字符串序列;
根据所述第二字符排序标准,对所述新的字符串序列进行排序;以及
在排序后的新的字符串序列中,将上述所选择的字符串替换为对应的所述未受影响的字符串块。
7.根据权利要求6所述的对已排序的字符串序列再排序的方法,其中,所述在所述已排序的字符串序列中获取至少一个未受影响的字符串块的步骤包括:
扫描所述已排序的字符串序列中的一个字符串;
确定所述字符串所包含的字符是否在同一个所述未受影响的字符块内;
当所述字符串所包含的字符不在同一个所述未受影响的字符块内时,返回上述扫描步骤;
当所述字符串所包含的字符在同一个所述未受影响的字符块内时,记录所述字符串,作为未受影响的字符串块;
判断在所述已排序的字符串序列中所述未受影响的字符串块的后一个字符串所包含的字符是否在与所述未受影响的字符串块的相同的所述未受影响的字符块内;
如果上述判断步骤的判断结果是肯定的,则
合并所述未受影响的字符串块及其后一个字符串,作为新的未受影响的字符串块;
对于所述新的未受影响的字符串块,返回上述判断步骤;
如果上述判断步骤的判断结果是否定的,则对于所述后一个字符串所包含的字符,返回上述确定步骤。
8.根据权利要求1至7任意一项所述的对已排序的字符串序列再排序的方法,还包括:
定义常用字符范围;
判断所述已排序的字符串序列中是否包含不在所述常用字符范围内的字符;
如果包含不在所述常用字符范围内的字符,则使用原排序方法对所述已排序的字符串序列进行排序;以及
如果不包含不在所述常用字符范围内的字符,则执行后续的步骤。
其中,所述比较步骤仅对所述第一字符排序标准和所述第二字符排序标准中的在所述常用字符范围内的字符进行。
9.一种对已排序的字符串序列再排序的装置,其中,所述已排序的字符串序列是基于第一字符排序标准对多个字符串进行排序而得到的,并且所述再排序是基于第二字符排序标准,所述装置包括:
比较单元,用于比较所述第一字符排序标准和所述第二字符排序标准,以获得字符排序标准的变化;以及
再排序单元,用于基于所述字符排序标准的变化,对所述已排序的字符串序列进行再排序。
10.根据权利要求9所述的对已排序的字符串序列再排序的装置,其中,所述比较单元包括:
查找单元,用于根据所述第一字符排序标准,在所述第二字符排序标准中查找相邻位置关系未改变的字符;以及
记录单元,用于分别记录各个所述相邻位置关系未改变的字符和所述第二字符排序标准中剩余的字符的每一个,作为未受影响的字符块。
11.根据权利要求10所述的对已排序的字符串序列再排序的装置,其中,所述查找单元包括:
搜索单元,用于在所述第二字符排序标准中搜索所述第一字符排序标准中的一个字符;
字符判断单元,用于判断所搜索的字符或者相邻位置关系未改变的字符在所述第二字符排序标准中的后一个字符是否是其在所述第一字符排序标准中的后一个字符,并在判断结果是否定的时候,使得所述搜索单元搜索在所述第一字符排序标准中的所述所搜索的字符的后一个字符,或者搜索在所述第一字符排序标准中的所述相邻位置关系未改变的字符的后一个字符;以及
字符合并单元,用于在所搜索的字符在所述第二字符排序标准中的后一个字符是其在所述第一字符排序标准中的后一个字符时,合并所述第二字符排序标准中的上述所搜索的字符及其后一个字符,作为相邻位置关系未改变的字符;在所述相邻位置关系未改变的字符在所述第二字符排序标准中的后一个字符是其在所述第一字符排序标准中的后一个字符时,将所述相邻位置关系未改变的字符与其在所述第二字符排序标准中的后一个字符合并,作为新的相邻位置关系未改变的字符。
12.根据权利要求10或11所述的对已排序的字符串序列再排序的装置,其中,所述再排序单元包括:
获取单元,用于根据所述未受影响的字符块,在所述已排序的字符串序列中获取未受影响的字符串块,其中所述未受影响的字符串块包括由属于同一个未受影响的字符块的字符组成的并且彼此相邻的字符串;
选择单元,用于从所述未受影响的字符串块中各自选择任意一个字符串;
替换单元,用于在所述已排序的字符串序列中用所选择的字符串替换对应的所述未受影响的字符串块,以形成新的字符串序列,以及在排序后的新的字符串序列中,将上述所选择的字符串替换为对应的所述未受影响的字符串块;以及
排序单元,用于根据所述第二字符排序标准,对所述新的字符串序列进行排序。
13.根据权利要求12所述的对已排序的字符串序列再排序的装置,其中,所述获取单元包括:
扫描单元,用于扫描所述已排序的字符串序列中的一个字符串;
确定单元,用于确定所述字符串或者未受影响的字符串块的后一个字符串所包含的字符是否在同一个所述未受影响的字符块内;
记录单元,用于当所述字符串所包含的字符在同一个所述未受影响的字符块内时,记录所述字符串,作为未受影响的字符串块;
字符串判断单元,用于判断在所述已排序的字符串序列中所述未受影响的字符串块的后一个字符串所包含的字符是否在与所述未受影响的字符串块的相同的所述未受影响的字符块内,并在判断结果是否定时,使得所述确定单元确定所述未受影响的字符串块的后一个字符串所包含的字符是否在同一个所述未受影响的字符块内;以及
字符串合并单元,用于在上述判断的结果是肯定时,合并所述未受影响的字符串块及其后一个字符串,作为新的未受影响的字符串块。
14.根据权利要求12所述的对已排序的字符串序列再排序的装置,还包括:
常用字符集合,用于存储预先定义的常用字符范围;以及
常用字符判断单元,用于判断所述已排序的字符串序列中是否包含不在所述常用字符集合内的字符,并在判断为所述已排序的字符串序列中不包含不在所述常用字符集合内的字符时,将所述已排序的字符串序列传输到所述再排序单元;
其中,所述比较单元仅对所述第一字符排序标准和所述第二字符排序标准中的在所述常用字符集合内的字符进行比较。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101868384A CN101441637A (zh) | 2007-11-22 | 2007-11-22 | 对已排序的字符串序列再排序的方法及装置 |
US12/274,425 US8549023B2 (en) | 2007-11-22 | 2008-11-20 | Method and apparatus for resorting a sequence of sorted strings |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101868384A CN101441637A (zh) | 2007-11-22 | 2007-11-22 | 对已排序的字符串序列再排序的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101441637A true CN101441637A (zh) | 2009-05-27 |
Family
ID=40670621
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007101868384A Pending CN101441637A (zh) | 2007-11-22 | 2007-11-22 | 对已排序的字符串序列再排序的方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8549023B2 (zh) |
CN (1) | CN101441637A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020272A (zh) * | 2012-12-27 | 2013-04-03 | 广东佳和通信技术有限公司 | 一种字符串的排序方法 |
CN103514160A (zh) * | 2012-06-15 | 2014-01-15 | 华为终端有限公司 | 一种排序方法和移动设备 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9509757B2 (en) * | 2011-06-30 | 2016-11-29 | Google Inc. | Parallel sorting key generation |
CN106844288B (zh) | 2015-12-07 | 2022-03-22 | 创新先进技术有限公司 | 一种随机字符串生成方法及装置 |
US11256862B2 (en) * | 2018-10-23 | 2022-02-22 | International Business Machines Corporation | Cognitive collation configuration for enhancing multilingual data governance and management |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3457061B2 (ja) * | 1994-06-28 | 2003-10-14 | 富士通株式会社 | 属性混在文字列のソート装置及び属性混在文字列のソート方法 |
US5675818A (en) * | 1995-06-12 | 1997-10-07 | Borland International, Inc. | System and methods for improved sorting with national language support |
US5793381A (en) * | 1995-09-13 | 1998-08-11 | Apple Computer, Inc. | Unicode converter |
IL121071A0 (en) * | 1997-03-27 | 1997-11-20 | El Mar Software Ltd | Automatic conversion server |
US7218252B2 (en) * | 2004-02-25 | 2007-05-15 | Computer Associates Think, Inc. | System and method for character conversion between character sets |
US20050251519A1 (en) * | 2004-05-07 | 2005-11-10 | International Business Machines Corporation | Efficient language-dependent sorting of embedded numerics |
US7676487B2 (en) * | 2004-09-28 | 2010-03-09 | Computer Associates Think, Inc. | Method and system for formatting and indexing data |
US20060100857A1 (en) * | 2004-11-05 | 2006-05-11 | Microsoft Corporation | Custom collation tool |
-
2007
- 2007-11-22 CN CNA2007101868384A patent/CN101441637A/zh active Pending
-
2008
- 2008-11-20 US US12/274,425 patent/US8549023B2/en not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514160A (zh) * | 2012-06-15 | 2014-01-15 | 华为终端有限公司 | 一种排序方法和移动设备 |
CN103514160B (zh) * | 2012-06-15 | 2017-04-12 | 华为终端有限公司 | 一种排序方法和移动设备 |
CN103020272A (zh) * | 2012-12-27 | 2013-04-03 | 广东佳和通信技术有限公司 | 一种字符串的排序方法 |
Also Published As
Publication number | Publication date |
---|---|
US20090138474A1 (en) | 2009-05-28 |
US8549023B2 (en) | 2013-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7584188B2 (en) | System and method for searching and matching data having ideogrammatic content | |
US7415171B2 (en) | Multigraph optical character reader enhancement systems and methods | |
CN101441637A (zh) | 对已排序的字符串序列再排序的方法及装置 | |
CN100524318C (zh) | 不同属性字段的排序方法及系统 | |
Deng et al. | An improved fuzzy clustering method for text mining | |
WO2007086059A2 (en) | Determining near duplicate 'noisy' data objects | |
CN109492337B (zh) | 一种可编程逻辑器件的信息流追踪模型生成方法 | |
CN101499065B (zh) | 基于fa的表项压缩方法及装置、表项匹配方法及装置 | |
Yang et al. | Improved tangent space-based distance metric for lithographic hotspot classification | |
CA3138556A1 (en) | Apparatuses, storage medium and method of querying data based on vertical search | |
CN106777259A (zh) | 自适应抽取HTML Table标签中结构化信息的方法及装置 | |
CN111339166A (zh) | 基于词库的匹配推荐方法、电子装置及存储介质 | |
CN107153469B (zh) | 为输入数据搜索匹配候选项的方法、数据库创建方法、装置及计算机程序产品 | |
US20040117192A1 (en) | System and method for reading addresses in more than one language | |
CN114153496B (zh) | 一种基于区块链的高速可并行代码相似度对比方法和系统 | |
CN111949550A (zh) | 自动生成测试数据的方法、装置、设备及存储介质 | |
CN109656947B (zh) | 数据查询方法、装置、计算机设备和存储介质 | |
US20100057809A1 (en) | Information storing/retrieving method and device for state transition table, and program | |
US20210224323A1 (en) | Learning system, learning method, and program | |
CN107885956A (zh) | 替换版图标签的方法 | |
CN104536587A (zh) | 一种基于九宫格输入模式的联想输入法 | |
CN110275957B (zh) | 姓名消歧方法、装置、电子设备及计算机可读存储介质 | |
CN102955761A (zh) | 尺寸信息输出系统及方法 | |
CN104899572A (zh) | 检测内容的方法、装置及终端 | |
CN112686045B (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 | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20090527 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |