一种字符串的比较方法及装置与流程

文档序号:12039170阅读:155来源:国知局
一种字符串的比较方法及装置与流程
本申请涉及计算机计算领域,尤其涉及一种字符串的比较方法及装置。

背景技术:
目前,在互联网的业务开发和实施环境中,海量数据处理运算的任务日益增多,这些海量数据处理运算有些是以字符串运算为中心的,其中,比较多个字符串诸如多个网页地址(URL)是否相同的运算又占据了极高的比例。传统的判断字符串是否相同的运算是通过诸如Strcmp函数实现的,对于两个需要进行判同操作(判断是否相同的操作)的字符串,从两个字符串的头部开始扫描比对每个字符是否相同,即字符串中有多少个字符就需要比对多少次,才能得到两个字符串判同的结果。在海量数据处理运算中重复执行判同操作的比率非常的高。例如,在字符串s1和s2进行判同之后,s1还可能和s3、s4、…sn进行判同操作,使用上述这种字符串的判同方式,每次字符串判同都需要比对多次才能得到判同结果,因此,整体的字符串判同效率较低,尤其是对于很长的字符串进行判同操作时上述问题特别突出。

技术实现要素:
本申请实施例提供了一种字符串的比较方法及装置,用以实现在互联网的业务开发和实施环境中存在重复执行海量数据处理运算的判同操作时能够快速地得到字符串的判同结果。本申请实施例提供的一种字符串的比较方法,包括:针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;对于不存在对应的摘要特征值的字符串,计算并保存所述字符串的摘要特征值;比较所述至少两个字符串的摘要特征值是否相同;若是,确定所述至少两个字符串相同;若否,确定所述至少两个字符串不同。本申请实施例提供的一种字符串的比较装置,包括:第一判断模块,用于针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;计算模块,用于对于不存在对应的摘要特征值的字符串,计算并保存所述字符串的摘要特征值;第二判断模块,用于比较所述至少两个字符串的摘要特征值是否相同;若是,确定所述至少两个字符串相同;若否,确定所述至少两个字符串不同。本申请实施例的有益效果包括:本申请实施例提供的一种字符串的比较方法及装置,针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;对于不存在对应的摘要特征值的字符串,计算并保存字符串的摘要特征值;比较至少两个字符串的摘要特征值是否相同;若是,确定至少两个字符串相同;若否,确定至少两个字符串不同。在互联网的业务开发和实施环境中存在重复执行海量数据处理运算的判同操作时,由于使用字符串对应的摘要特征值进行比对得到字符串的判同结果,相对于对两个字符串中的每个字符都要进行比对才能得到判同结果的方式,由于摘要特征值的数据量往往远小于字符串的数据量,对摘要特征值进行比对得到判同结果,能够大量的减少判同操作的计算量,这节省了运算资源,提升了整体的字符串判同效率。附图说明图1为本申请实施例提供的字符串的比较方法的流程图;图2为本申请实施例提供的字符串的比较装置的结构示意图。具体实施方式下面结合附图,对本申请实施例提供的字符串的比较方法及装置的具体实施方式进行详细地说明。本申请实施例提供的一种字符串的比较方法,如图1所示,具体流程包括以下步骤:S101、针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;若是,执行步骤S103;若否,执行步骤S102;S102、对于不存在对应的摘要特征值的字符串,计算并保存字符串的摘要特征值;S103、比较至少两个字符串的摘要特征值是否相同;若是,执行步骤S104;若否,执行步骤S105;S104、确定至少两个字符串相同;S105、确定至少两个字符串不同。在互联网的业务开发和实施环境中存在重复执行海量数据处理运算的判同操作时使用本申请实施例提供的上述方法,将大量的字符串的比较转化为对字符串对应的摘要特征值进行比较,由于摘要特征值为一个数值,具体地,可以是32位或64位的长整数,具体长度在此不做限定,相对于现有技术对字符串中的每个字符逐一比对得到最后判同结果,只需对摘要特征值进行一次比对即可得到判同结果,减少了判同操作的计算量,提高了运算效率,节约了运算资源。尤其是在字符串较长、判同操作重复率较多的情况,使用本申请实施例提供的字符串比较方法,运算效率的提升更为明显。并且,较佳地,当摘要特征值设置为64位的长整数时,使用现有的64位硬件体系结构,诸如:寄存器或比较器等,就能实施本申请提供的上述字符串比较方法。下面对上述各步骤的具体实现方式进行详细的说明。在上述步骤S102中计算字符串的摘要特征值,具体地可以通过下述方式实现:对字符串进行哈希运算,将得到的哈希值作为字符串的摘要特征值,由于哈希运算属于现有技术,在此不做详述。发明人在使用哈希算法计算字符串的摘要特征值时,发现存在不同的字符串计算出来的摘要特征值可能相同的几率,即存在冲突几率。因此,发明人结合现有的哈希算法创造出复合哈希算法来计算摘要特征值,以避免发生冲突,具体过程如下:先对字符串进行至少两次不同的哈希运算,得到至少两个不同的哈希值;然后将至少两个不同的哈希值进行拼接处理,得到字符串的摘要特征值;或者,将至少两个不同的哈希值进行算术运算后,例如:加减乘除运算,得到字符串的摘要特征值。在具体实施时,发明人发现,将字符串的两次不同的哈希值进行拼接或者算术运算得到的摘要特征值就能够有效地避免冲突几率,因此,下述具体实例都是以两次不同的哈希运算为例说明。实例一:对于字符串进行两次不同的哈希运算可以使用JAVAJDK的String::HashCode函数实现的指纹算法进行计算,计算公式如下:h1=s[0]×P1n-1+s[1]×P1n-2+s[2]×P1n-3+……+s[n-1],h2=s[0]×P2n-1+s[1]×P2n-2+s[2]×P2n-3+……+s[n-1];其中,h1和h2为两个不同的哈希值;P1和P2为质数,例如:可以为29和31,在此不做限定;s[0]、s[1]、s[2]……s[n-1]分别为字符串第1位、第2位、第3位……第n位的字符。在具体实施时,以下述代码实现:实例二:对于字符串分别使用上述指纹算法和DanielJ.Bernstein教授发明的DJB算法进行计算,得到两个不同的32位的哈希值,具体实施时,DJB算法例如可以以下述代码实现(还可以使用其他版本的代码):上述实例一和实例二只是举例说明具体如何计算哈希值,本领域技术人员还可以使用其他哈希函数例如sdbm/FNV的函数进行哈希值的计算,在此不做限定。在计算出两个不同的哈希值h1和h2后可以使用(((long)h1<<32)|(long)h2公式,将h1和h2拼接成一个64位的摘要特征值,或者,将两个不同的哈希值做加减乘除的算术运算后,得到一个32位的摘要特征值。并且,在计算出字符串对应的摘要特征值后,将此摘要特征值和字符串一起保存,对于重复比对时就可以直接重复使用计算出的该字符串的摘要特征值,而存储摘要特征值的空间只需要8个字节即可。较佳地,如果在进行字符串比较时,对字符串的大小写不敏感,即对字符串的比较不区别大小写,就可以在计算字符串的摘要特征值之前,将字符串的各字符根据需要统一转换为大写或小写即可。基于同一发明构思,本申请实施例还提供了一种字符串的比较装置,由于该装置解决问题的原理与前述一种字符串的比较方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。本申请实施例提供的一种字符串的比较装置,如图2所示,包括:第一判断模块201,用于针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;计算模块202,用于对于不存在对应的摘要特征值的字符串,计算并保存该字符串的摘要特征值;第二判断模块203,用于比较至少两个字符串的摘要特征值是否相同;若是,确定至少两个字符串相同;若否,确定至少两个字符串不同。进一步地,上述装置中的计算模块202,具体用于对字符串进行哈希运算,将得到的哈希值作为字符串的摘要特征值。或者,进一步地,上述装置中的计算模块202,具体用于对字符串进行至少两次不同的哈希运算,得到至少两个不同的哈希值;将至少两个不同的哈希值进行拼接处理,得到字符串的摘要特征值。进一步地,计算模块202,具体用于使用下述指纹算法对字符串进行两次不同的哈希运算,得到两个不同的哈希值h1和h2:h1=s[0]×P1n-1+s[1]×P1n-2+s[2]×P1n-3+……+s[n-1],h2=s[0]×P2n-1+s[1]×P2n-2+s[2]×P2n-3+……+s[n-1];其中,P1和P2为质数,s[0]、s[1]、s[2]……s[n-1]分别为字符串第1位、第2位、第3位……第n位的字符;将两个不同的哈希值使用(((long)h1<<32)|(long)h2公式进行拼接处理,得到字符串的摘要特征值。或者,进一步地,上述计算模块202,具体用于使用指纹算法和DJB算法分别对字符串进行哈希运算,得到两个不同的哈希值h1和h2;将所述两个不同的哈希值使用(((long)h1<<32)|(long)h2公式进行拼接处理,得到所述字符串的摘要特征。进一步地,本申请实施例提供的上述装置,如图2所示,还可以包括:转换模块204,用于在计算模块202计算字符串的摘要特征值之前,将字符串按照预先的设置转换成大写字符串或小写字符串。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本申请实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。本申请实施例提供的一种字符串的比较方法及装置,针对至少两个待比较的字符串,判断每个字符串是否存在对应的摘要特征值;对于不存在对应的摘要特征值的字符串,计算并保存字符串的摘要特征值;比较至少两个字符串的摘要特征值是否相同;若是,确定至少两个字符串相同;若否,确定至少两个字符串不同。在互联网的业务开发和实施环境中存在重复执行海量数据处理运算的判同操作时,由于使用字符串对应的摘要特征值进行比对得到字符串的判同结果,相对于对两个字符串中的每个字符都要进行比对才能得到判同结果的方式,由于摘要特征值的数据量往往远小于字符串的数据量,对摘要特征值进行比对得到判同结果,能够大量的减少判同操作的计算量,节省了运算资源,提升了整体的字符串判同效率。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1